From 1b8d4941d6803f249c47786c8298716eff6c83d9 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 19 Aug 2013 09:09:55 +0200 Subject: [PATCH 001/710] Statusbar clock: option to completely hide AM/PM --- res/values/strings.xml | 6 ++++ res/xml/gravitybox.xml | 32 ++++++++++++------ .../gm2/gravitybox/GravityBoxSettings.java | 13 +++++--- .../ceco/gm2/gravitybox/ModCenterClock.java | 33 +++++++++++++------ 4 files changed, 60 insertions(+), 24 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 06ea2b8711..23c76c2584 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -418,4 +418,10 @@ Ringer mode + + Clock settings + + + Hide AM/PM + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 5174220859..e742bed41c 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -253,6 +253,28 @@ + + + + + + + + + + + - - - - Date: Mon, 19 Aug 2013 09:30:07 +0200 Subject: [PATCH 002/710] Clock: option to hide clock --- res/values/strings.xml | 3 +++ res/xml/gravitybox.xml | 5 +++++ .../ceco/gm2/gravitybox/GravityBoxSettings.java | 5 +++++ src/com/ceco/gm2/gravitybox/ModCenterClock.java | 14 ++++++++++++++ 4 files changed, 27 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 23c76c2584..8c80129735 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -424,4 +424,7 @@ Hide AM/PM + + Hide clock + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index e742bed41c..2c22370570 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -272,6 +272,11 @@ android:title="@string/pref_clock_ampm_hide_title" android:defaultValue="false" /> + + diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index b2d80f2a90..f2bb36ca38 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -97,6 +97,7 @@ public class GravityBoxSettings extends Activity { 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_AMPM_HIDE = "pref_clock_ampm_hide"; + public static final String PREF_KEY_STATUSBAR_CLOCK_HIDE = "pref_clock_hide"; 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"; @@ -247,6 +248,7 @@ public class GravityBoxSettings extends Activity { public static final String EXTRA_CENTER_CLOCK = "centerClock"; 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 ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED = "gravitybox.intent.action.SAFE_MEDIA_VOLUME_CHANGED"; public static final String EXTRA_SAFE_MEDIA_VOLUME_ENABLED = "enabled"; @@ -663,6 +665,9 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 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_SAFE_MEDIA_VOLUME)) { intent.setAction(ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED); intent.putExtra(EXTRA_SAFE_MEDIA_VOLUME_ENABLED, diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java index 468a3c3a8b..e593df70be 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -46,6 +46,7 @@ public class ModCenterClock { private static int mClockOriginalPaddingLeft; private static boolean mClockShowDow = false; private static boolean mAmPmHide = false; + private static boolean mClockHide = false; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -72,6 +73,12 @@ public void onReceive(Context context, Intent intent) { XposedHelpers.callMethod(mClock, "updateClock"); } } + if (intent.hasExtra(GravityBoxSettings.EXTRA_CLOCK_HIDE)) { + mClockHide = intent.getBooleanExtra(GravityBoxSettings.EXTRA_CLOCK_HIDE, false); + if (mClock != null) { + XposedHelpers.callMethod(mClock, "updateClock"); + } + } } } }; @@ -86,6 +93,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { prefs.reload(); mClockShowDow = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_DOW, false); mAmPmHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_AMPM_HIDE, false); + mClockHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_HIDE, false); mIconArea = (ViewGroup) liparam.view.findViewById( liparam.res.getIdentifier("system_icon_area", "id", PACKAGE_NAME)); @@ -118,6 +126,12 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { // yes, if it contains our additional sbClock field Object sbClock = XposedHelpers.getAdditionalInstanceField(param.thisObject, "sbClock"); if (sbClock != null) { + if (mClockHide) { + mClock.setVisibility(View.GONE); + return; + } + + mClock.setVisibility(View.VISIBLE); Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); String clockText = param.getResult().toString(); String amPm = calendar.getDisplayName( From 606b5d927e6dd2e77acdeaf96c659cb8b2fdb1ce Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 19 Aug 2013 10:10:06 +0200 Subject: [PATCH 003/710] Pie: option to set trigger size --- res/values/strings.xml | 3 +++ res/xml/gravitybox.xml | 10 ++++++++++ .../ceco/gm2/gravitybox/GravityBoxSettings.java | 6 ++++++ src/com/ceco/gm2/gravitybox/ModPieControls.java | 15 +++++++++++++-- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 8c80129735..14feb43751 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -427,4 +427,7 @@ Hide clock + + Trigger size + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 2c22370570..603c65a007 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -231,6 +231,16 @@ android:entryValues="@array/pie_control_trigger_position_values" android:defaultValue="@array/pie_control_trigger_position_default" /> + + ()).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)); diff --git a/src/com/ceco/gm2/gravitybox/ModPieControls.java b/src/com/ceco/gm2/gravitybox/ModPieControls.java index 981c14bdab..cf8ff40691 100644 --- a/src/com/ceco/gm2/gravitybox/ModPieControls.java +++ b/src/com/ceco/gm2/gravitybox/ModPieControls.java @@ -12,6 +12,7 @@ import android.graphics.PixelFormat; import android.os.Handler; import android.provider.Settings; +import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -45,6 +46,7 @@ public class ModPieControls { public static final String SETTING_PIE_SEARCH = "pie_search"; public static final String SETTING_PIE_GRAVITY = "pie_gravity"; public static final String SETTING_PIE_SIZE = "pie_size"; + public static final String SETTING_PIE_TRIGGER_SIZE = "pie_trigger_size"; private static PieController mPieController; private static PieLayout mPieContainer; @@ -91,6 +93,10 @@ public void onReceive(Context context, Intent intent) { } Settings.System.putInt(cr, SETTING_PIE_GRAVITY, tslots); } + if (intent.hasExtra(GravityBoxSettings.EXTRA_PIE_TRIGGER_SIZE)) { + int size = intent.getIntExtra(GravityBoxSettings.EXTRA_PIE_TRIGGER_SIZE, 5); + Settings.System.putInt(cr, SETTING_PIE_TRIGGER_SIZE, size); + } if (intent.hasExtra(GravityBoxSettings.EXTRA_PIE_SIZE)) { float size = (float) intent.getIntExtra( GravityBoxSettings.EXTRA_PIE_SIZE, 1000) / 1000f; @@ -280,6 +286,8 @@ void observe() { SETTING_PIE_CONTROLS), false, this); resolver.registerContentObserver(Settings.System.getUriFor( SETTING_PIE_GRAVITY), false, this); + resolver.registerContentObserver(Settings.System.getUriFor( + SETTING_PIE_TRIGGER_SIZE), false, this); } @Override @@ -368,11 +376,14 @@ private static void refreshPieTriggers() { private static WindowManager.LayoutParams getPieTriggerLayoutParams(Position position) { final Resources res = mContext.getResources(); - final Resources gbRes = mGbContext.getResources(); int width = (int) (res.getDisplayMetrics().widthPixels * 0.8f); int height = (int) (res.getDisplayMetrics().heightPixels * 0.8f); - int triggerThickness = gbRes.getDimensionPixelSize(R.dimen.pie_trigger_height); + int triggerThickness = (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, Settings.System.getInt( + mContext.getContentResolver(), SETTING_PIE_TRIGGER_SIZE, 5), + res.getDisplayMetrics()); + if (DEBUG) log("Pie trigger thickness: " + triggerThickness); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( (position == Position.TOP || position == Position.BOTTOM ? width : triggerThickness), From e02a50ce902b2c1b57caed258775ab598c9382aa Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 19 Aug 2013 14:19:11 +0200 Subject: [PATCH 004/710] Implemented Transparency Manager - status bar transparency for launcher - status bar transparency for lockscreen - navbar transparency for launcher - navbar transparency for lockscreen Lockscreen transparency works only with the default background (default wallpaper) Inspired by AOKP --- res/values/strings.xml | 7 + res/xml/gravitybox.xml | 44 ++- .../BackgroundAlphaColorDrawable.java | 93 ++++++ .../gm2/gravitybox/GravityBoxSettings.java | 23 +- .../gm2/gravitybox/ModStatusbarColor.java | 60 +++- .../gm2/gravitybox/TransparencyManager.java | 276 ++++++++++++++++++ 6 files changed, 496 insertions(+), 7 deletions(-) create mode 100644 src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java create mode 100644 src/com/ceco/gm2/gravitybox/TransparencyManager.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 14feb43751..06fc815d64 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -430,4 +430,11 @@ Trigger size + + Transparency management + Statusbar transparency for launcher + Statusbar transparency for lockscreen + Navbar transparency for launcher + Navbar transparency for lockscreen + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 603c65a007..8d42b05852 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -133,7 +133,7 @@ android:title="@string/pref_cat_statusbar_colors_title"> @@ -157,6 +157,48 @@ + + + + + + + + + + + + diff --git a/src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java b/src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java new file mode 100644 index 0000000000..7e3be40df6 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java @@ -0,0 +1,93 @@ +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) { + if (color < 0) { + color = Color.BLACK; + } + 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/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index adc8423bc8..97c03f8b04 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -90,7 +90,7 @@ 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_KEY_STATUSBAR_BGCOLOR = "pref_statusbar_bgcolor2"; 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_STATUSBAR_DATA_ACTIVITY_COLOR = "pref_statusbar_data_activity_color"; @@ -98,6 +98,10 @@ public class GravityBoxSettings extends Activity { public static final String PREF_KEY_STATUSBAR_CLOCK_DOW = "pref_statusbar_clock_dow"; 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_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"; @@ -239,6 +243,10 @@ public class GravityBoxSettings extends Activity { 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_DATA_ACTIVITY_COLOR = "dataActivityColor"; + 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"; @@ -352,7 +360,6 @@ public void onCreate(Bundle savedInstanceState) { 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); @@ -655,6 +662,18 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 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_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_CLOCK_CHANGED); intent.putExtra(EXTRA_CENTER_CLOCK, diff --git a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java index 4b5cc50bfd..2e8c6e56d9 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java @@ -7,11 +7,14 @@ import android.content.res.Resources; import android.content.res.XModuleResources; import android.graphics.Color; +import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.BatteryManager; +import android.provider.Settings; import android.view.View; +import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; @@ -51,6 +54,7 @@ public class ModStatusbarColor { private static Integer mClockDefaultColor; private static Integer mPercentageDefaultColor; private static boolean mRoamingIndicatorsDisabled; + private static TransparencyManager mTransparencyManager; static { mIconManager = new StatusBarIconManager(XModuleResources.createInstance(GravityBox.MODULE_PATH, null)); @@ -108,6 +112,22 @@ public void onReceive(Context context, Intent intent) { log("Icon colors master switch set to: " + mIconColorEnabled); if (!mIconColorEnabled) mIconManager.clearCache(); applyIconColors(); + } else if (intent.hasExtra(GravityBoxSettings.EXTRA_TM_SB_LAUNCHER)) { + Settings.System.putInt(context.getContentResolver(), + TransparencyManager.SETTING_STATUS_BAR_ALPHA_CONFIG_LAUNCHER, + intent.getIntExtra(GravityBoxSettings.EXTRA_TM_SB_LAUNCHER, 0)); + } else if (intent.hasExtra(GravityBoxSettings.EXTRA_TM_SB_LOCKSCREEN)) { + Settings.System.putInt(context.getContentResolver(), + TransparencyManager.SETTING_STATUS_BAR_ALPHA_CONFIG_LOCKSCREEN, + intent.getIntExtra(GravityBoxSettings.EXTRA_TM_SB_LOCKSCREEN, 0)); + } else if (intent.hasExtra(GravityBoxSettings.EXTRA_TM_NB_LAUNCHER)) { + Settings.System.putInt(context.getContentResolver(), + TransparencyManager.SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LAUNCHER, + intent.getIntExtra(GravityBoxSettings.EXTRA_TM_NB_LAUNCHER, 0)); + } else if (intent.hasExtra(GravityBoxSettings.EXTRA_TM_NB_LOCKSCREEN)) { + Settings.System.putInt(context.getContentResolver(), + TransparencyManager.SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LOCKSCREEN, + intent.getIntExtra(GravityBoxSettings.EXTRA_TM_NB_LOCKSCREEN, 0)); } } @@ -140,8 +160,6 @@ public void onReceive(Context context, Intent intent) { }; public static void initZygote() { - log("initZygote"); - try { final Class phoneWindowManagerClass = XposedHelpers.findClass(CLASS_PHONE_WINDOW_MANAGER, null); @@ -165,8 +183,6 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { - log("init"); - try { final Class panelBarClass = XposedHelpers.findClass(CLASS_PANEL_BAR, classLoader); final Class phoneStatusbarClass = XposedHelpers.findClass(CLASS_PHONE_STATUSBAR, classLoader); @@ -212,6 +228,12 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); + mTransparencyManager = new TransparencyManager(context); + mTransparencyManager.setStatusbar(XposedHelpers.getObjectField(param.thisObject, "mStatusBarView")); + mTransparencyManager.setNavbar(XposedHelpers.getObjectField( + param.thisObject, "mNavigationBarView")); + mBatteryController = XposedHelpers.getObjectField(param.thisObject, "mBatteryController"); prefs.reload(); int bgColor = prefs.getInt(GravityBoxSettings.PREF_KEY_STATUSBAR_BGCOLOR, Color.BLACK); @@ -220,6 +242,36 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } }); + XposedHelpers.findAndHookMethod(phoneStatusbarClass, "getNavigationBarLayoutParams", new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + WindowManager.LayoutParams lp = (WindowManager.LayoutParams) param.getResult(); + if (lp != null) { + lp.format = PixelFormat.TRANSLUCENT; + param.setResult(lp); + } + } + }); + + XposedHelpers.findAndHookMethod(phoneStatusbarClass, "disable", int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + if (mTransparencyManager != null) { + mTransparencyManager.update(); + } + } + }); + + XposedHelpers.findAndHookMethod(phoneStatusbarClass, "topAppWindowChanged", + boolean.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + if (mTransparencyManager != null) { + mTransparencyManager.update(); + } + } + }); + XposedHelpers.findAndHookMethod(batteryControllerClass, "onReceive", Context.class, Intent.class, new XC_MethodHook(XCallback.PRIORITY_HIGHEST) { diff --git a/src/com/ceco/gm2/gravitybox/TransparencyManager.java b/src/com/ceco/gm2/gravitybox/TransparencyManager.java new file mode 100644 index 0000000000..10016c317b --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/TransparencyManager.java @@ -0,0 +1,276 @@ +package com.ceco.gm2.gravitybox; + +import java.util.List; + +import de.robv.android.xposed.XposedBridge; + +import android.animation.Animator; +import android.animation.Animator.AnimatorListener; +import android.animation.AnimatorSet; +import android.animation.ArgbEvaluator; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.app.ActivityManager; +import android.app.KeyguardManager; +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.ActivityInfo; +import android.database.ContentObserver; +import android.os.Handler; +import android.provider.Settings; +import android.view.View; + +public class TransparencyManager { + public static final String SETTING_STATUS_BAR_ALPHA_CONFIG_LAUNCHER = "status_bar_alpha_config_launcher"; + public static final String SETTING_STATUS_BAR_ALPHA_CONFIG_LOCKSCREEN = "status_bar_alpha_config_lockscreen"; + public static final String SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LAUNCHER = "navigation_bar_alpha_config_launcher"; + public static final String SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LOCKSCREEN = "navigation_bar_alpha_config_lockscreen"; + + public static final float KEYGUARD_ALPHA = 0.44f; + + private static final String TAG = "TransparencyManager"; + + Object mNavbar; + Object mStatusbar; + + SomeInfo mNavbarInfo = new SomeInfo(); + SomeInfo mStatusbarInfo = new SomeInfo(); + + final Context mContext; + + Handler mHandler = new Handler(); + + boolean mIsHomeShowing; + boolean mIsKeyguardShowing; + + KeyguardManager km; + ActivityManager am; + + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + + private static class SomeInfo { + ValueAnimator anim; + int color; + float keyguardAlpha; + float homeAlpha; + boolean tempDisable; + } + + private final Runnable updateTransparencyRunnable = new Runnable() { + @Override + public void run() { + doTransparentUpdate(); + } + }; + + public TransparencyManager(Context context) { + mContext = context; + + km = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); + am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); + + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(Intent.ACTION_SCREEN_OFF); + context.registerReceiver(new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + update(); + } + }, intentFilter); + + SettingsObserver settingsObserver = new SettingsObserver(mHandler); + settingsObserver.observe(); + } + + public void update() { + mHandler.removeCallbacks(updateTransparencyRunnable); + mHandler.postDelayed(updateTransparencyRunnable, 100); + } + + public void setNavbar(Object n) { + mNavbar = n; + } + + public void setStatusbar(Object s) { + mStatusbar = s; + } + + public void setTempDisableStatusbarState(boolean state) { + mStatusbarInfo.tempDisable = state; + } + + public void setTempNavbarState(boolean state) { + mNavbarInfo.tempDisable = state; + } + + private ValueAnimator createAnimation(final SomeInfo info, View v) { + if (info.anim != null) { + info.anim.cancel(); + info.anim = null; + } + + float a = 1; + + if (info.tempDisable) { + info.tempDisable = false; + } else if (mIsKeyguardShowing) { + a = info.keyguardAlpha; + } else if (mIsHomeShowing) { + a = info.homeAlpha; + } + + final float alpha = a; + ValueAnimator anim = null; + if (v.getBackground() instanceof BackgroundAlphaColorDrawable) { + final BackgroundAlphaColorDrawable bg = (BackgroundAlphaColorDrawable) v + .getBackground(); + anim = ValueAnimator.ofObject(new ArgbEvaluator(), info.color, + BackgroundAlphaColorDrawable.applyAlphaToColor(bg.getBgColor(), alpha)); + anim.addUpdateListener(new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + info.color = (Integer) animation.getAnimatedValue(); + bg.setColor(info.color); + } + }); + } else { + // custom image is set by the theme, let's just apply the alpha if we can. + v.getBackground().setAlpha(BackgroundAlphaColorDrawable.floatAlphaToInt(alpha)); + return null; + } + anim.addListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + @Override + public void onAnimationRepeat(Animator animation) { + } + @Override + public void onAnimationEnd(Animator animation) { + info.anim = null; + } + @Override + public void onAnimationCancel(Animator animation) { + info.anim = null; + } + }); + info.anim = anim; + return anim; + } + + private void doTransparentUpdate() { + mIsKeyguardShowing = isKeyguardShowing(); + mIsHomeShowing = isLauncherShowing(); + + ValueAnimator navAnim = null, sbAnim = null; + if (mNavbar != null) { + navAnim = createAnimation(mNavbarInfo, (View)mNavbar); + } + if (mStatusbar != null) { + sbAnim = createAnimation(mStatusbarInfo, (View)mStatusbar); + } + if (navAnim != null && sbAnim != null) { + AnimatorSet set = new AnimatorSet(); + set.playTogether(navAnim, sbAnim); + set.start(); + } else { + if(navAnim != null) { + navAnim.start(); + } else if(sbAnim != null) { + sbAnim.start(); + } + } + } + + private boolean isLauncherShowing() { + try { + final List recentTasks = am + .getRecentTasks( + 1, ActivityManager.RECENT_WITH_EXCLUDED); + if (recentTasks.size() > 0) { + ActivityManager.RecentTaskInfo recentInfo = recentTasks.get(0); + Intent intent = new Intent(recentInfo.baseIntent); + if (recentInfo.origActivity != null) { + intent.setComponent(recentInfo.origActivity); + } + if (isCurrentHomeActivity(intent.getComponent(), null)) { + return true; + } + } + } catch(Exception ignore) { + } + return false; + } + + private boolean isKeyguardShowing() { + if (km == null) + return false; + return km.isKeyguardLocked(); + } + + private boolean isCurrentHomeActivity(ComponentName component, ActivityInfo homeInfo) { + if (homeInfo == null) { + homeInfo = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME) + .resolveActivityInfo(mContext.getPackageManager(), 0); + } + return homeInfo != null + && homeInfo.packageName.equals(component.getPackageName()) + && homeInfo.name.equals(component.getClassName()); + } + + class SettingsObserver extends ContentObserver { + SettingsObserver(Handler handler) { + super(handler); + } + + void observe() { + ContentResolver resolver = mContext.getContentResolver(); + + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LAUNCHER), false, + this); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LOCKSCREEN), false, + this); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_STATUS_BAR_ALPHA_CONFIG_LAUNCHER), false, + this); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_STATUS_BAR_ALPHA_CONFIG_LOCKSCREEN), false, + this); + updateSettings(); + } + + @Override + public void onChange(boolean selfChange) { + updateSettings(); + } + } + + protected void updateSettings() { + ContentResolver resolver = mContext.getContentResolver(); + float value; + + value = Settings.System.getInt(resolver, SETTING_STATUS_BAR_ALPHA_CONFIG_LAUNCHER, 0); + mStatusbarInfo.homeAlpha = 1 - (value / 100f); + + value = Settings.System.getInt(resolver, SETTING_STATUS_BAR_ALPHA_CONFIG_LOCKSCREEN, 0); + mStatusbarInfo.keyguardAlpha = 1 - (value / 100f); + + value = Settings.System.getInt(resolver, SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LAUNCHER, 0); + mNavbarInfo.homeAlpha = 1 - (value / 100f); + + value = Settings.System.getInt(resolver, SETTING_NAVIGATION_BAR_ALPHA_CONFIG_LOCKSCREEN, 0); + mNavbarInfo.keyguardAlpha = 1 - (value / 100f); + + update(); + } +} + From a63fcdd218e2fc59554566e4b757e824e306a0c7 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 19 Aug 2013 15:21:45 +0200 Subject: [PATCH 005/710] Option to hide statusbar alarm icon --- res/values/strings.xml | 3 ++ res/xml/gravitybox.xml | 5 +++ .../gm2/gravitybox/GravityBoxSettings.java | 5 +++ .../ceco/gm2/gravitybox/ModCenterClock.java | 38 +++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 06fc815d64..dc7c127aeb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -437,4 +437,7 @@ Navbar transparency for launcher Navbar transparency for lockscreen + + Hide alarm icon + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 8d42b05852..e857371ccf 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -329,6 +329,11 @@ android:title="@string/pref_clock_hide_title" android:defaultValue="false" /> + + diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 97c03f8b04..32ff27b429 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -98,6 +98,7 @@ public class GravityBoxSettings extends Activity { public static final String PREF_KEY_STATUSBAR_CLOCK_DOW = "pref_statusbar_clock_dow"; 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_ALARM_ICON_HIDE = "pref_alarm_icon_hide"; 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"; @@ -259,6 +260,7 @@ public class GravityBoxSettings extends Activity { 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_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"; @@ -689,6 +691,9 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { } 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_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, diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java index e593df70be..33c9c6df96 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -15,6 +15,8 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; +import android.provider.AlarmClock; +import android.provider.Settings; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.format.DateFormat; @@ -32,6 +34,7 @@ public class ModCenterClock { 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 final String CLASS_PHONE_STATUSBAR_POLICY = "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy"; private static ViewGroup mIconArea; private static ViewGroup mRootView; @@ -47,6 +50,8 @@ public class ModCenterClock { private static boolean mClockShowDow = false; private static boolean mAmPmHide = false; private static boolean mClockHide = false; + private static boolean mAlarmHide = false; + private static Object mPhoneStatusBarPolicy; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -79,6 +84,16 @@ public void onReceive(Context context, Intent intent) { XposedHelpers.callMethod(mClock, "updateClock"); } } + if (intent.hasExtra(GravityBoxSettings.EXTRA_ALARM_HIDE)) { + mAlarmHide = intent.getBooleanExtra(GravityBoxSettings.EXTRA_ALARM_HIDE, false); + if (mPhoneStatusBarPolicy != null) { + String alarmFormatted = Settings.System.getString(context.getContentResolver(), + Settings.System.NEXT_ALARM_FORMATTED); + Intent i = new Intent(); + i.putExtra("alarmSet", (alarmFormatted != null && !alarmFormatted.isEmpty())); + XposedHelpers.callMethod(mPhoneStatusBarPolicy, "updateAlarm", i); + } + } } } }; @@ -94,6 +109,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { mClockShowDow = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_DOW, false); mAmPmHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_AMPM_HIDE, false); mClockHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_HIDE, false); + mAlarmHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_ALARM_ICON_HIDE, false); mIconArea = (ViewGroup) liparam.view.findViewById( liparam.res.getIdentifier("system_icon_area", "id", PACKAGE_NAME)); @@ -181,11 +197,33 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL XposedHelpers.findClass(CLASS_PHONE_STATUSBAR, classLoader); final Class tickerClass = XposedHelpers.findClass(CLASS_TICKER, classLoader); + final Class phoneStatusBarPolicyClass = + XposedHelpers.findClass(CLASS_PHONE_STATUSBAR_POLICY, classLoader); final Class[] loadAnimParamArgs = new Class[2]; loadAnimParamArgs[0] = int.class; loadAnimParamArgs[1] = Animation.AnimationListener.class; + XposedBridge.hookAllConstructors(phoneStatusBarPolicyClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mPhoneStatusBarPolicy = param.thisObject; + } + }); + + XposedHelpers.findAndHookMethod(phoneStatusBarPolicyClass, + "updateAlarm", Intent.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + Object sbService = XposedHelpers.getObjectField(param.thisObject, "mService"); + if (sbService != null) { + boolean alarmSet = ((Intent)param.args[0]).getBooleanExtra("alarmSet", false); + XposedHelpers.callMethod(sbService, "setIconVisibility", "alarm_clock", + (alarmSet && !mAlarmHide)); + } + } + }); + XposedHelpers.findAndHookMethod(phoneStatusBarClass, "makeStatusBarView", new XC_MethodHook() { @Override From b2ade8ac89ea265590c265e1b266cc45d1b99eb3 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 07:57:52 +0200 Subject: [PATCH 006/710] Clear all recents: don't show button when there are no tasks --- src/com/ceco/gm2/gravitybox/ModClearAllRecents.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java index 0c961cf5c2..f4101a505b 100644 --- a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java +++ b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java @@ -1,5 +1,7 @@ package com.ceco.gm2.gravitybox; +import java.util.List; + import android.content.res.Resources; import android.os.Build; import android.os.Handler; @@ -49,9 +51,10 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable return; } - if (gravity == GravityBoxSettings.RECENT_CLEAR_OFF) { - iv.setVisibility(View.GONE); - } else { + List recentTaskDescriptions = (List) XposedHelpers.getObjectField( + param.thisObject, "mRecentTaskDescriptions"); + boolean visible = (recentTaskDescriptions != null && recentTaskDescriptions.size() > 0); + if (gravity != GravityBoxSettings.RECENT_CLEAR_OFF && visible) { FrameLayout.LayoutParams lparams = (FrameLayout.LayoutParams) iv.getLayoutParams(); lparams.gravity = gravity; if ((gravity & Gravity.TOP) != 0) { @@ -65,6 +68,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } iv.setLayoutParams(lparams); iv.setVisibility(View.VISIBLE); + } else { + iv.setVisibility(View.GONE); } } } @@ -105,6 +110,7 @@ public void onClick(View v) { mRecentsContainer.removeViewInLayout(null); } }); + imgView.setVisibility(View.GONE); vg.addView(imgView); log("clearAllButton ImageView injected"); } From 299f7f61f3c48199fcd4716c361a527e02eae102 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 09:43:13 +0200 Subject: [PATCH 007/710] Button backlight notifications improved - makes button backlight blink - now works with phone calls also - requires partial wakelock that is needed for software blinking - wakelock will timeout after one hour automatically to avoid depleting battery --- res/values/strings.xml | 2 +- src/com/ceco/gm2/gravitybox/ModDisplay.java | 87 ++++++++++++++------- 2 files changed, 60 insertions(+), 29 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index dc7c127aeb..2179de5aa6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -363,7 +363,7 @@ Disable button backlight Always on while screen is on Button 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 diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java index 29cecff1aa..7f3389beaf 100644 --- a/src/com/ceco/gm2/gravitybox/ModDisplay.java +++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java @@ -7,7 +7,9 @@ import android.content.res.Resources; import android.content.res.XResources; 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; @@ -36,7 +38,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); @@ -78,6 +79,44 @@ public void onReceive(Context context, Intent intent) { }; + 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, 200); + } 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 = @@ -160,6 +199,8 @@ int.class, int.class, int.class, int.class, int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + if (mHandler == null) mHandler = new Handler(); + if (mLight == null) mLight = param.thisObject; int id = XposedHelpers.getIntField(param.thisObject, "mId"); if (DEBUG ) log("lightId=" + id + "; color=" + param.args[0] + "; mode=" + param.args[1] + "; " + "onMS=" + param.args[2] + @@ -171,8 +212,8 @@ 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; @@ -186,35 +227,25 @@ 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 (id == LIGHT_ID_NOTIFICATIONS || id == LIGHT_ID_ATTENTION) { + if ((Integer)param.args[0] != 0) { + if (!mPendingNotif) { + 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) { + 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); - } } } }); From eb909663e3c9979a015e168b7ebc53e13cce75cc Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 10:37:50 +0200 Subject: [PATCH 008/710] Option to set screen dim level Use SeekBarPreference for these brightness prefs --- res/layout/slider_preference.xml | 11 ++++++- res/values/strings.xml | 4 +++ res/xml/gravitybox.xml | 20 ++++++++++--- .../gm2/gravitybox/GravityBoxSettings.java | 30 +++---------------- src/com/ceco/gm2/gravitybox/ModDisplay.java | 20 ++++++------- 5 files changed, 44 insertions(+), 41 deletions(-) diff --git a/res/layout/slider_preference.xml b/res/layout/slider_preference.xml index fba6864fc4..920209e384 100644 --- a/res/layout/slider_preference.xml +++ b/res/layout/slider_preference.xml @@ -39,10 +39,19 @@ android:ellipsize="marquee" android:fadingEdge="horizontal" /> + + Hide alarm icon + + Screen dim level + Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index e857371ccf..38ad0e84b9 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -402,14 +402,26 @@ android:summary="@string/pref_cat_display_summary"> - + + 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 (rebootKeys.contains(key)) Toast.makeText(getActivity(), getString(R.string.reboot_required), Toast.LENGTH_SHORT).show(); } diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java index 7f3389beaf..5a948e2ad6 100644 --- a/src/com/ceco/gm2/gravitybox/ModDisplay.java +++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java @@ -123,21 +123,21 @@ public static void initZygote(final XSharedPreferences prefs) { XposedHelpers.findClass(CLASS_DISPLAY_POWER_CONTROLLER, null); final Class classLight = XposedHelpers.findClass(CLASS_LIGHT_SERVICE_LIGHT, null); - String brightnessMin = prefs.getString(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, "20"); + int brightnessMin = prefs.getInt(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, 20); + XResources.setSystemWideReplacement( + "android", "integer", "config_screenBrightnessSettingMinimum", brightnessMin); + log("Minimum brightness value set to: " + brightnessMin); + + int screenDim = prefs.getInt(GravityBoxSettings.PREF_KEY_SCREEN_DIM_LEVEL, 10); + XResources.setSystemWideReplacement( + "android", "integer", "config_screenBrightnessDim", screenDim); + log("Screen dim level set to: " + screenDim); + 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); - XResources.setSystemWideReplacement( - "android", "integer", "config_screenBrightnessSettingMinimum", bMin); - log("Minimum brightness value set to: " + bMin); - } catch (NumberFormatException e) { - XposedBridge.log(e); - } - XposedBridge.hookAllConstructors(classDisplayPowerController, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { From 4596c7023116773abaecab8a84e715c77c06a750 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 10:54:45 +0200 Subject: [PATCH 009/710] Updated Slovak translations --- res/values-sk/strings.xml | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index c7ba793741..e7289d829b 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -387,4 +387,57 @@ 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 + + + Vždy zobraziť menu tlačidlo + + + Režim zvonenia + + + Nastavenia hodín + + + Skryť AM/PM + + + Skryť hodiny + + + Veľkosť aktivátora + + + Nastavenia priehľadnosti + Stavového riadku pre launcher + Stavového riadku pre lockscreen + Navigačnej lišty pre launcher + Navigačnej lišty pre lockscreen + + + Skryť ikonu alarmu + + + Úroveň zatmavenia obrazovky + Úroveň jasu pre zatmavenie obrazovky tesne pred jej vypnutím (vyžaduje reštart) + From b30e79cdacb3ee0c8e9d50d7a8bfd26e3f277d0b Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 11:00:13 +0200 Subject: [PATCH 010/710] Updated Czech translations --- res/values-cs/strings.xml | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 1ea5b2da6b..dda0f4c010 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -390,4 +390,57 @@ 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 + + + 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 + Stavového řádku pro launcher + Stavového řádku pro lockscreen + Navigační lišty pro launcher + Navigační lišty 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) + From 85c3446543bdc85a3683699a3ce86e8b07f53500 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 11:13:43 +0200 Subject: [PATCH 011/710] Version 2.2.0 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e2662c34b1..b4442de821 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="23" + android:versionName="2.2.0" > Date: Tue, 20 Aug 2013 15:37:18 +0300 Subject: [PATCH 012/710] Updated Russian translation - finally. I just was on vacation. --- res/values-ru/strings.xml | 140 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 135 insertions(+), 5 deletions(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index edef24127c..b537bfcef3 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -1,11 +1,12 @@ - + GravityBox Вид индикатора заряда Стоковый индикатор - Круглый индикатор с процентами + Круглый индикатор + Круглый индикатор с процентами Индикатор с процентами Не показывать @@ -38,7 +39,6 @@ Звук вверх/вниз для перемещения курсора вправо/влево Закрыть все текущие задачи - Включает кнопку для закрытия всех текущих задач в диалоге \"Недавние приложения\" Исправление падения диалога Дата и время Включить, если при входе в настройки Даты и времени происходит падение (Необходима перезагрузка) @@ -95,6 +95,7 @@ GravityBox Сон Быстрая запись + Настройки Выбор цвета @@ -132,11 +133,11 @@ Телефон будет перезагружен Телефон будет перезагружен в recovery - + CRT-эффект выключения экрана Позволяет включить анимацию, имитирующую выключение старых ЭЛТ-мониторов, при выключении экрана - + Инженерное меню Позволяет запустить Инженерное меню @@ -315,4 +316,133 @@ Управление Быстрыми настройками + + Notification drawer style + + + Фон шторки уведомлений + Стандартный фон + Заполнение цветом + Пользовательское изображение + Задать цвет фона + Задать портретную картинку + Задать ландшафтную картинку + Прозрачность фона + Режим фона + Передний план + Задний план + + + Отключить индикатор роуминга + При отключении R-индикатор не будет отображаться. Используйте с осторожностью. + + + Зарядка (%d%%) + Заряжен + %d%% осталось + + + Нет сети + Режим полета + Только экстренные + + + Pie controls + Включить pie controls + Включить кнопку поиска + Размер навигационных кнопок + Позиция переключателей + Левая граница + Нижняя граница + Правая граница + Верхняя граница + + + Режим подсветки клавиш + Стандартный + Отключить подсветку + Включать всегда, когда включен экран + Уведомления подсветкой клавиш + ЭКСПЕРИМЕНТАЛЬНО! Моргающая подсветка клавиш при уведомлениях. Использовать только в сулчае отсутствия LED индикатора. Может привести к ухудшению жизни батареи. + + + Скрыть панель навигации + Скрывает панель навигации, когда включен Pie control (для устройств с программными кнопками навигации, необходима перезагрузка) + + + Сглаженный Holo фон + Заменяет стандартный фон на сглаженный для избежания неплавного градиента (необходима перезагрузка) + + + Отключить железные кнопки + Отключает кнопки НАЗАД, ДОМОЙ, МЕНЮ при включенном Pie Controls. Нестандартные действия этих кнопок по прежнему будут работать. (Для устройств с железными кнопками) + + + Изпользовать тему Holo Dark + Переключает тему интерфейса GravityBox со светлой на темную + + + Выключено + Сверху слева + Сверху справа + Снизу слева + Снизу справа + + + Настроить отступ сверху + + + Отключить предупреждения о роуминге + Отключить предупреждения о роуминге при отправке сообщений или совершении звонков в роуминге + + + Поиск + (нет) + + + Быстрый запуск + Настрйоки тайла Быстрого запуска + Основное приложение + Долгий тап, слот 1 + Долгий тап, слот 2 + Долгий тап, слот 3 + Долгий тап, слот 4 + + + GPS вкл + GPS выкл + + + Всегда показывать кнопку меню + + + Режим звонка + + + Настройки часов + + + Прятать AM/PM + + + Прятать часы + + + Размер переключателей + + + Управление прозрачностью + Прозрачность статусбара для ланчера + Прозрачность статусбара для экарна блокировки + Прозрачность панели навигации для ланчера + Прозрачность панели навигации для экарна блокировки + + + Спрятать значок будильника + + + Уровень затухания подсветки + Яркость для приглушенной подсветки - когда экран почти выключился (необходима перезагрузка) + + From efa919ab5527bd3d9219e29337fa65cb11791387 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 22:30:10 +0200 Subject: [PATCH 013/710] Fixed hasGeminiSupport check failing on non-MTK devices. - KeyGuardUtils class is not a standard Android class so it is necessary to handle potential exception that is thrown by findClass method when it can't find that class - Added info on Gemini support into HW info startup log --- src/com/ceco/gm2/gravitybox/GravityBox.java | 1 + src/com/ceco/gm2/gravitybox/Utils.java | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index 8b7d025a07..68cb037b3d 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -25,6 +25,7 @@ public void initZygote(StartupParam startupParam) throws Throwable { XposedBridge.log("Device brand: " + Build.BRAND); XposedBridge.log("Device model: " + Build.MODEL); XposedBridge.log("Is MTK device: " + Utils.isMtkDevice()); + XposedBridge.log("Has Gemini support: " + Utils.hasGeminiSupport()); XposedBridge.log("Android SDK: " + Build.VERSION.SDK_INT); XposedBridge.log("Android Release: " + Build.VERSION.RELEASE); XposedBridge.log("ROM: " + Build.DISPLAY); diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 550f38a350..a945d2fd96 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -1,10 +1,7 @@ package com.ceco.gm2.gravitybox; +import de.robv.android.xposed.XposedBridge; import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; import android.os.Build; import android.util.DisplayMetrics; import android.view.WindowManager; @@ -65,7 +62,12 @@ public static boolean isMtkDevice() { } public static boolean hasGeminiSupport() { - Class classKeyguardUtils = findClass("com.android.internal.policy.impl.keyguard.KeyguardUtils", null); - return (isMtkDevice() && (Boolean) callStaticMethod(classKeyguardUtils, "isGemini")); + try { + Class classKeyguardUtils = findClass("com.android.internal.policy.impl.keyguard.KeyguardUtils", null); + return (isMtkDevice() && (Boolean) callStaticMethod(classKeyguardUtils, "isGemini")); + } catch (Throwable t) { + XposedBridge.log("Utils: hasGeminiSupport check failed. Assuming device has no Gemini support"); + return false; + } } } From 43561c6cb561d939007ed9921dac1b536b0f0f6e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 22:39:45 +0200 Subject: [PATCH 014/710] Version 2.2.1 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b4442de821..131ba0f489 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="24" + android:versionName="2.2.1" > Date: Tue, 20 Aug 2013 22:47:21 +0200 Subject: [PATCH 015/710] Added German translations - not complete yet (thanks to Napzter) --- res/values-de/strings.xml | 447 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 447 insertions(+) create mode 100644 res/values-de/strings.xml diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml new file mode 100644 index 0000000000..ec01c8dbe2 --- /dev/null +++ b/res/values-de/strings.xml @@ -0,0 +1,447 @@ + + + + GravityBox + + Battery indicator style + Stock battery indicator + Circle battery + Circle battery with percentage + Battery percent text + None + + Volume keys skip track + Skip tracks on volume keys long-press while screen is off + + Low battery warning + Pop-up and sound + Pop-up only + Sound only + Off + + Change will be applied after reboot + + Auto-hide signal icons + 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 + Disable notifications + \"SIM not inserted\" notifications disabled + + Advanced reboot menu + Enables advanced reboot menu with option to reboot to recovery + Recovery + + Volume key cursor control + Controls cursor using volume keys in text fields + Disabled + Volume up/down moves cursor left/right + Volume up/down moves cursor right/left + + Clear all recent tasks + + 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 + + Fullscreen caller photo + Displays fullscreen caller photo on incoming call screen + + + 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 + + + Statusbar QuickSettings tiles + Allows to show or hide QuickSettings tiles in statusbar + Benutzerprofil + Flugmodus + Akku + WLAN + Bluetooth + GPS + Mobile Daten + Netzmodus + Datennutzung + Audioprofile + Helligkeit + Displayabschaltung + Autorotation + Synchronisation + WLAN-Hotspot + Taschenlampe + GravityBox + Schlafmodus + Schnelle Aufnahme + Einstellungen + + + Color Picker + Press on Color to apply + + + Statusbar background color + Allows to set statusbar background color and transparency + + + Fix speech settings + Unlocks voice search and text-to-speech settings in Language&Input (requires reboot) + + + Advanced developer options + Unlocks advanced developer options (requires reboot) + + + Statusbar tweaks + Contains various statusbar tweaks + Miscellaneous tweaks + Contains all other tweaks not falling into specific category + General fixes + Contains general MTK6589 specific fixes. Use only if needed. + + + 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. + + + Your phone will reboot + Your phone will reboot into recovery + + + CRT screen off effect + Enables animation that simulates old CRT off effect when turning off the screen + + + Engineering mode + Launches Engineering mode application + + + Dual SIM Ringer + Launches application that allows to set ringtone and notification sounds separately for each SIM + + + Lockscreen tweaks + Contains various lockscreen tweaks + Lockscreen background + Background style + Default wallpaper + Color fill + Custom image + Set custom color + Allows to set custom background color for lockscreen + Set custom image + Allows to set custom background image for lockscreen + Background changed + Background not changed + Other + 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) + Value from interval: 10 – 80 + + + Autobrightness levels + Allows to set ambient light levels and corresponding LCD backlight values + Level + Lux max + Brightness (10 – 255) + Specified number is not valid + It is not recommended to set brightness below 10 + 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 + Application 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 + Show search button + 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 + + + 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) + + From 0810ab04c831ad51eaf750a4c88f5d4c564df71c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 20 Aug 2013 22:47:59 +0200 Subject: [PATCH 016/710] Updated changelog --- CHANGELOG.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6c2bebb488..093af1a5cf 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -2,6 +2,7 @@ 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 -------------------------------------- From 57e1c51577cbd9503b894c0c0cff3bff5add1faa Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Wed, 21 Aug 2013 19:01:42 +0100 Subject: [PATCH 017/710] ModCenterClock: use hasGeminiSupport --- src/com/ceco/gm2/gravitybox/ModCenterClock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java index 33c9c6df96..edf7e1c013 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -100,7 +100,7 @@ public void onReceive(Context context, Intent intent) { public static void initResources(final XSharedPreferences prefs, final InitPackageResourcesParam resparam) { try { - String layout = Utils.isMtkDevice() ? "gemini_super_status_bar" : "super_status_bar"; + String layout = Utils.hasGeminiSupport() ? "gemini_super_status_bar" : "super_status_bar"; resparam.res.hookLayout(PACKAGE_NAME, "layout", layout, new XC_LayoutInflated() { @Override From dde21f3b90f9f0ecb5cd8b64fecd61e0cc14a23c Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Wed, 21 Aug 2013 19:03:11 +0100 Subject: [PATCH 018/710] Remove Phone specific preferences on Tablet devices --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 605cb14d63..9296fc58d1 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -330,6 +330,8 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private PreferenceScreen mPrefCatFixes; private PreferenceScreen mPrefCatStatusbar; private PreferenceScreen mPrefCatStatusbarQs; + private CheckBoxPreference mPrefAutoSwitchQs; + private ListPreference mPrefQuickPulldown; private PreferenceScreen mPrefCatNotifDrawerStyle; private ListPreference mPrefNotifBackground; private ColorPickerPreference mPrefNotifColor; @@ -417,6 +419,8 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatFixes = (PreferenceScreen) findPreference(PREF_CAT_KEY_FIXES); mPrefCatStatusbar = (PreferenceScreen) findPreference(PREF_CAT_KEY_STATUSBAR); mPrefCatStatusbarQs = (PreferenceScreen) findPreference(PREF_CAT_KEY_STATUSBAR_QS); + 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); @@ -441,6 +445,12 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatPhone = (PreferenceScreen) findPreference(PREF_CAT_KEY_PHONE); mPrefRoamingWarningDisable = (CheckBoxPreference) findPreference(PREF_KEY_ROAMING_WARNING_DISABLE); + // Remove Phone specific preferences on Tablet devices + if (Utils.isTablet(getActivity())) { + mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); + mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); + } + // Remove MTK specific preferences for non-mtk device if (!Utils.isMtkDevice()) { getPreferenceScreen().removePreference(mPrefCatFixes); From 289e0ade6026f3c304c71c89a1edcc3df833569b Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Wed, 21 Aug 2013 19:04:13 +0100 Subject: [PATCH 019/710] Small typo correction --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 9296fc58d1..a7f408477c 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -116,7 +116,7 @@ public class GravityBoxSettings extends Activity { 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_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"; @@ -392,7 +392,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); @@ -451,7 +451,7 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); } - // Remove MTK specific preferences for non-mtk device + // Remove MTK specific preferences for non-MTK devices if (!Utils.isMtkDevice()) { getPreferenceScreen().removePreference(mPrefCatFixes); mPrefCatStatusbar.removePreference(mSignalIconAutohide); From 5d4d9dcc051c74b39a23cd86fabf235ab2cb6ccf Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Thu, 22 Aug 2013 15:32:25 +0300 Subject: [PATCH 020/710] Updated Russian translation. Some fixes and corrections. --- res/values-ru/strings.xml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index b537bfcef3..4cf9aa340f 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -317,7 +317,7 @@ Управление Быстрыми настройками - Notification drawer style + Стиль шторки уведомлений Фон шторки уведомлений @@ -347,8 +347,8 @@ Только экстренные - Pie controls - Включить pie controls + Веерное меню + Включить веерное меню Включить кнопку поиска Размер навигационных кнопок Позиция переключателей @@ -367,7 +367,7 @@ Скрыть панель навигации - Скрывает панель навигации, когда включен Pie control (для устройств с программными кнопками навигации, необходима перезагрузка) + Скрывает панель навигации, когда включено веерное меню (для устройств с программными кнопками навигации, необходима перезагрузка) Сглаженный Holo фон @@ -375,7 +375,7 @@ Отключить железные кнопки - Отключает кнопки НАЗАД, ДОМОЙ, МЕНЮ при включенном Pie Controls. Нестандартные действия этих кнопок по прежнему будут работать. (Для устройств с железными кнопками) + Отключает кнопки НАЗАД, ДОМОЙ, МЕНЮ при включенном веерном меню. Нестандартные действия этих кнопок по прежнему будут работать. (Для устройств с железными кнопками) Изпользовать тему Holo Dark @@ -413,7 +413,7 @@ GPS выкл - Всегда показывать кнопку меню + Всегда показывать "Меню" Режим звонка @@ -432,10 +432,10 @@ Управление прозрачностью - Прозрачность статусбара для ланчера - Прозрачность статусбара для экарна блокировки - Прозрачность панели навигации для ланчера - Прозрачность панели навигации для экарна блокировки + Статусбар для ланчера + Статусбара для экрана блокировки + Панель навиг. для ланчера + Панель навиг. для экрана блокировки Спрятать значок будильника From af63060703aeded827e8af4ef437d84745625c29 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 23 Aug 2013 23:13:17 +0100 Subject: [PATCH 021/710] ModRebootMenu: reboot strings updated for tablets --- res/values-cs/strings.xml | 15 ++++++++----- res/values-da/strings.xml | 9 +++++--- res/values-es/strings.xml | 7 ++++-- res/values-fr/strings.xml | 7 ++++-- res/values-hu/strings.xml | 22 +++++++++++++++++-- res/values-it/strings.xml | 7 ++++-- res/values-pl/strings.xml | 5 +++-- res/values-pt-rPT/strings.xml | 8 +++++-- res/values-pt/strings.xml | 10 ++++++--- res/values-ru/strings.xml | 7 ++++-- res/values-sk/strings.xml | 15 ++++++++----- res/values-uk/strings.xml | 7 ++++-- res/values/strings.xml | 16 +++++++++----- .../ceco/gm2/gravitybox/ModRebootMenu.java | 16 +++++++++++--- 14 files changed, 108 insertions(+), 43 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index dda0f4c010..c17dfad4c2 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -1,8 +1,8 @@ - - + + GravityBox - + Styl indikátoru baterie Základní Kruhový s procenty @@ -132,8 +132,8 @@ 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. - Váš telefon bude restartovaný - Váš telefon bude restartovaný do režimu Recovery + Váš %s bude restartovaný + Váš %s bude restartovaný do režimu Recovery CRT efekt vypnutí obrazovky @@ -443,4 +443,7 @@ Úroveň zatmavení obrazovky Úroveň jasu pro zatmavení obrazovky těsně před jejím vypnutím (vyžaduje restart) - + + telefon + + diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 3ce9da8c62..4e8cbab8fe 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 @@ -262,4 +262,7 @@ Sort baggrund Benyt 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-es/strings.xml b/res/values-es/strings.xml index ae7fe978bd..403c35a8da 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -120,8 +120,8 @@ Hazme 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. Efecto de CRT al apagar la pantalla @@ -161,4 +161,7 @@ Deshabilitar el parpadeo del LED de notificaciones Deshabilita el LED de notificaciones cuando queda poca carga en la batería y no se está cargando + + teléfono + diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 03691a10f9..19d6e2616f 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -130,8 +130,8 @@ 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 - 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. Effet écran CRT @@ -412,4 +412,7 @@ GPS on GPS off + + téléphone + diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index c81dfb8f94..13d8ef793f 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -44,6 +44,7 @@ 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 + Szinkronizálás be Szinkronizálás ki @@ -52,6 +53,7 @@ Zseblámpa be Zseblámpa ki Érintse meg a lekapcsoláshoz + Statusbar gyorsbeállítás csempék Mutatja vagy elrejti a gyorsbeállítás csempéket a statusbar-on @@ -72,18 +74,23 @@ Wi-Fi hozzáférési pont Zseblámpa GravityBox Magyarul + Szín választó Nyomjon a színre a kiválasztá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 + 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) + Fejlett fejlesztői lehetőségek Lehető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 @@ -91,6 +98,7 @@ Tartalmaz 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.. Fejlesztette C3C076@XDA. Érintse meg a hivatalos fórum meglátogatásához. @@ -98,18 +106,22 @@ Fejlesztette 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. + - A telefonja újra fog indulni - A telefonja újra fog indulni a recovery-be + A %s újra fog indulni. + A %s újra fog indulni a recovery-be. + CRT kikapcsoló effekt Engedélyezi az animációt ami szimulálja az öreg CRT kikapcsolási effektet, ha kikapcsolódik a képernyő Tervező mód Indítja a Tervező mó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 + Lockscreen módosítások Különböző lockscreen módosításokat tartalmaz @@ -127,10 +139,16 @@ Egyéb Widgetek maximalizálása Ha engedélyezve van, lockscreen widgetek maximalizálva lesznek alapértelmezetten + Energia módosítások Tartalmaz különböző energiával kapcsolatos módosításokat + Letiltja a LED villogást Kikapcsolja a zavaró LED villogást, ha az akkumulátor szintje alacsony és nincs töltés + + + telefonja + diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index ecac8aebd4..f7c5b97d1b 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -131,8 +131,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 ripristino. Effetto spegni schermo CRT @@ -445,4 +445,7 @@ Modalità attenuazione luminosità Imposta luminosità per attenuazione schermo - quando lo schermo sta per spegnersi (necessita riavvio) + + telefono + diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index c3475f6e1c..c26bddd53d 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -90,8 +90,8 @@ Stworzone przez rovo89@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. Wspomóż Wspomóż 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 + %s zostanie zrestartowany. + %s zostanie zrestartowany do trybu Recovery. Efekt wyłączenia ekranu CRT Włącza animację imitującą efekt wyłączania ekranu CRT podczas wygaszania ekranu Tryb inżynierski @@ -118,4 +118,5 @@ Zawiera dodatkowe ustawienia związane z zasilaniem Wyłącz mruganie diody LED Blokuje migającą diodę LED gdy telefon nie jest ładowany i bliski wyczerpania baterii + Telefon diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 8e7cb60aac..8e74c0352d 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -123,8 +123,8 @@ 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. - 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. Efeito CRT ao desligar @@ -220,5 +220,9 @@ Desativar luz de bateria a carregar Desativa a luz vermelha quando a bateria está a carregar + + telefone + tablet + diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index d0d03fb4ab..f5db4a3e25 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -123,8 +123,8 @@ 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. Efeito de TV antiga desligando @@ -164,4 +164,8 @@ Desabilitar LED piscante Desabilitar o LED quando a bateria estiver baixa e não carregando - \ No newline at end of file + + telefone + tablet + + diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index b537bfcef3..197f0181b8 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -130,8 +130,8 @@ Пожертвуйте, если считаете, что приложение стоит того! Также задумайтесь о пожертвовании rovo89 за его великолепный Xposed framework. - Телефон будет перезагружен - Телефон будет перезагружен в recovery + %s будет перезагружен. + %s будет перезагружен в recovery. CRT-эффект выключения экрана @@ -444,5 +444,8 @@ Уровень затухания подсветки Яркость для приглушенной подсветки - когда экран почти выключился (необходима перезагрузка) + + Телефон + diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index e7289d829b..7a575fb63b 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -1,8 +1,8 @@ - - + + GravityBox - + Štýl indikátora batérie Základný Kruhový s percentami @@ -129,8 +129,8 @@ 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. - 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 @@ -440,4 +440,7 @@ Úroveň zatmavenia obrazovky Úroveň jasu pre zatmavenie obrazovky tesne pred jej vypnutím (vyžaduje reštart) - + + telefón + + diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 4a04778656..e6b129af51 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -129,8 +129,8 @@ Зробіть пожертву якщо вважаєте додаток вартим цього! Приділіть також увагу пожертві для rovo89 за його чудовий Xposed framework. - Пристрій буде перезавантажений - Пристрій буде перезавантажений у меню відновлення (рекавері) + %s буде перезавантажений. + %s буде перезавантажений у меню відновлення (рекавері). Ефект старого кінескопу @@ -275,4 +275,7 @@ Показувати день тижня + + Пристрій + diff --git a/res/values/strings.xml b/res/values/strings.xml index c7700c1dea..85b8287d97 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,8 +1,8 @@ - - + + GravityBox - + Battery indicator style Stock battery indicator Circle battery @@ -130,8 +130,8 @@ Donate to me if you think this app is worth it! Also consider donating to rovo89 for his excellent Xposed framework. - Your phone will reboot - Your phone will reboot into recovery + Your %s will reboot. + Your %s will reboot into recovery. CRT screen off effect @@ -444,4 +444,8 @@ Screen dim level Amount of brightness for dim state - when screen is about to be turned off (requires reboot) - + + phone + tablet + + diff --git a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index 1db8f9613c..ab1b695eac 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -85,9 +85,19 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mRebootItemList.add(new BasicIconListItem(mRebootSoftStr, null, mRebootSoftIcon, null)); mRebootItemList.add(new BasicIconListItem(mRecoveryStr, null, mRecoveryIcon, null)); - mRebootConfirmStr = gbRes.getString(R.string.reboot_confirm); - mRebootConfirmRecoveryStr = gbRes.getString(R.string.reboot_confirm_recovery); - + if (Utils.isTablet(gbContext)) { + mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), + gbRes.getString(R.string.device_tablet)); + mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), + gbRes.getString(R.string.device_tablet)); + } + else { + mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), + gbRes.getString(R.string.device_phone)); + mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), + gbRes.getString(R.string.device_phone)); + } + log("GlobalActions constructed, resources set."); } }); From fae756da7d6063966db3395ef5ddcd1828aa20c8 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 23 Aug 2013 23:14:53 +0100 Subject: [PATCH 022/710] Remove preferences not needed for ZTE V987 --- .../gm2/gravitybox/GravityBoxSettings.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index a7f408477c..af959ab31f 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -9,6 +9,7 @@ import java.util.Set; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; @@ -328,6 +329,13 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared 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; @@ -417,6 +425,13 @@ public void onCreate(Bundle savedInstanceState) { mPrefSbDaColor = (ColorPickerPreference) findPreference(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR); 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); mPrefAutoSwitchQs = (CheckBoxPreference) findPreference(PREF_KEY_QUICK_SETTINGS_AUTOSWITCH); @@ -460,6 +475,13 @@ public void onCreate(Bundle savedInstanceState) { mQuickSettings.setEntryValues(R.array.qs_tile_aosp_values); mPrefCatPhone.removePreference(mPrefRoamingWarningDisable); } else { + // 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); } From 73a07b32ab8df5f9127c5edac72ce708b0641f97 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 23 Aug 2013 23:25:31 +0100 Subject: [PATCH 023/710] ModStatusbarColor: fixed for non-Gemini devices --- .../gm2/gravitybox/ModStatusbarColor.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java index 2e8c6e56d9..ab779edc50 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java @@ -32,7 +32,7 @@ public class ModStatusbarColor { private static final String CLASS_PHONE_WINDOW_MANAGER = "com.android.internal.policy.impl.PhoneWindowManager"; private static final String CLASS_PANEL_BAR = "com.android.systemui.statusbar.phone.PanelBar"; private static final String CLASS_PHONE_STATUSBAR = "com.android.systemui.statusbar.phone.PhoneStatusBar"; - private static final String CLASS_SIGNAL_CLUSTER_VIEW = Utils.isMtkDevice() ? + private static final String CLASS_SIGNAL_CLUSTER_VIEW = Utils.hasGeminiSupport() ? "com.android.systemui.statusbar.SignalClusterViewGemini" : "com.android.systemui.statusbar.SignalClusterView"; private static final String CLASS_BATTERY_CONTROLLER = "com.android.systemui.statusbar.policy.BatteryController"; @@ -298,18 +298,24 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { Resources res = ((LinearLayout) param.thisObject).getContext().getResources(); if (mIconColorEnabled) { + Object mobileIconId = null; Object[] mobileIconIds = null, mobileIconIdsGemini = null; Object mobileActivityId = null, mobileActivityIdGemini = null; Object mobileTypeId = null, mobileTypeIdGemini = null; if (Utils.isMtkDevice()) { - mobileIconIds = (Object[]) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthId"); - mobileIconIdsGemini = (Object[]) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthIdGemini"); + if (Utils.hasGeminiSupport()) { + mobileIconIds = (Object[]) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthId"); + mobileIconIdsGemini = (Object[]) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthIdGemini"); + mobileActivityIdGemini = XposedHelpers.getObjectField(param.thisObject, "mMobileActivityIdGemini"); + mobileTypeIdGemini = XposedHelpers.getObjectField(param.thisObject, "mMobileTypeIdGemini"); + } + else { + mobileIconId = (Object) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthId"); + } mobileActivityId = XposedHelpers.getObjectField(param.thisObject, "mMobileActivityId"); - mobileActivityIdGemini = XposedHelpers.getObjectField(param.thisObject, "mMobileActivityIdGemini"); mobileTypeId = XposedHelpers.getObjectField(param.thisObject, "mMobileTypeId"); - mobileTypeIdGemini = XposedHelpers.getObjectField(param.thisObject, "mMobileTypeIdGemini"); } - + if (XposedHelpers.getBooleanField(param.thisObject, "mWifiVisible")) { ImageView wifiIcon = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mWifi"); if (wifiIcon != null) { @@ -341,7 +347,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (mobile != null) { try { int resId = Utils.isMtkDevice() ? - (Integer) XposedHelpers.callMethod(mobileIconIds[0], "getIconId") : + (Integer) XposedHelpers.callMethod(Utils.hasGeminiSupport() ? + mobileIconIds[0] : mobileIconId, "getIconId") : XposedHelpers.getIntField(param.thisObject, "mMobileStrengthId"); String resName = res.getResourceEntryName(resId); allowChange = resName.contains("blue") | !Utils.isMtkDevice(); @@ -367,7 +374,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { ImageView mobileType = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mMobileType"); if (mobileType != null) { try { - int resId = Utils.isMtkDevice() ? + int resId = Utils.hasGeminiSupport() ? (Integer) XposedHelpers.callMethod(mobileTypeId, "getIconId") : XposedHelpers.getIntField(param.thisObject, "mMobileTypeId"); Drawable d = res.getDrawable(resId).mutate(); @@ -395,7 +402,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } // for SIM Slot 2 - if (Utils.isMtkDevice() && + if (Utils.hasGeminiSupport() && XposedHelpers.getBooleanField(param.thisObject, "mMobileVisibleGemini")) { boolean allowChange = false; ImageView mobile = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mMobileGemini"); @@ -454,8 +461,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { ImageView mobileRoam; mobileRoam = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mMobileRoam"); if (mobileRoam != null) mobileRoam.setVisibility(View.GONE); - mobileRoam = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mMobileRoamGemini"); - if (mobileRoam != null) mobileRoam.setVisibility(View.GONE); + if (Utils.hasGeminiSupport()) { + mobileRoam = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mMobileRoamGemini"); + if (mobileRoam != null) mobileRoam.setVisibility(View.GONE); + } } } }); From bb886d51e6db918f690a1eb68c7d4828aab4d431 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Thu, 29 Aug 2013 19:21:13 +0100 Subject: [PATCH 024/710] ModRebootMenu: added reboot to bootloader option --- res/drawable-hdpi/ic_lock_bootloader.png | Bin 0 -> 1251 bytes res/values-pt-rPT/strings.xml | 4 +- res/values-pt/strings.xml | 4 +- res/values/strings.xml | 6 ++- .../ceco/gm2/gravitybox/ModRebootMenu.java | 38 +++++++++++------- 5 files changed, 34 insertions(+), 18 deletions(-) create mode 100755 res/drawable-hdpi/ic_lock_bootloader.png diff --git a/res/drawable-hdpi/ic_lock_bootloader.png b/res/drawable-hdpi/ic_lock_bootloader.png new file mode 100755 index 0000000000000000000000000000000000000000..e5602fd2cc2bcd4e60a5e6189137661acd3502c2 GIT binary patch literal 1251 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_VB8tt6XFWw_V)JvM*=HXuKf4! zACkcTRjXDZbFs1?J$hteVG$A%f+iap8j2=Db#7r{A<#^qo8cY-vVrzuItJNa$BrF? z=z=iduENv>m!gm%BO^nh32^N|-(CO3dkq+QlS_j9f`K%nffECR;?uv;3_|Dsd@*KX zE&R8T4=ApF@&9XghWcL{)Si5gKlomrIkJmG?!Y~(%z0VaW$$K-T}={x_Q{T6P9@W2 zmrf=o!*AuH>u1|s(q@QS&Ge)F#5Ts@57NJrcbc4GFX5bjoxkn4tjDA2UpKu~UVSHM zu@}SKiJL!1%yMH9o2QFoh{y4_Q(wmm1q!s4 zE^|pI^*zG$8zDgRKwIkCaJrm5ejI_Jn#Fgxyp89?F)%ZI%Ss$(`yy;(CWcR_k zxZE_ON|Znk@JeBIP0-;JxHo1PvuJoL(7wpy^ib(KO*Lw4245Qgt-zdpFluJAij zbwjYrHPdfzn_pC^ef`X()OS=`G?nFPTkjFq10u|`rGAF>u^;x@Q+fJY?(LHz)(+Q7 z6B*UYZn5$zzPq(n>~Qs~UveLvOV$Tp*mv>bx(=p{dZxrBeaV#$mSK7PeX9IRZ^SL# z_|37E;W+MSc4vRpXo$FlgBz*A+vyIea=M0eS+cPO@G6~8;I9p1V) z@OahRsuym8VL#4BU#(ePUB5eYhUx+XzVcHC?(%(|9+0c?j&mOKJNp?`Czh&DmQ($g z+qUaR|IAYi%WoB>HoWYdGv6up&$N4+4moQ1`#fCEF*AML%3~EhE0z3h>jN)zPUrl7 zbc4e)b{E$JnGH4Zs)~DOxowH*dzyWTyUN)3^R|F^#MtGKRi{w^qf;q$}C%X3l> zr+kz&xz7;4Z__{1V!hMrWFO^QDeT{zV9Rp;{sQ?R_GL4rSdN!4Jb3Notificaçõ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 + Adiciona opções para reiniciar em modo de recuperação ao menu de desligar Modo de recuperação + Modo bootloader Tecla de Volume controla cursor As teclas de volume controlam o cursor em campos de texto @@ -125,6 +126,7 @@ 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 diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index f5db4a3e25..1149847149 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -29,8 +29,9 @@ Notificações \"SIM não inseirdo\" desabilitadas Menu 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 desligar Recuperação + Bootloader Tecla de volume controla cursor As teclas de volume controlam o cursor em campos de texto @@ -125,6 +126,7 @@ 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 diff --git a/res/values/strings.xml b/res/values/strings.xml index 85b8287d97..03ab345d6f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -29,8 +29,9 @@ \"SIM not inserted\" notifications disabled Advanced reboot menu - Enables advanced reboot menu with option to reboot to recovery - Recovery + Enables advanced reboot menu with options to reboot to recovery + Recovery + Bootloader Volume key cursor control Controls cursor using volume keys in text fields @@ -132,6 +133,7 @@ Your %s will reboot. Your %s will reboot into recovery. + Your %s will reboot into bootloader. CRT screen off effect diff --git a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index ab1b695eac..ace996c665 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -42,12 +42,15 @@ public class ModRebootMenu { private static String mRebootStr; private static String mRebootSoftStr; private static String mRecoveryStr; + private static String mBootloaderStr; private static Drawable mRebootIcon; private static Drawable mRebootSoftIcon; private static Drawable mRecoveryIcon; + private static Drawable mBootloaderIcon; private static List mRebootItemList; private static String mRebootConfirmStr; private static String mRebootConfirmRecoveryStr; + private static String mRebootConfirmBootloaderStr; private static Unhook mRebootActionHook; private static void log(String message) { @@ -72,32 +75,32 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { int rebootStrId = res.getIdentifier("factorytest_reboot", "string", PACKAGE_NAME); int rebootSoftStrId = R.string.reboot_soft; int recoveryStrId = R.string.poweroff_recovery; + int bootloaderStrId = R.string.poweroff_bootloader; mRebootStr = (rebootStrId == 0) ? "Reboot" : res.getString(rebootStrId); mRebootSoftStr = gbRes.getString(rebootSoftStrId); mRecoveryStr = gbRes.getString(recoveryStrId); + mBootloaderStr = gbRes.getString(bootloaderStrId); mRebootIcon = gbRes.getDrawable(R.drawable.ic_lock_reboot); mRebootSoftIcon = gbRes.getDrawable(R.drawable.ic_lock_reboot_soft); mRecoveryIcon = gbRes.getDrawable(R.drawable.ic_lock_recovery); + mBootloaderIcon = gbRes.getDrawable(R.drawable.ic_lock_bootloader); mRebootItemList = new ArrayList(); mRebootItemList.add(new BasicIconListItem(mRebootStr, null, mRebootIcon, null)); mRebootItemList.add(new BasicIconListItem(mRebootSoftStr, null, mRebootSoftIcon, null)); mRebootItemList.add(new BasicIconListItem(mRecoveryStr, null, mRecoveryIcon, null)); - - if (Utils.isTablet(gbContext)) { - mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), - gbRes.getString(R.string.device_tablet)); - mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), - gbRes.getString(R.string.device_tablet)); - } - else { - mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), - gbRes.getString(R.string.device_phone)); - mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), - gbRes.getString(R.string.device_phone)); + if (!Utils.isMtkDevice()) { + mRebootItemList.add(new BasicIconListItem(mBootloaderStr, null, mBootloaderIcon, null)); } - + + mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), + gbRes.getString(Utils.isTablet(gbContext) ? R.string.device_tablet : R.string.device_phone)); + mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), + gbRes.getString(Utils.isTablet(gbContext) ? R.string.device_tablet : R.string.device_phone)); + mRebootConfirmBootloaderStr = String.format(gbRes.getString(R.string.reboot_confirm_bootloader), + gbRes.getString(Utils.isTablet(gbContext) ? R.string.device_tablet : R.string.device_phone)); + log("GlobalActions constructed, resources set."); } }); @@ -233,7 +236,12 @@ public void onClick(DialogInterface dialog, int which) { private static void handleReboot(Context context, String caption, final int mode) { try { final PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); - final String message = (mode == 0 || mode == 1) ? mRebootConfirmStr : mRebootConfirmRecoveryStr; + String message = mRebootConfirmStr; + if (mode == 2) { + message = mRebootConfirmRecoveryStr; + } else if (mode == 3) { + message = mRebootConfirmBootloaderStr; + } AlertDialog.Builder builder = new AlertDialog.Builder(mContext) .setTitle(caption) @@ -254,6 +262,8 @@ public void onClick(DialogInterface dialog, int which) { XposedHelpers.callMethod(ipm, "crash", "Hot reboot"); } else if (mode == 2) { pm.reboot("recovery"); + } else if (mode == 3) { + pm.reboot("bootloader"); } } }) From fc36f2fd0beff2f927f3c259ab1082ac732ad706 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 31 Aug 2013 17:49:50 +0200 Subject: [PATCH 025/710] Just some minor coding style fixes --- src/com/ceco/gm2/gravitybox/ModStatusbarColor.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java index ab779edc50..0ba776b506 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java @@ -308,14 +308,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mobileIconIdsGemini = (Object[]) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthIdGemini"); mobileActivityIdGemini = XposedHelpers.getObjectField(param.thisObject, "mMobileActivityIdGemini"); mobileTypeIdGemini = XposedHelpers.getObjectField(param.thisObject, "mMobileTypeIdGemini"); - } - else { + } else { mobileIconId = (Object) XposedHelpers.getObjectField(param.thisObject, "mMobileStrengthId"); } mobileActivityId = XposedHelpers.getObjectField(param.thisObject, "mMobileActivityId"); mobileTypeId = XposedHelpers.getObjectField(param.thisObject, "mMobileTypeId"); } - + if (XposedHelpers.getBooleanField(param.thisObject, "mWifiVisible")) { ImageView wifiIcon = (ImageView) XposedHelpers.getObjectField(param.thisObject, "mWifi"); if (wifiIcon != null) { From 60c2c42e5aa2cc6a0a1e40450ffb41fdeb35eb1d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 31 Aug 2013 18:32:55 +0200 Subject: [PATCH 026/710] Improved clock hiding option to obey lockscreen clock widget policy --- .../ceco/gm2/gravitybox/ModCenterClock.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java index edf7e1c013..a12b3eb8e1 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -15,7 +15,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; -import android.provider.AlarmClock; import android.provider.Settings; import android.text.Spannable; import android.text.SpannableStringBuilder; @@ -81,7 +80,7 @@ public void onReceive(Context context, Intent intent) { if (intent.hasExtra(GravityBoxSettings.EXTRA_CLOCK_HIDE)) { mClockHide = intent.getBooleanExtra(GravityBoxSettings.EXTRA_CLOCK_HIDE, false); if (mClock != null) { - XposedHelpers.callMethod(mClock, "updateClock"); + mClock.setVisibility(mClockHide ? View.GONE : View.VISIBLE); } } if (intent.hasExtra(GravityBoxSettings.EXTRA_ALARM_HIDE)) { @@ -125,6 +124,9 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { // use this additional field to identify the instance of Clock that resides in status bar XposedHelpers.setAdditionalInstanceField(mClock, "sbClock", true); mClockOriginalPaddingLeft = mClock.getPaddingLeft(); + if (mClockHide) { + mClock.setVisibility(View.GONE); + } // inject new clock layout mLayoutClock = new LinearLayout(liparam.view.getContext()); @@ -142,12 +144,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { // yes, if it contains our additional sbClock field Object sbClock = XposedHelpers.getAdditionalInstanceField(param.thisObject, "sbClock"); if (sbClock != null) { - if (mClockHide) { - mClock.setVisibility(View.GONE); - return; - } - - mClock.setVisibility(View.VISIBLE); Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); String clockText = param.getResult().toString(); String amPm = calendar.getDisplayName( @@ -241,6 +237,16 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); + XposedHelpers.findAndHookMethod(phoneStatusBarClass, "showClock", boolean.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (mClock == null) return; + + boolean visible = (Boolean) param.args[0] && !mClockHide; + mClock.setVisibility(visible ? View.VISIBLE : View.GONE); + } + }); + XposedHelpers.findAndHookMethod(tickerClass, "tickerStarting", new XC_MethodHook() { @Override From b5ab5ffd9a1251290d00499afc119fb01a645185 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 31 Aug 2013 19:10:11 +0200 Subject: [PATCH 027/710] Added AM/PM hiding support for notification panel clock --- .../ceco/gm2/gravitybox/ModCenterClock.java | 72 +++++++++++-------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java index a12b3eb8e1..8227dc27ee 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -39,6 +39,7 @@ public class ModCenterClock { private static ViewGroup mRootView; private static LinearLayout mLayoutClock; private static TextView mClock; + private static TextView mClockExpanded; private static Object mPhoneStatusBar; private static Context mContext; private static int mAnimPushUpOut; @@ -76,6 +77,9 @@ public void onReceive(Context context, Intent intent) { if (mClock != null) { XposedHelpers.callMethod(mClock, "updateClock"); } + if (mClockExpanded != null) { + XposedHelpers.callMethod(mClockExpanded, "updateClock"); + } } if (intent.hasExtra(GravityBoxSettings.EXTRA_CLOCK_HIDE)) { mClockHide = intent.getBooleanExtra(GravityBoxSettings.EXTRA_CLOCK_HIDE, false); @@ -117,6 +121,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { mRootView = (ViewGroup) mIconArea.getParent().getParent(); if (mRootView == null) return; + // find statusbar clock mClock = (TextView) mIconArea.findViewById( liparam.res.getIdentifier("clock", "id", PACKAGE_NAME)); if (mClock == null) return; @@ -128,6 +133,14 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { mClock.setVisibility(View.GONE); } + // find notification panel clock + final ViewGroup panelHolder = (ViewGroup) liparam.view.findViewById( + liparam.res.getIdentifier("panel_holder", "id", PACKAGE_NAME)); + if (panelHolder != null) { + mClockExpanded = (TextView) panelHolder.findViewById( + liparam.res.getIdentifier("clock", "id", PACKAGE_NAME)); + } + // inject new clock layout mLayoutClock = new LinearLayout(liparam.view.getContext()); mLayoutClock.setLayoutParams(new LinearLayout.LayoutParams( @@ -143,38 +156,37 @@ 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); - if (mAmPmHide && amPmIndex != -1) { - clockText = clockText.replace(amPm, ""); - amPmIndex = -1; - } else if (!DateFormat.is24HourFormat(mClock.getContext()) && amPmIndex == -1) { - // insert AM/PM if missing - 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(), + 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); + if (mAmPmHide && amPmIndex != -1) { + clockText = clockText.replace(amPm, ""); + amPmIndex = -1; + } else if (!DateFormat.is24HourFormat(mClock.getContext()) && amPmIndex == -1) { + // insert AM/PM if missing + clockText += " " + amPm; + amPmIndex = clockText.indexOf(amPm); + } + CharSequence dow = ""; + // apply day of week only to statusbar clock, not the notification panel clock + if (mClockShowDow && sbClock != null) { + 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); - 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); } + param.setResult(sb); } }); From 08a7764427c8c9c597811cf0c220db2f264e72d3 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 1 Sep 2013 18:52:07 +0200 Subject: [PATCH 028/710] Fixed AM/PM hiding + added some debug logging (turned off by default) --- src/com/ceco/gm2/gravitybox/ModCenterClock.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java index 8227dc27ee..0a1a0f1aba 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -34,6 +34,7 @@ public class 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 final String CLASS_PHONE_STATUSBAR_POLICY = "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy"; + private static final boolean DEBUG = false; private static ViewGroup mIconArea; private static ViewGroup mRootView; @@ -155,19 +156,28 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { // is this a status bar Clock instance? // yes, if it contains our additional sbClock field + if (DEBUG) log("getSmallTime() called. mAmPmHide=" + mAmPmHide); Object sbClock = XposedHelpers.getAdditionalInstanceField(param.thisObject, "sbClock"); + if (DEBUG) log("Is statusbar clock: " + (sbClock == null ? "false" : "true")); Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); String clockText = param.getResult().toString(); + if (DEBUG) log("Original clockText: '" + clockText + "'"); String amPm = calendar.getDisplayName( Calendar.AM_PM, Calendar.SHORT, Locale.getDefault()); + if (DEBUG) log("Locale specific AM/PM string: '" + amPm + "'"); int amPmIndex = clockText.indexOf(amPm); + if (DEBUG) log("Original AM/PM index: " + amPmIndex); if (mAmPmHide && amPmIndex != -1) { - clockText = clockText.replace(amPm, ""); + clockText = clockText.replace(amPm, "").trim(); + if (DEBUG) log("AM/PM removed. New clockText: '" + clockText + "'"); amPmIndex = -1; - } else if (!DateFormat.is24HourFormat(mClock.getContext()) && amPmIndex == -1) { + } else if (!mAmPmHide + && !DateFormat.is24HourFormat(mClock.getContext()) + && amPmIndex == -1) { // insert AM/PM if missing clockText += " " + amPm; amPmIndex = clockText.indexOf(amPm); + if (DEBUG) log("AM/PM added. New clockText: '" + clockText + "'; New AM/PM index: " + amPmIndex); } CharSequence dow = ""; // apply day of week only to statusbar clock, not the notification panel clock @@ -186,6 +196,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { dow.length() + amPmIndex + amPm.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } + if (DEBUG) log("Final clockText: '" + sb + "'"); param.setResult(sb); } }); From e47dca763073a404f15af58ccd16e2f556320b7f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 1 Sep 2013 19:05:56 +0200 Subject: [PATCH 029/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 413 +++++++++++++++++++++++++++----------- 1 file changed, 291 insertions(+), 122 deletions(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index c26bddd53d..25b7467844 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -1,122 +1,291 @@ - - - GravityBox - Styl wskaźnika baterii - Standardowa Android - Koło z procentami - Tekstowa - procenty - Standardowa ikona z procentami - Brak - 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 - Tylko dźwięk - Wyłącz - Zmiany zastosowanę będą po restarcie - Auto-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 - Zablokuj powiadomienia - \"SIM not inserted\" notifications disabled - Zaawansowane menu wyłączania - Włą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 - Wyłącz - Głośność góra/dół porusza w lewo/prawo - Głośność góra/dół porusza w prawo/lewo - Wyczyść 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 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! - Napraw aplikację kalendarza - Włącz jesli aplikacja powoduje samoczynne włączanie się ekranu (wymagany reboot) - Ważne - Fotografia dzwoniącego na całym ekranie - Fotografia dzwoniącego na całym ekranie podczas nadchodzącej rozmowy - Włączono synchronizację - Wyłączono synchronizację - Wi-Fi AP włączony - Wi-Fi AP wyłączony - Latarka włączona - Latarka wyłączona - Dotknij aby wyłączyć - Kafelki Szybkich Ustawień w centrum notyfikacji - Dostosuj wyświetlane kafelki w centrum notyfikacji - Profil użytkownika - Tryb samolot. - Stan baterii - Wi-Fi - Bluetooth - GPS - Danie sieci kom. - Tryb sieci - Użycie danych - Profile audio - Jasność - Screen timeout - Auto-rotacja - Synchronizacja - Wi-Fi AP - Latarka - GravityBox - Wybór koloru - Naciśnij na kolor aby ustawić - Kolor tła paska statusu - Umożliwia wybór tła i przeźroczystości paska statusu - Napraw ustawienia mowy - Odblokowuje wyszukiwanie głosowe i zamianę tekstu na mowę w ustawieniach "Język, klawiatura i głos" (wymagany reboot) - Zaawansowane opcje deweloperskie - Odblokowuje dodatkowe opcje deweloperskie (wymagany reboot) - Ustawienia paska statusu - Zawiera 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 - Stworzone przez C3C076@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. - Xposed framework - Stworzone przez rovo89@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. - Wspomóż - Wspomóż mnie jeśli uważasz, że program jest tego warty! Wspomóż też rovo89 za jego wspaniały Xposed framework. - %s zostanie zrestartowany. - %s zostanie zrestartowany do trybu Recovery. - Efekt wyłączenia ekranu CRT - Włącza animację imitującą efekt wyłączania ekranu CRT podczas wygaszania ekranu - Tryb inżynierski - Włącza ukrytą aplikację trybu inżynierskiego - Dzwonki Dual SIM - Uruchamia aplikację pozwalającą na przypisanie innych dzwonków dla każdej karty SIM - Ustawienia ekranu blokady - Zawiera dodatkowe ustawienia dla ekranu blokday - Tło ekranu blokady - Styl tła - Domyślna tapeta - Wypełnij kolorem - Zdefiniowany obrazek - Ustaw kolor - Pozwala ustawić własny kolor ekranu blokady - Ustaw własny obraz - Pozwala ustawić własną tepetę ekranu blokady - Tło zmienione - Tło nie zostało zmienione - Inne - Maksymalizuj widżety - Włączone, zmaksymalizuje widżety na ekranie blokady - Ustawienia zasilania - Zawiera dodatkowe ustawienia związane z zasilaniem - Wyłącz mruganie diody LED - Blokuje migającą diodę LED gdy telefon nie jest ładowany i bliski wyczerpania baterii - Telefon - + + + GravityBox + Styl wskaźnika baterii + Standardowy + Koło + Koło z procentami + Tekstowy wskaźnik baterii + Brak + 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 powiadomienie + Tylko dźwięk + Wyłączone + Zmiany będą zastosowane po restarcie + Auto-ukrywanie ikon sygnału + 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 2 + Zablokuj powiadomienia + Powiadomienia \"Brak karty SIM\" zablokowane + Zaawansowane menu wyłączania + Włącza dodatkowe opcje dotyczące restartu telefonu (Recovery) + Recovery + Kotroluj kursor przyciskiem głośności + Pozwala przesuwać kursor przyciskami głośności w polach tekstowych + Wyłącz + Głośność góra/dół porusza w lewo/prawo + Głośność góra/dół porusza w prawo/lewo + Wyczyść wszystkie zadania + 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 restart) + Po restarcie usuń podwójne wątki aby zmiana dała efekt! + Napraw aplikację kalendarza + Włącz jeśli aplikacja powoduje samoczynne włączanie się ekranu (wymagany restart) + Ważne + Fotografia dzwoniącego na pełnym ekranie + Wyświetla fotografię dzwoniącego na pełnym ekranie podczas rozmowy przychodzącej + Włączono synchronizację + Wyłączono synchronizację + Wi-Fi AP włączony + Wi-Fi AP wyłączony + Latarka włączona + Latarka wyłączona + Dotknij aby wyłączyć + Odtwarzam... + Nagrywam... + Nagrano + Przytrzymaj aby nagrać + Dotknij aby zatrzymać + Kafelki Szybkich Ustawień + Pozwala wyświetlić lub ukryć Kafelki Szybkich Ustawień na pasku statusu + Profil użytkownika + Tryb samolotowy + Stan baterii + Wi-Fi + Bluetooth + GPS + Transmisja danych + Tryb sieci + Użycie danych + Profile dźwiękowe + Jasność + Limit czasu wyświetlacza + Auto-Obracanie ekranu + Synchronizacja + Punkt dostępowy Wi-Fi + Latarka + GravityBox + Uśpienie + Dyktafon + Ustawienia + Wybór koloru + Naciśnij na kolor aby ustawić + Kolor tła paska statusu + Umożliwia wybór tła i przeźroczystości paska statusu + Napraw ustawienia mowy + 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 restart) + Ustawienia paska statusu + Zawiera różne dodatkowe ustawienia dla paska statusu + 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 aplikacji + Stworzone przez C3C076@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. + Xposed framework + Stworzone przez rovo89@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. + Darowizna + Wspomóż mnie jeśli uważasz, że program jest tego warty! Wspomóż też rovo89 za jego wspaniały Xposed framework. + %s zostanie zrestartowany + %s zostanie zrestartowany do trybu Recovery + Efekt wyłączenia ekranu CRT + Włącza animację imitującą efekt wyłączania ekranu CRT podczas wygaszania ekranu + Tryb inżynierski + Włącza ukrytą aplikację trybu inżynierskiego + Dzwonki Dual SIM + Uruchamia aplikację pozwalającą na przypisanie innych dzwonków dla każdej karty SIM + Ustawienia ekranu blokady + Zawiera dodatkowe poprawki ustawień ekranu blokady + Tło ekranu blokady + Styl tła + Domyślna tapeta + Wypełnij kolorem + Zdefiniowany obrazek + Ustaw kolor + Pozwala ustawić własny kolor ekranu blokady + Ustaw własny obraz + Pozwala ustawić własną tepetę ekranu blokady + Tło zostało zmienione + Tło nie zostało zmienione + Inne + Maksymalizuj widżety + Gdy włączone, widżety będą domyślnie zmaksymalizowane + Poprawki ustawień zasilania + Zawiera dodatkowe poprawki związane z zasilaniem + Wyłącz mruganie diody LED + 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) + Wartość z zakresu: 10 – 80 + 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ść (10 – 255) + Wybrana wartość jest niepoprawna + Nie jest zalecane, aby ustawić jasność poniżej 10 + 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 + 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 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 + Wyłącz wibrację przy połączeniu + Wyłącza wibracje uruchamiane gdy połączenie zostanie zestawione + 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ł + 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 + Pokaż przycisk wyszukiwania + 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łacz 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 + Zawsze pokazuj przycisk menu + Tryb dwonka + Ustawienia Zegara + Ukryj AM/PM + Ukryj Zegar + Wielkość przełącznika Pie + Ustawienia przezroczystości + Przezr. paska statusu startera + Przezr. paska statusu ekranu blokady + Przezr. paska nawigacji startera + Przezr. paska nawi. ekranu blokady + Ukryj ikonę alarmu + Poziom przyciemnienia ekranu + Poziom niskiej jasności - zanim ekran zostanie całkiem wygaszony (wymagany restart) + From 98cd6cd5fc2d04bf31ecd3bea113508e49da2f2d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 2 Sep 2013 11:47:12 +0200 Subject: [PATCH 030/710] Updated Hungarian translations (thanks to benjoe1) --- res/values-hu/strings.xml | 435 +++++++++++++++++++++++++++++++------- 1 file changed, 364 insertions(+), 71 deletions(-) diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 13d8ef793f..2a5ed5b14d 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -1,65 +1,84 @@ - + + 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és Felugró szöveg és hang - Csak felugró szöveg + Csak felugó szöveg Csak 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ása SIM 1 foglalat automatikus elrejtése SIM 2 foglalat automatikus elrejtése Figyelmezteté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 + + Kurzor irányítás hangerő gombokkal + Kurzor irányítása szöveges mezőkben a hangerő gombok használatával Letiltva - Hangerő fel/le mozgatja a kurzort balra/jobbra - Hangerő fel/le mozgatja a kurzort jobbra/balra + Hangerő fel/le a kurzort balra/jobbra mozgatja + Hangerő fel/le a kurzort jobbra/balra mozgatja + 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) + + 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 ki Zseblámpa be Zseblá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 - Statusbar gyorsbeállítás csempék - Mutatja vagy elrejti a gyorsbeállítás csempéket a statusbar-on + Statusbar Gyorsbeállítások csempéi + Mutatja vagy elrejti a Gyorsbeállítások csempéket a statusbar-on Felhasználói profil Repülő mód - Akkumulátor infó + Akkumlátor státusz Wi-Fi Bluetooth GPS @@ -73,82 +92,356 @@ Szinkronizálás Wi-Fi hozzáférési pont Zseblámpa - GravityBox Magyarul + GravityBox + Alvás + Gyors Felvétel + Beállítások 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 + Statusbar háttérszín + Lehetővé teszi, hogy beállíthassa a Statusbar háttérszínét és átlátszóságá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 + Különféle Statusbar módosításokat tartalmaz Különféle módosítások Tartalmaz 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 framework Fejlesztette 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. + Adományozzon a részemre, ha úgy gondolja, hogy ez a program megéri az árát! Valamint fontolja meg, hogy adományozzon rovo89-nek is a kitűnő Xposed framework-ért. - A %s újra fog indulni. - A %s újra fog indulni a recovery-be. + A %s újra fog indulni + A %s Recovery 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 + Elindítja a Tervező mó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ást külön, mindkét SIM-hez Lockscreen módosítások - Különböző lockscreen módosításokat tartalmaz + Különböző Lockscreen módosításokat tartalmaz Lockscreen háttér - Háttér stílus + Háttér sítlus Alapértelmezett háttérkép Szín kitöltés Egyé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éb + Egyéni szín beállítása + Lehetővé teszi egyéni háttérszín beállítását a Lockscreen-hez + Egyéni kép beállítása + Lehetővé teszi egyéni háttérkép beállítását a Lockscreen-hez + A háttér megváltozott + A háttér nem változott meg + Másik Widgetek maximalizálása - Ha engedélyezve van, lockscreen widgetek maximalizálva lesznek alapértelmezetten + Ha engedélyezve van, a Lockscreen widgetek 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 + Letiltja a LED villogást + 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) + Érték intervallum: 10 – 80 + + + 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 (10 – 255) + A meghatározott érték nem lehetséges + 10 alatti fényerő érték beállítása nem ajánlott + 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 + + + Lockscreen elforgatás engedélyezése + FIGYELEM: megfordíthatja a feloldó kör célirányát olyan eszközön, ahol AOSP lockscreen 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 Lockscreen-en (ú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 ad hozzá zene folyam esetén (újraindítást 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 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. + Alkalmazá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 + + + Rezgés letiltása hívás kapcsolódáskor + Letiltja a rezgést, amit a hívás kapcsolódás vált ki. + + + 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. Portré 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 beállítási lehetőségével + + + Csengőhang és figyelmeztető hangok értékei + Amikor ki van kapcsolva, a csengőhang és 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 a Statusbar megnyitásakor, amennyiben nincs értesítés + + + Gyors lehúzás + A Statusbar szélének lehúzása megnyitja a Gyorsbeállításokat + Kikapcsolva + Jobb + Bal + + + Letiltja a hangerő gombbal történő ébresztést + Azon eszközök részére -mint a Jiayu G3S,G4- amelyek hangerő gombja bekapcsolja a kijelzőt + + + Statusbar színek + + + Ikon színek engedélyezve + + + Statusbar ikon színe + Beállítja a statusbar 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 + Portré kép beállítása + Tájkép beállítása + Háttér átlátszóság + Háttér mó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 mód bekapcsolva + Csak segélyhívás + + + Pie Vezérlők + Pie Vezérlők engedélyezve + Keresés gomb mutatása + 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 mó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. + + + Navigation bar elrejtése + Elrejti a Navigation bar-t, ha a Pie Vezérlők engedélyezve vannak -azon eszközöknek, amelyben van navigation bar- (ú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) + + + Hardver gombok letiltása + Letiltja a MENU, BACK, HOME gombokat, ha a Pie Vezérlők engedélyezve vannak. A HW gombok műveletei működni fognak. (HW gombokkal ellátot eszközök esetén) + + + Holo Sötét téma használata + Átkapcsolja a GB UI-t, hogy a Holo sötét témát használja a Holo világos helyett + + + Kikapcsolva + Bal fent + Jobb fent + Bal lent + Jobb 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 + (Nincs) + + + 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 + + + Mindig mutassa a menü gombot + + + Csengés mód + + + Óra beállítások + + + De/Du elrejtése + + + Óra elrejtése + + + Kioldógomb méret + + + Átlátszóság menedzsment + Statusbar átlátszóság launcher-nél + Statusbar átlátszóság lockscreen-nél + Navbar átlátszóság launcher-nél + Navbar átlátszóság lockscreen-nél + + + Ébresztő ikon elrejtése - - telefonja + + 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) - + From 9378726ff80f819de0c1484830428b286ef794e4 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 2 Sep 2013 11:49:31 +0200 Subject: [PATCH 031/710] ModQuickSettings: catch Throwable instead of Exception to handle more errors (e.g. ClassNotFound error) --- src/com/ceco/gm2/gravitybox/ModQuickSettings.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index ab4bd4deb1..e4c3fb9501 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -30,7 +30,6 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.content.res.Resources; -import android.content.res.XResources; import android.os.Build; import android.os.IBinder; import android.provider.Settings; @@ -431,8 +430,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } From 831410964ef82eb186731703eae6c7f78b8b5524 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 2 Sep 2013 13:39:59 +0200 Subject: [PATCH 032/710] Implemented brightness settings master switch - brightness settings will be applied only in case master switch is enabled - allows disabling of brightness settings for devices that don't support native android brightness features --- res/values/strings.xml | 5 ++ res/xml/gravitybox.xml | 59 +++++++------ .../gm2/gravitybox/GravityBoxSettings.java | 23 ++++- src/com/ceco/gm2/gravitybox/ModDisplay.java | 84 +++++++++++-------- 4 files changed, 110 insertions(+), 61 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 03ab345d6f..28920654c1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -450,4 +450,9 @@ 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) + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 38ad0e84b9..b0c6d2e282 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -400,32 +400,43 @@ android:key="pref_cat_display" android:title="@string/pref_cat_display_title" android:summary="@string/pref_cat_display_summary"> - - + - - - + + + + + + + + + classLight = XposedHelpers.findClass(CLASS_LIGHT_SERVICE_LIGHT, null); - int brightnessMin = prefs.getInt(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, 20); - XResources.setSystemWideReplacement( + final boolean brightnessSettingsEnabled = + prefs.getBoolean(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MASTER_SWITCH, false); + + if (brightnessSettingsEnabled) { + int brightnessMin = prefs.getInt(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, 20); + XResources.setSystemWideReplacement( "android", "integer", "config_screenBrightnessSettingMinimum", brightnessMin); - log("Minimum brightness value set to: " + brightnessMin); + log("Minimum brightness value set to: " + brightnessMin); - int screenDim = prefs.getInt(GravityBoxSettings.PREF_KEY_SCREEN_DIM_LEVEL, 10); - XResources.setSystemWideReplacement( - "android", "integer", "config_screenBrightnessDim", screenDim); - log("Screen dim level set to: " + screenDim); + int screenDim = prefs.getInt(GravityBoxSettings.PREF_KEY_SCREEN_DIM_LEVEL, 10); + XResources.setSystemWideReplacement( + "android", "integer", "config_screenBrightnessDim", screenDim); + log("Screen dim level set to: " + screenDim); + } mButtonBacklightMode = prefs.getString( GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_MODE, GravityBoxSettings.BB_MODE_DEFAULT); @@ -153,46 +158,53 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } 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); - } - int[] brightnessArray = new int[brightnessValues.length]; - index = 0; - for(String s : brightnessValues) { - brightnessArray[index++] = Integer.valueOf(s); + 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); } - updateAutobrightnessConfig(luxArray, brightnessArray); } IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ACTION_GET_AUTOBRIGHTNESS_CONFIG); - intentFilter.addAction(ACTION_SET_AUTOBRIGHTNESS_CONFIG); + if (brightnessSettingsEnabled) { + 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() { - - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - return XposedHelpers.callMethod(param.thisObject, "clamp", param.args[0], - mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum); - } - }); + if (brightnessSettingsEnabled) { + 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); + } + }); + } XposedHelpers.findAndHookMethod(classLight, "setLightLocked", int.class, int.class, int.class, int.class, int.class, new XC_MethodHook() { From bb70b703111ce0f91b57ee640ef100e1da2ac34c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 2 Sep 2013 13:46:24 +0200 Subject: [PATCH 033/710] Updated Slovak translations --- res/values-sk/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 7a575fb63b..43b4c3c651 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -443,4 +443,9 @@ 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) + From 592e556c291eea837835fc858c94d24dcbfdd71a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 2 Sep 2013 13:48:04 +0200 Subject: [PATCH 034/710] Updated Czech translations --- res/values-cs/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index c17dfad4c2..ed57a57266 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -446,4 +446,9 @@ 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) + From 8128566e9d10b01ab47fb9b7c6499d1b21ff9d17 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 2 Sep 2013 14:02:17 +0200 Subject: [PATCH 035/710] Version 2.2.2 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 131ba0f489..ce08cdd7a8 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="25" + android:versionName="2.2.2" > Date: Tue, 3 Sep 2013 09:02:52 +0200 Subject: [PATCH 036/710] Updated German translations --- res/values-de/strings.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index ec01c8dbe2..056e0a0aeb 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -84,7 +84,7 @@ GPS Mobile Daten Netzmodus - Datennutzung + Mobiler Datenverkehr Audioprofile Helligkeit Displayabschaltung @@ -94,7 +94,7 @@ Taschenlampe GravityBox Schlafmodus - Schnelle Aufnahme + Aufnahme Einstellungen @@ -130,8 +130,8 @@ Donate to me if you think this app is worth it! Also consider donating to rovo89 for his excellent Xposed framework. - Your phone will reboot - Your phone will reboot into recovery + Your %s will reboot + Your %s will reboot into recovery CRT screen off effect @@ -409,14 +409,14 @@ Long-press app slot 4 - GPS on - GPS off + GPS an + GPS aus Always show menu button - Ringer mode + Klingelmodus Clock settings From 4e9ffc977dd301fa05148a8a0377f1dac5f064ec Mon Sep 17 00:00:00 2001 From: ch-vox Date: Wed, 4 Sep 2013 14:57:43 +0200 Subject: [PATCH 037/710] Updated French translation Back from holidays, here's updated French translation. Regards --- res/values-fr/strings.xml | 50 +++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 19d6e2616f..dd96da523a 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -29,8 +29,9 @@ Message \"SIM non insérée\" désactivé Menu avancé de redémarrage - Active le menu avancé de redémarrage avec la possibilité de redémarrer en mode récupération - Récupération + Active le menu avancé de redémarrage avec les options de redémarrer en mode récupération + Récupération + Bootloader Touches de volume et curseur Permet le contrôle du curseur dans un champ textuel grâce aux touches de volume @@ -130,8 +131,9 @@ 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 - Votre %s va redémarrer. - Votre %s 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 bootloader Effet écran CRT @@ -363,7 +365,7 @@ Désactiver le rétroéclairage Toujours actif avec l\'écran Notification 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 batterie Masquer la barre de navigation @@ -411,8 +413,46 @@ GPS on GPS off + + + 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 + Transparence de la barre de status pour le lanceur + Transparence de la barre de status pour l\'écran de déverrouillage + Transparence de la barre de navigation pour le lanceur + Transparence de la barre de navigation pour 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) From b4d1b540b7669785c70586547790e5727510296e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 4 Sep 2013 18:55:55 +0200 Subject: [PATCH 038/710] Improved hasGeminiSupport check Don't rely on KeyguardUtils class. The probability it is not present in the ROM is high. Especially for Android 4.1.2. Use reflection to check build.prop property instead. --- src/com/ceco/gm2/gravitybox/Utils.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index a945d2fd96..e4dea0dde4 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -60,11 +60,13 @@ public static enum MethodState { public static boolean isMtkDevice() { return (Build.HARDWARE.toLowerCase().contains("mt6589") || Build.HARDWARE.toLowerCase().contains("mt8389")); } - + public static boolean hasGeminiSupport() { try { - Class classKeyguardUtils = findClass("com.android.internal.policy.impl.keyguard.KeyguardUtils", null); - return (isMtkDevice() && (Boolean) callStaticMethod(classKeyguardUtils, "isGemini")); + Class classSystemProperties = findClass("android.os.SystemProperties", null); + String geminiSupport = (String) callStaticMethod(classSystemProperties, + "get", "ro.mediatek.gemini_support"); + return ("true".equals(geminiSupport)); } catch (Throwable t) { XposedBridge.log("Utils: hasGeminiSupport check failed. Assuming device has no Gemini support"); return false; From c06274b0214f942557a7b1bdf90cb9f9934fc470 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 4 Sep 2013 22:04:40 +0200 Subject: [PATCH 039/710] Optimized hasGeminiSupport --- src/com/ceco/gm2/gravitybox/Utils.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index e4dea0dde4..8642a1ec15 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -17,6 +17,7 @@ public class Utils { // Device type reference private static int mDeviceType = -1; + private static Boolean mHasGeminiSupport = null; private static int getScreenType(Context con) { if (mDeviceType == -1) { @@ -62,11 +63,14 @@ public static boolean isMtkDevice() { } public static boolean hasGeminiSupport() { + if (mHasGeminiSupport != null) return mHasGeminiSupport; + try { Class classSystemProperties = findClass("android.os.SystemProperties", null); String geminiSupport = (String) callStaticMethod(classSystemProperties, "get", "ro.mediatek.gemini_support"); - return ("true".equals(geminiSupport)); + mHasGeminiSupport = "true".equals(geminiSupport); + return mHasGeminiSupport; } catch (Throwable t) { XposedBridge.log("Utils: hasGeminiSupport check failed. Assuming device has no Gemini support"); return false; From 9308e1a9e48b8818d5d65f10c4b683cdb1a29148 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 4 Sep 2013 22:11:25 +0200 Subject: [PATCH 040/710] Added support for MTK6577 --- src/com/ceco/gm2/gravitybox/Utils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 8642a1ec15..adfa754b0e 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -59,7 +59,9 @@ public static enum MethodState { } public static boolean isMtkDevice() { - return (Build.HARDWARE.toLowerCase().contains("mt6589") || Build.HARDWARE.toLowerCase().contains("mt8389")); + return (Build.HARDWARE.toLowerCase().contains("mt6577") + || Build.HARDWARE.toLowerCase().contains("mt6589") + || Build.HARDWARE.toLowerCase().contains("mt8389")); } public static boolean hasGeminiSupport() { From db5d1b3d5c5e04aaee1e3a7c7f6a0d1e80af350c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 08:37:26 +0200 Subject: [PATCH 041/710] Adapted to support Android 4.1 (1/2) --- AndroidManifest.xml | 2 +- src/com/ceco/gm2/gravitybox/FixCalendar.java | 4 +- .../ceco/gm2/gravitybox/FixCallerIdMms.java | 4 +- .../ceco/gm2/gravitybox/FixCallerIdPhone.java | 4 +- .../ceco/gm2/gravitybox/FixDateTimeCrash.java | 4 +- .../ceco/gm2/gravitybox/FixDevOptions.java | 12 +- .../ceco/gm2/gravitybox/FixMmsWakelock.java | 16 +- .../ceco/gm2/gravitybox/FixTraceFlood.java | 4 +- .../ceco/gm2/gravitybox/FixTtsSettings.java | 4 +- src/com/ceco/gm2/gravitybox/GravityBox.java | 14 +- .../gm2/gravitybox/GravityBoxSettings.java | 1 - src/com/ceco/gm2/gravitybox/ModAudio.java | 91 +++---- .../ceco/gm2/gravitybox/ModAudioSettings.java | 4 +- .../ceco/gm2/gravitybox/ModBatteryStyle.java | 8 +- src/com/ceco/gm2/gravitybox/ModCallCard.java | 20 +- .../gm2/gravitybox/ModCellConnService.java | 4 +- .../ceco/gm2/gravitybox/ModCenterClock.java | 23 +- .../gm2/gravitybox/ModClearAllRecents.java | 107 ++++++--- src/com/ceco/gm2/gravitybox/ModDisplay.java | 156 +++++++----- .../ceco/gm2/gravitybox/ModElectronBeam.java | 4 +- src/com/ceco/gm2/gravitybox/ModHwKeys.java | 94 ++++---- .../ceco/gm2/gravitybox/ModLockscreen.java | 4 +- .../gm2/gravitybox/ModLowBatteryWarning.java | 6 +- src/com/ceco/gm2/gravitybox/ModPhone.java | 9 +- .../ceco/gm2/gravitybox/ModPieControls.java | 6 +- .../ceco/gm2/gravitybox/ModQuickSettings.java | 224 +++++++++--------- .../ceco/gm2/gravitybox/ModRebootMenu.java | 12 +- src/com/ceco/gm2/gravitybox/ModSettings.java | 4 +- .../gm2/gravitybox/ModSignalIconHide.java | 13 +- .../gm2/gravitybox/ModStatusbarColor.java | 70 +++--- .../ceco/gm2/gravitybox/ModVolKeyCursor.java | 4 +- .../gm2/gravitybox/ModVolumeKeySkipTrack.java | 2 +- .../ceco/gm2/gravitybox/ModVolumePanel.java | 4 +- .../ceco/gm2/gravitybox/PatchMasterKey.java | 4 +- src/com/ceco/gm2/gravitybox/PhoneWrapper.java | 24 +- .../gm2/gravitybox/SystemWideResources.java | 39 +-- .../gm2/gravitybox/WifiManagerWrapper.java | 66 ++++-- .../ceco/gm2/gravitybox/pie/PieSysInfo.java | 10 +- 38 files changed, 616 insertions(+), 465 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ce08cdd7a8..1793833890 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -5,7 +5,7 @@ android:versionName="2.2.2" > diff --git a/src/com/ceco/gm2/gravitybox/FixCalendar.java b/src/com/ceco/gm2/gravitybox/FixCalendar.java index 8e07e91b1a..8a419cceed 100644 --- a/src/com/ceco/gm2/gravitybox/FixCalendar.java +++ b/src/com/ceco/gm2/gravitybox/FixCalendar.java @@ -86,8 +86,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..dadc3563ff 100644 --- a/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java +++ b/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java @@ -68,8 +68,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..aae75c83fc 100644 --- a/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java +++ b/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java @@ -43,8 +43,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..775d331568 100644 --- a/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java +++ b/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java @@ -34,8 +34,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..cd47d7cc25 100644 --- a/src/com/ceco/gm2/gravitybox/FixDevOptions.java +++ b/src/com/ceco/gm2/gravitybox/FixDevOptions.java @@ -73,8 +73,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -93,8 +93,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); } } @@ -112,8 +112,8 @@ protected void beforeHookedMethod(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/FixMmsWakelock.java b/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java index ac1f885310..f75f6d4438 100644 --- a/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java +++ b/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java @@ -59,8 +59,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { log("MmsReceiver onReceive EXITED"); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -90,8 +90,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { log("smsReceiver beginStartingService EXITED"); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -123,8 +123,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { log("CBMessagingNotification updateNotification EXITED"); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -207,8 +207,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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..37bccb414c 100644 --- a/src/com/ceco/gm2/gravitybox/FixTraceFlood.java +++ b/src/com/ceco/gm2/gravitybox/FixTraceFlood.java @@ -24,8 +24,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..d191ddd35e 100644 --- a/src/com/ceco/gm2/gravitybox/FixTtsSettings.java +++ b/src/com/ceco/gm2/gravitybox/FixTtsSettings.java @@ -50,8 +50,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 68cb037b3d..e512d2b68f 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -45,15 +45,19 @@ public void initZygote(StartupParam startupParam) throws Throwable { } } + // 4.2+ only + if (Build.VERSION.SDK_INT > 16) { + FixTraceFlood.initZygote(); + ModElectronBeam.initZygote(prefs); + ModLockscreen.initZygote(prefs); + } + // Common - FixTraceFlood.initZygote(); ModVolumeKeySkipTrack.init(prefs); ModVolKeyCursor.initZygote(prefs); ModCallCard.initZygote(); ModStatusbarColor.initZygote(); PhoneWrapper.initZygote(); - ModElectronBeam.initZygote(prefs); - ModLockscreen.initZygote(prefs); ModLowBatteryWarning.initZygote(prefs); ModDisplay.initZygote(prefs); ModAudio.initZygote(prefs); @@ -75,7 +79,7 @@ public void handleInitPackageResources(InitPackageResourcesParam resparam) throw 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); } } @@ -149,7 +153,7 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { 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); } diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index f5f9ae593b..0dcf04f331 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -15,7 +15,6 @@ import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; -import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.MultiSelectListPreference; import android.preference.Preference; diff --git a/src/com/ceco/gm2/gravitybox/ModAudio.java b/src/com/ceco/gm2/gravitybox/ModAudio.java index f162c1745f..4c28e1c7ed 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudio.java +++ b/src/com/ceco/gm2/gravitybox/ModAudio.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.XResources; +import android.os.Build; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; @@ -39,53 +40,57 @@ public void onReceive(Context context, Intent intent) { }; public static void initZygote(final XSharedPreferences prefs) { + try { + final Class 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)) { + 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); + 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); + 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() { @@ -120,8 +125,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/ModAudioSettings.java b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java index 818d6bfd59..8fa4fd3d30 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java @@ -172,8 +172,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 76b88b1ab7..d77a1b0370 100644 --- a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java +++ b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java @@ -105,8 +105,8 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -179,8 +179,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); } - catch (Exception e) { - XposedBridge.log(e); + catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModCallCard.java b/src/com/ceco/gm2/gravitybox/ModCallCard.java index 3643f991a4..66d9e6b965 100644 --- a/src/com/ceco/gm2/gravitybox/ModCallCard.java +++ b/src/com/ceco/gm2/gravitybox/ModCallCard.java @@ -1,6 +1,7 @@ package com.ceco.gm2.gravitybox; import android.graphics.Color; +import android.os.Build; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -14,8 +15,9 @@ public class ModCallCard { private static final String TAG = "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"; @@ -23,9 +25,13 @@ public class ModCallCard { 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 { + 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) { @@ -100,8 +106,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/ModCellConnService.java b/src/com/ceco/gm2/gravitybox/ModCellConnService.java index 65466d32cc..c1bf8813ec 100644 --- a/src/com/ceco/gm2/gravitybox/ModCellConnService.java +++ b/src/com/ceco/gm2/gravitybox/ModCellConnService.java @@ -43,8 +43,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 index 0a1a0f1aba..c095dcb54b 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModCenterClock.java @@ -15,6 +15,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; +import android.os.Build; import android.provider.Settings; import android.text.Spannable; import android.text.SpannableStringBuilder; @@ -114,12 +115,16 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { mAmPmHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_AMPM_HIDE, false); mClockHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_HIDE, false); mAlarmHide = prefs.getBoolean(GravityBoxSettings.PREF_KEY_ALARM_ICON_HIDE, false); - + + String iconAreaId = Build.VERSION.SDK_INT > 16 ? + "system_icon_area" : "icons"; mIconArea = (ViewGroup) liparam.view.findViewById( - liparam.res.getIdentifier("system_icon_area", "id", PACKAGE_NAME)); + liparam.res.getIdentifier(iconAreaId, "id", PACKAGE_NAME)); if (mIconArea == null) return; - mRootView = (ViewGroup) mIconArea.getParent().getParent(); + mRootView = Build.VERSION.SDK_INT > 16 ? + (ViewGroup) mIconArea.getParent().getParent() : + (ViewGroup) mIconArea.getParent(); if (mRootView == null) return; // find statusbar clock @@ -135,8 +140,10 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { } // find notification panel clock + String panelHolderId = Build.VERSION.SDK_INT > 16 ? + "panel_holder" : "notification_panel"; final ViewGroup panelHolder = (ViewGroup) liparam.view.findViewById( - liparam.res.getIdentifier("panel_holder", "id", PACKAGE_NAME)); + liparam.res.getIdentifier(panelHolderId, "id", PACKAGE_NAME)); if (panelHolder != null) { mClockExpanded = (TextView) panelHolder.findViewById( liparam.res.getIdentifier("clock", "id", PACKAGE_NAME)); @@ -205,8 +212,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { GravityBoxSettings.PREF_KEY_STATUSBAR_CENTER_CLOCK, false)); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -309,8 +316,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); } - catch (Exception e) { - XposedBridge.log(e); + catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java index f4101a505b..c8c3796591 100644 --- a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java +++ b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java @@ -27,53 +27,26 @@ public class ModClearAllRecents { 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 XSharedPreferences mPrefs; + private static void log(String message) { XposedBridge.log(TAG + ": " + 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() { - @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; - } - - List recentTaskDescriptions = (List) XposedHelpers.getObjectField( - param.thisObject, "mRecentTaskDescriptions"); - boolean visible = (recentTaskDescriptions != null && recentTaskDescriptions.size() > 0); - if (gravity != GravityBoxSettings.RECENT_CLEAR_OFF && visible) { - 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); - } else { - iv.setVisibility(View.GONE); - } - } - } - }); + if (Build.VERSION.SDK_INT > 16) { + XposedHelpers.findAndHookMethod(recentPanelViewClass, "showImpl", + boolean.class, recentsPanelViewShowHook); + } else { + XposedHelpers.findAndHookMethod(recentPanelViewClass, "showIfReady", + recentsPanelViewShowHook); + } XposedHelpers.findAndHookMethod(recentPanelViewClass, "onFinishInflate", new XC_MethodHook() { @Override @@ -113,6 +86,7 @@ public void onClick(View v) { imgView.setVisibility(View.GONE); vg.addView(imgView); log("clearAllButton ImageView injected"); + updateButtonLayout((View) param.thisObject, imgView); } }); @@ -131,8 +105,63 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable handleDismissChild(param); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); + } + } + + 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) { + FrameLayout fl = (FrameLayout) param.thisObject; + ImageView iv = (ImageView) fl.findViewWithTag("clearAllButton"); + if (iv == null) { + log("WTF? Clear all recents button not found!"); + return; + } + updateButtonLayout((View) param.thisObject, iv); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }; + + private static void updateButtonLayout(View container, ImageView iv) { + mPrefs.reload(); + 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) iv.getLayoutParams(); + lparams.gravity = gravity; + if ((gravity & Gravity.TOP) != 0) { + int marginTop = (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + mPrefs.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); + } else { + iv.setVisibility(View.GONE); } } diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java index 0a836465da..6a27f1eca6 100644 --- a/src/com/ceco/gm2/gravitybox/ModDisplay.java +++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java @@ -6,6 +6,8 @@ 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; @@ -21,6 +23,7 @@ public class ModDisplay { private static final String TAG = "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"; @@ -67,18 +70,37 @@ 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)) { 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(); } } - }; + private static void updateButtonBacklight() { + if (mLight == null || mPendingNotif) return; + + int color = 0; + if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON) + && (mPm != null && mPm.isScreenOn())) { + color = 0xff6e6e6e; + } + + 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); + } + private static boolean mPendingNotif = false; private static Object mLight; private static Handler mHandler; @@ -119,14 +141,20 @@ public void run() { 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); - if (brightnessSettingsEnabled) { + mButtonBacklightMode = prefs.getString( + GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_MODE, GravityBoxSettings.BB_MODE_DEFAULT); + mButtonBacklightNotif = prefs.getBoolean( + GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_NOTIFICATIONS, false); + + if (brightnessSettingsEnabled && classDisplayPowerController != null) { int brightnessMin = prefs.getInt(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, 20); XResources.setSystemWideReplacement( "android", "integer", "config_screenBrightnessSettingMinimum", brightnessMin); @@ -136,65 +164,57 @@ public static void initZygote(final XSharedPreferences prefs) { XResources.setSystemWideReplacement( "android", "integer", "config_screenBrightnessDim", screenDim); log("Screen dim level set to: " + screenDim); - } - - mButtonBacklightMode = prefs.getString( - GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_MODE, GravityBoxSettings.BB_MODE_DEFAULT); - mButtonBacklightNotif = prefs.getBoolean( - GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_NOTIFICATIONS, false); - - 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; - } - - mDisplayPowerController = param.thisObject; - if (brightnessSettingsEnabled) { - mScreenBrightnessRangeMinimum = XposedHelpers.getIntField( - param.thisObject, "mScreenBrightnessRangeMinimum"); - mScreenBrightnessRangeMaximum = XposedHelpers.getIntField( - param.thisObject, "mScreenBrightnessRangeMaximum"); + 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; + } - 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); + 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); } - updateAutobrightnessConfig(luxArray, brightnessArray); } + + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(ACTION_GET_AUTOBRIGHTNESS_CONFIG); + if (brightnessSettingsEnabled) { + intentFilter.addAction(ACTION_SET_AUTOBRIGHTNESS_CONFIG); + } + mContext.registerReceiver(mBroadcastReceiver, intentFilter); } + }); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(ACTION_GET_AUTOBRIGHTNESS_CONFIG); - if (brightnessSettingsEnabled) { - intentFilter.addAction(ACTION_SET_AUTOBRIGHTNESS_CONFIG); - } - intentFilter.addAction(GravityBoxSettings.ACTION_PREF_BUTTON_BACKLIGHT_CHANGED); - mContext.registerReceiver(mBroadcastReceiver, intentFilter); - } - }); - - if (brightnessSettingsEnabled) { XposedHelpers.findAndHookMethod(classDisplayPowerController, "clampScreenBrightness", int.class, new XC_MethodReplacement() { @@ -206,6 +226,21 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { }); } + 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); + log("LightsService constructed. Broadcast receiver registered."); + } + } + }); + XposedHelpers.findAndHookMethod(classLight, "setLightLocked", int.class, int.class, int.class, int.class, int.class, new XC_MethodHook() { @@ -230,7 +265,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable 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; @@ -261,8 +297,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable } } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModElectronBeam.java b/src/com/ceco/gm2/gravitybox/ModElectronBeam.java index c0d4c65c78..009c2be8d3 100644 --- a/src/com/ceco/gm2/gravitybox/ModElectronBeam.java +++ b/src/com/ceco/gm2/gravitybox/ModElectronBeam.java @@ -39,8 +39,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/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index 72cdb9afb1..4f9c073ea1 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -10,6 +10,7 @@ import android.content.IntentFilter; import android.content.pm.ResolveInfo; import android.content.res.Resources; +import android.os.Build; import android.os.Handler; import android.os.PowerManager; import android.os.Process; @@ -31,6 +32,7 @@ public class ModHwKeys { 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; @@ -131,33 +133,14 @@ public static void initZygote(final XSharedPreferences prefs) { 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) { @@ -262,25 +245,52 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } }); - 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 > 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); + } } - } - }); - - } catch (Exception e) { - XposedBridge.log(e); + }); + } + } 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); + + 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"); + } + }; + private static Runnable mMenuLongPress = new Runnable() { @Override diff --git a/src/com/ceco/gm2/gravitybox/ModLockscreen.java b/src/com/ceco/gm2/gravitybox/ModLockscreen.java index 3cdbbef384..ab0f94e949 100644 --- a/src/com/ceco/gm2/gravitybox/ModLockscreen.java +++ b/src/com/ceco/gm2/gravitybox/ModLockscreen.java @@ -141,8 +141,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { minimizeChallengeIfDesired(slidingChallenge); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java b/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java index e4e8a29f51..48bc6fcd95 100644 --- a/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java +++ b/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java @@ -86,8 +86,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -143,6 +143,6 @@ 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/ModPhone.java b/src/com/ceco/gm2/gravitybox/ModPhone.java index be5e375684..9f51534aed 100644 --- a/src/com/ceco/gm2/gravitybox/ModPhone.java +++ b/src/com/ceco/gm2/gravitybox/ModPhone.java @@ -5,6 +5,7 @@ import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; +import android.os.Build; import android.os.Bundle; import android.os.Vibrator; import de.robv.android.xposed.XC_MethodHook; @@ -17,7 +18,9 @@ public class ModPhone { private static final String TAG = "ModPhone"; public static final String PACKAGE_NAME = "com.android.phone"; private static final String CLASS_IN_CALL_SCREEN = "com.android.phone.InCallScreen"; - private static final String ENUM_PHONE_STATE = "com.android.internal.telephony.PhoneConstants$State"; + private static final String ENUM_PHONE_STATE = Build.VERSION.SDK_INT > 16 ? + "com.android.internal.telephony.PhoneConstants$State" : + "com.android.internal.telephony.Phone$State"; private static final String CLASS_ASYNC_RESULT = "android.os.AsyncResult"; private static final String CLASS_CALL_NOTIFIER = "com.android.phone.CallNotifier"; private static final boolean DEBUG = false; @@ -191,8 +194,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (DEBUG ) log("CallNotifier: onPhoneStateChanged 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/ModPieControls.java b/src/com/ceco/gm2/gravitybox/ModPieControls.java index cf8ff40691..12e62cf30e 100644 --- a/src/com/ceco/gm2/gravitybox/ModPieControls.java +++ b/src/com/ceco/gm2/gravitybox/ModPieControls.java @@ -206,7 +206,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { log("BaseStatusBar starting..."); mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); mGbContext = mContext.createPackageContext(GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY); - mWindowManager = (WindowManager) XposedHelpers.getObjectField(param.thisObject, "mWindowManager"); + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); mPieController = new PieController(mContext, mGbContext); mPieController.attachTo(param.thisObject); @@ -270,8 +270,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { | mAlwaysShowMenuItem); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index e4c3fb9501..195fe0fc37 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -324,8 +324,8 @@ public static void initResources(XSharedPreferences prefs, InitPackageResourcesP if (!Utils.isMtkDevice()) { resparam.res.setReplacement(PACKAGE_NAME, "bool", "quick_settings_show_rotation_lock", true); } - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -472,53 +472,57 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { protected void afterHookedMethod(final MethodHookParam param) throws Throwable { log("about to add tiles"); - LayoutInflater inflater = (LayoutInflater) param.args[1]; + try { + LayoutInflater inflater = (LayoutInflater) param.args[1]; - mTiles = new ArrayList(); + mTiles = new ArrayList(); - if (!Utils.isMtkDevice()) { - GpsTile gpsTile = new GpsTile(mContext, mGbContext, mStatusBar, mPanelBar); - gpsTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(gpsTile); + if (!Utils.isMtkDevice()) { + GpsTile gpsTile = new GpsTile(mContext, mGbContext, mStatusBar, mPanelBar); + gpsTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(gpsTile); - RingerModeTile rmTile = new RingerModeTile(mContext, mGbContext, mStatusBar, mPanelBar); - rmTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(rmTile); - } + RingerModeTile rmTile = new RingerModeTile(mContext, mGbContext, mStatusBar, mPanelBar); + rmTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(rmTile); + } - NetworkModeTile nmTile = new NetworkModeTile(mContext, mGbContext, mStatusBar, mPanelBar); - nmTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(nmTile); + NetworkModeTile nmTile = new NetworkModeTile(mContext, mGbContext, mStatusBar, mPanelBar); + nmTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(nmTile); - SyncTile syncTile = new SyncTile(mContext, mGbContext, mStatusBar, mPanelBar); - syncTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(syncTile); + SyncTile syncTile = new SyncTile(mContext, mGbContext, mStatusBar, mPanelBar); + syncTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(syncTile); - WifiApTile wifiApTile = new WifiApTile(mContext, mGbContext, mStatusBar, mPanelBar); - wifiApTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(wifiApTile); + WifiApTile wifiApTile = new WifiApTile(mContext, mGbContext, mStatusBar, mPanelBar); + wifiApTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(wifiApTile); - TorchTile torchTile = new TorchTile(mContext, mGbContext, mStatusBar, mPanelBar); - torchTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(torchTile); + TorchTile torchTile = new TorchTile(mContext, mGbContext, mStatusBar, mPanelBar); + torchTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(torchTile); - SleepTile sleepTile = new SleepTile(mContext, mGbContext, mStatusBar, mPanelBar); - sleepTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(sleepTile); + SleepTile sleepTile = new SleepTile(mContext, mGbContext, mStatusBar, mPanelBar); + sleepTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(sleepTile); - QuickRecordTile qrTile = new QuickRecordTile(mContext, mGbContext, mStatusBar, mPanelBar); - qrTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(qrTile); + QuickRecordTile qrTile = new QuickRecordTile(mContext, mGbContext, mStatusBar, mPanelBar); + qrTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(qrTile); - QuickAppTile qAppTile = new QuickAppTile(mContext, mGbContext, mStatusBar, mPanelBar); - qAppTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(qAppTile); + QuickAppTile qAppTile = new QuickAppTile(mContext, mGbContext, mStatusBar, mPanelBar); + qAppTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(qAppTile); - GravityBoxTile gbTile = new GravityBoxTile(mContext, mGbContext, mStatusBar, mPanelBar); - gbTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(gbTile); + GravityBoxTile gbTile = new GravityBoxTile(mContext, mGbContext, mStatusBar, mPanelBar); + gbTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(gbTile); - updateTileVisibility(); + updateTileVisibility(); + } catch (Throwable t) { + XposedBridge.log(t); + } } }; @@ -539,62 +543,68 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - MotionEvent event = (MotionEvent) param.args[0]; - - if (mStatusBar != null && XposedHelpers.getBooleanField(mStatusBar, "mHasFlipSettings")) { - boolean shouldFlip = false; - boolean okToFlip = XposedHelpers.getBooleanField(param.thisObject, "mOkToFlip"); - Object notificationData = XposedHelpers.getObjectField(mStatusBar, "mNotificationData"); - float handleBarHeight = XposedHelpers.getFloatField(param.thisObject, "mHandleBarHeight"); - Method getExpandedHeight = param.thisObject.getClass().getSuperclass().getMethod("getExpandedHeight"); - float expandedHeight = (Float) getExpandedHeight.invoke(param.thisObject); - final int width = ((View) param.thisObject).getWidth(); - - switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - okToFlip = (expandedHeight == 0); - XposedHelpers.setBooleanField(param.thisObject, "mOkToFlip", okToFlip); - if (mAutoSwitch && - (Integer)XposedHelpers.callMethod(notificationData, "size") == 0 && - !isSimSwitchPanelShowing()) { - shouldFlip = true; - } else if (mQuickPulldown == GravityBoxSettings.QUICK_PULLDOWN_RIGHT - && (event.getX(0) > (width * - (1.0f - STATUS_BAR_SETTINGS_FLIP_PERCENTAGE_RIGHT)))) { - shouldFlip = true; - } else if (mQuickPulldown == GravityBoxSettings.QUICK_PULLDOWN_LEFT - && (event.getX(0) < (width * - (1.0f - STATUS_BAR_SETTINGS_FLIP_PERCENTAGE_LEFT)))) { - shouldFlip = true; - } - break; - case MotionEvent.ACTION_POINTER_DOWN: - if (okToFlip) { - float miny = event.getY(0); - float maxy = miny; - for (int i = 1; i < event.getPointerCount(); i++) { - final float y = event.getY(i); - if (y < miny) miny = y; - if (y > maxy) maxy = y; - } - if (maxy - miny < handleBarHeight) { + try { + MotionEvent event = (MotionEvent) param.args[0]; + + if (mStatusBar != null && XposedHelpers.getBooleanField(mStatusBar, "mHasFlipSettings")) { + boolean shouldFlip = false; + boolean okToFlip = XposedHelpers.getBooleanField(param.thisObject, "mOkToFlip"); + Object notificationData = XposedHelpers.getObjectField(mStatusBar, "mNotificationData"); + float handleBarHeight = XposedHelpers.getFloatField(param.thisObject, "mHandleBarHeight"); + Method getExpandedHeight = param.thisObject.getClass().getSuperclass().getMethod("getExpandedHeight"); + float expandedHeight = (Float) getExpandedHeight.invoke(param.thisObject); + final int width = ((View) param.thisObject).getWidth(); + + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + okToFlip = (expandedHeight == 0); + XposedHelpers.setBooleanField(param.thisObject, "mOkToFlip", okToFlip); + if (mAutoSwitch && + (Integer)XposedHelpers.callMethod(notificationData, "size") == 0 && + !isSimSwitchPanelShowing()) { + shouldFlip = true; + } else if (mQuickPulldown == GravityBoxSettings.QUICK_PULLDOWN_RIGHT + && (event.getX(0) > (width * + (1.0f - STATUS_BAR_SETTINGS_FLIP_PERCENTAGE_RIGHT)))) { + shouldFlip = true; + } else if (mQuickPulldown == GravityBoxSettings.QUICK_PULLDOWN_LEFT + && (event.getX(0) < (width * + (1.0f - STATUS_BAR_SETTINGS_FLIP_PERCENTAGE_LEFT)))) { shouldFlip = true; } + break; + case MotionEvent.ACTION_POINTER_DOWN: + if (okToFlip) { + float miny = event.getY(0); + float maxy = miny; + for (int i = 1; i < event.getPointerCount(); i++) { + final float y = event.getY(i); + if (y < miny) miny = y; + if (y > maxy) maxy = y; + } + if (maxy - miny < handleBarHeight) { + shouldFlip = true; + } + } + break; + } + if (okToFlip && shouldFlip) { + if (expandedHeight < handleBarHeight) { + XposedHelpers.callMethod(mStatusBar, "switchToSettings"); + } else { + XposedHelpers.callMethod(mStatusBar, "flipToSettings"); } - break; - } - if (okToFlip && shouldFlip) { - if (expandedHeight < handleBarHeight) { - XposedHelpers.callMethod(mStatusBar, "switchToSettings"); - } else { - XposedHelpers.callMethod(mStatusBar, "flipToSettings"); + okToFlip = false; } - okToFlip = false; } - } - View handleView = (View) XposedHelpers.getObjectField(param.thisObject, "mHandleView"); - return handleView.dispatchTouchEvent(event); + View handleView = (View) XposedHelpers.getObjectField(param.thisObject, "mHandleView"); + return handleView.dispatchTouchEvent(event); + } catch (Throwable t) { + XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args); + XposedBridge.log(t); + return null; + } } }; @@ -705,9 +715,9 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { fPrivateFlags.setInt(thisView, privateFlags); return null; - } catch (Exception e) { + } catch (Throwable t) { // fallback to original method in case of problems - XposedBridge.log(e); + XposedBridge.log(t); XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args); return null; } @@ -731,8 +741,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("user_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -743,8 +753,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("brightness_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -755,8 +765,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("settings")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -767,8 +777,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("wifi_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -779,8 +789,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("rssi_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -791,8 +801,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("auto_rotate_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -803,8 +813,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("battery_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -815,8 +825,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("airplane_mode_textview")); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } try { @@ -827,8 +837,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { ((View)param.args[0]).setTag(mAospTileTags.get("bluetooth_textview")); } }); - } 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/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index ace996c665..7319e6a0c1 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -192,8 +192,8 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -228,8 +228,8 @@ public void onClick(DialogInterface dialog, int which) { AlertDialog dialog = builder.create(); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); dialog.show(); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -277,8 +277,8 @@ public void onClick(DialogInterface dialog, int which) { AlertDialog dialog = builder.create(); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); dialog.show(); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModSettings.java b/src/com/ceco/gm2/gravitybox/ModSettings.java index 2afece227c..46a0139b52 100644 --- a/src/com/ceco/gm2/gravitybox/ModSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModSettings.java @@ -42,8 +42,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/ModSignalIconHide.java b/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java index 4830afb23c..deda661be8 100644 --- a/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java +++ b/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java @@ -8,6 +8,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Build; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -19,7 +20,9 @@ public class ModSignalIconHide { public static final String PACKAGE_NAME = "com.android.systemui"; private static final String CLASS_SIGNAL_CLUSTER_VIEW = "com.android.systemui.statusbar.SignalClusterViewGemini"; - private static final String CLASS_UICC_CONTROLLER = "com.android.internal.telephony.uicc.UiccController"; + private static final String CLASS_UICC_CONTROLLER = Build.VERSION.SDK_INT > 16 ? + "com.android.internal.telephony.uicc.UiccController" : + "com.android.internal.telephony.IccCard"; private static boolean autohideSlot1; private static boolean autohideSlot2; @@ -88,8 +91,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -111,8 +114,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/ModStatusbarColor.java b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java index 0ba776b506..fd747b2b96 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java @@ -12,6 +12,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.BatteryManager; +import android.os.Build; import android.provider.Settings; import android.view.View; import android.view.WindowManager; @@ -30,7 +31,7 @@ public class ModStatusbarColor { private static final String TAG = "ModStatusbarColor"; public static final String PACKAGE_NAME = "com.android.systemui"; private static final String CLASS_PHONE_WINDOW_MANAGER = "com.android.internal.policy.impl.PhoneWindowManager"; - private static final String CLASS_PANEL_BAR = "com.android.systemui.statusbar.phone.PanelBar"; + private static final String CLASS_PHONE_STATUSBAR_VIEW = "com.android.systemui.statusbar.phone.PhoneStatusBarView"; private static final String CLASS_PHONE_STATUSBAR = "com.android.systemui.statusbar.phone.PhoneStatusBar"; private static final String CLASS_SIGNAL_CLUSTER_VIEW = Utils.hasGeminiSupport() ? "com.android.systemui.statusbar.SignalClusterViewGemini" : @@ -177,18 +178,19 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { return 0; } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { try { - final Class panelBarClass = XposedHelpers.findClass(CLASS_PANEL_BAR, classLoader); + final Class phoneStatusbarViewClass = XposedHelpers.findClass(CLASS_PHONE_STATUSBAR_VIEW, classLoader); final Class phoneStatusbarClass = XposedHelpers.findClass(CLASS_PHONE_STATUSBAR, classLoader); final Class signalClusterViewClass = XposedHelpers.findClass(CLASS_SIGNAL_CLUSTER_VIEW, classLoader); final Class batteryControllerClass = XposedHelpers.findClass(CLASS_BATTERY_CONTROLLER, classLoader); - final Class notifPanelViewClass = XposedHelpers.findClass(CLASS_NOTIF_PANEL_VIEW, classLoader); + final Class notifPanelViewClass = Build.VERSION.SDK_INT > 16 ? + XposedHelpers.findClass(CLASS_NOTIF_PANEL_VIEW, classLoader) : null; mIconColorEnabled = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE, false); mIconManager.setIconColor( @@ -200,7 +202,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL mRoamingIndicatorsDisabled = prefs.getBoolean( GravityBoxSettings.PREF_KEY_DISABLE_ROAMING_INDICATORS, false); - XposedBridge.hookAllConstructors(panelBarClass, new XC_MethodHook() { + XposedBridge.hookAllConstructors(phoneStatusbarViewClass, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @@ -468,34 +470,36 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); - XposedHelpers.findAndHookMethod(notifPanelViewClass, "onFinishInflate", new XC_MethodHook() { - - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - mNotificationPanelView = (FrameLayout) param.thisObject; - - mNotificationWallpaper = new NotificationWallpaper(mNotificationPanelView.getContext()); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.MATCH_PARENT); - mNotificationWallpaper.setLayoutParams(lp); - mNotificationWallpaper.setType(prefs.getString( - GravityBoxSettings.PREF_KEY_NOTIF_BACKGROUND, - GravityBoxSettings.NOTIF_BG_DEFAULT)); - mNotificationWallpaper.setColor(prefs.getInt( - GravityBoxSettings.PREF_KEY_NOTIF_COLOR, Color.BLACK)); - mNotificationWallpaper.setColorMode(prefs.getString( - GravityBoxSettings.PREF_KEY_NOTIF_COLOR_MODE, - GravityBoxSettings.NOTIF_BG_COLOR_MODE_OVERLAY)); - mNotificationWallpaper.setAlpha(prefs.getInt( - GravityBoxSettings.PREF_KEY_NOTIF_BACKGROUND_ALPHA, 60)); - mNotificationPanelView.addView(mNotificationWallpaper); - updateNotificationPanelBackground(); - } - }); + if (notifPanelViewClass != null) { + XposedHelpers.findAndHookMethod(notifPanelViewClass, "onFinishInflate", new XC_MethodHook() { + + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mNotificationPanelView = (FrameLayout) param.thisObject; + + mNotificationWallpaper = new NotificationWallpaper(mNotificationPanelView.getContext()); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT); + mNotificationWallpaper.setLayoutParams(lp); + mNotificationWallpaper.setType(prefs.getString( + GravityBoxSettings.PREF_KEY_NOTIF_BACKGROUND, + GravityBoxSettings.NOTIF_BG_DEFAULT)); + mNotificationWallpaper.setColor(prefs.getInt( + GravityBoxSettings.PREF_KEY_NOTIF_COLOR, Color.BLACK)); + mNotificationWallpaper.setColorMode(prefs.getString( + GravityBoxSettings.PREF_KEY_NOTIF_COLOR_MODE, + GravityBoxSettings.NOTIF_BG_COLOR_MODE_OVERLAY)); + mNotificationWallpaper.setAlpha(prefs.getInt( + GravityBoxSettings.PREF_KEY_NOTIF_BACKGROUND_ALPHA, 60)); + mNotificationPanelView.addView(mNotificationWallpaper); + updateNotificationPanelBackground(); + } + }); + } - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java b/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java index 8ecd192c08..c079c9da68 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java +++ b/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java @@ -89,8 +89,8 @@ protected void beforeHookedMethod(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/ModVolumeKeySkipTrack.java b/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java index fe709b5f34..691713c62c 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java @@ -41,7 +41,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { findAndHookMethod(classPhoneWindowManager, "interceptKeyBeforeQueueing", KeyEvent.class, int.class, boolean.class, handleInterceptKeyBeforeQueueing); - } catch (Exception e) { XposedBridge.log(e); } + } catch (Throwable t) { XposedBridge.log(t); } } private static XC_MethodHook handleInterceptKeyBeforeQueueing = new XC_MethodHook() { diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index 2248a8ecbe..fc682cdc0e 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -92,8 +92,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { updateStreamVolumeAlias(); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/PatchMasterKey.java b/src/com/ceco/gm2/gravitybox/PatchMasterKey.java index 3b9b7d0ee2..7f070a7af1 100644 --- a/src/com/ceco/gm2/gravitybox/PatchMasterKey.java +++ b/src/com/ceco/gm2/gravitybox/PatchMasterKey.java @@ -85,8 +85,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } } }); - } catch(Exception e) { - XposedBridge.log(e); + } catch(Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/PhoneWrapper.java b/src/com/ceco/gm2/gravitybox/PhoneWrapper.java index b404fa1ed9..29245256bb 100644 --- a/src/com/ceco/gm2/gravitybox/PhoneWrapper.java +++ b/src/com/ceco/gm2/gravitybox/PhoneWrapper.java @@ -1,10 +1,11 @@ package com.ceco.gm2.gravitybox; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.os.Handler; +import android.os.Build; import android.os.Message; import android.provider.Settings; import de.robv.android.xposed.XC_MethodHook; @@ -68,8 +69,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { onInitialize(); } }); - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -80,6 +81,7 @@ private static void onInitialize() { } } + @SuppressLint("NewApi") private static void setPreferredNetworkType(int networkType) { Object defPhone = XposedHelpers.callStaticMethod(mClsPhoneFactory, "getDefaultPhone"); if (defPhone == null) return; @@ -92,15 +94,19 @@ private static void setPreferredNetworkType(int networkType) { paramArgs[2] = int.class; XposedHelpers.callMethod(defPhone, "setPreferredNetworkTypeGemini", paramArgs, networkType, null, 0); } else { - Settings.Global.putInt(mContext.getContentResolver(), PREFERRED_NETWORK_MODE, networkType); + if (Build.VERSION.SDK_INT > 16) { + Settings.Global.putInt(mContext.getContentResolver(), PREFERRED_NETWORK_MODE, networkType); + } else { + Settings.Secure.putInt(mContext.getContentResolver(), PREFERRED_NETWORK_MODE, networkType); + } Class[] paramArgs = new Class[2]; paramArgs[0] = int.class; paramArgs[1] = Message.class; XposedHelpers.callMethod(defPhone, "setPreferredNetworkType", paramArgs, networkType, null); } - } catch (Exception e) { - log("setPreferredNetworkType failed: " + e.getMessage()); - XposedBridge.log(e); + } catch (Throwable t) { + log("setPreferredNetworkType failed: " + t.getMessage()); + XposedBridge.log(t); } } @@ -110,8 +116,8 @@ public static int getDefaultNetworkType() { "getInt", "ro.telephony.default_network", NT_WCDMA_PREFERRED); log("getDefaultNetworkMode: mode=" + mode); return mode; - } catch (Exception e) { - XposedBridge.log(e); + } catch (Throwable t) { + XposedBridge.log(t); return NT_WCDMA_PREFERRED; } } diff --git a/src/com/ceco/gm2/gravitybox/SystemWideResources.java b/src/com/ceco/gm2/gravitybox/SystemWideResources.java index 33c47241b4..fa70857b4f 100644 --- a/src/com/ceco/gm2/gravitybox/SystemWideResources.java +++ b/src/com/ceco/gm2/gravitybox/SystemWideResources.java @@ -3,30 +3,35 @@ import android.content.res.XModuleResources; import android.content.res.XResources; import de.robv.android.xposed.XSharedPreferences; +import de.robv.android.xposed.XposedBridge; public class SystemWideResources { public static void initResources(final XSharedPreferences prefs) { - XModuleResources modRes = XModuleResources.createInstance(GravityBox.MODULE_PATH, null); + try { + XModuleResources modRes = XModuleResources.createInstance(GravityBox.MODULE_PATH, null); - XResources.setSystemWideReplacement("android", "bool", "config_animateScreenLights", true); + XResources.setSystemWideReplacement("android", "bool", "config_animateScreenLights", true); - if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_PIE_CONTROL_ENABLE, false) - && prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_DISABLE, false)) { - XResources.setSystemWideReplacement("android", "bool", "config_showNavigationBar", false); - } + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_PIE_CONTROL_ENABLE, false) + && prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_DISABLE, false)) { + XResources.setSystemWideReplacement("android", "bool", "config_showNavigationBar", false); + } - boolean holoBgDither = prefs.getBoolean(GravityBoxSettings.PREF_KEY_HOLO_BG_DITHER, false); - if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_HOLO_BG_SOLID_BLACK, false)) { - XResources.setSystemWideReplacement( - "android", "drawable", "background_holo_dark", modRes.fwd(R.drawable.background_holo_dark_solid)); - } else if (holoBgDither) { - XResources.setSystemWideReplacement( - "android", "drawable", "background_holo_dark", modRes.fwd(R.drawable.background_holo_dark)); - } - if (holoBgDither) { - XResources.setSystemWideReplacement( - "android", "drawable", "background_holo_light", modRes.fwd(R.drawable.background_holo_light)); + boolean holoBgDither = prefs.getBoolean(GravityBoxSettings.PREF_KEY_HOLO_BG_DITHER, false); + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_HOLO_BG_SOLID_BLACK, false)) { + XResources.setSystemWideReplacement( + "android", "drawable", "background_holo_dark", modRes.fwd(R.drawable.background_holo_dark_solid)); + } else if (holoBgDither) { + XResources.setSystemWideReplacement( + "android", "drawable", "background_holo_dark", modRes.fwd(R.drawable.background_holo_dark)); + } + if (holoBgDither) { + XResources.setSystemWideReplacement( + "android", "drawable", "background_holo_light", modRes.fwd(R.drawable.background_holo_light)); + } + } catch (Throwable t) { + XposedBridge.log(t); } } diff --git a/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java b/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java index 93dd9fe90c..3f48e0df35 100644 --- a/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java +++ b/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java @@ -1,6 +1,8 @@ package com.ceco.gm2.gravitybox; +import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; @@ -8,6 +10,7 @@ import android.content.IntentFilter; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; +import android.os.Build; import android.provider.Settings; public class WifiManagerWrapper { @@ -95,32 +98,49 @@ public boolean isWifiApEnabled() { return (getWifiApState() == WIFI_AP_STATE_ENABLED); } + @SuppressLint("NewApi") public void setWifiApEnabled(boolean enable) { - final ContentResolver cr = mContext.getContentResolver(); - - int wifiState = getWifiState(); - if (enable && (wifiState == WIFI_STATE_ENABLING || - wifiState == WIFI_STATE_ENABLED)) { - setWifiEnabled(false); - Settings.Global.putInt(cr, WIFI_SAVED_STATE, 1); - } - - Class[] paramArgs = new Class[2]; - paramArgs[0] = WifiConfiguration.class; - paramArgs[1] = boolean.class; - XposedHelpers.callMethod(mWifiManager, "setWifiApEnabled", paramArgs, null, enable); - - if (!enable) { - int wifiSavedState = 0; - try { - wifiSavedState = Settings.Global.getInt(cr, WIFI_SAVED_STATE); - } catch (Settings.SettingNotFoundException e) { - // + try { + final ContentResolver cr = mContext.getContentResolver(); + + int wifiState = getWifiState(); + if (enable && (wifiState == WIFI_STATE_ENABLING || + wifiState == WIFI_STATE_ENABLED)) { + setWifiEnabled(false); + if (Build.VERSION.SDK_INT > 16) { + Settings.Global.putInt(cr, WIFI_SAVED_STATE, 1); + } else { + Settings.Secure.putInt(cr, WIFI_SAVED_STATE, 1); + } } - if (wifiSavedState == 1) { - setWifiEnabled(true); - Settings.Global.putInt(cr, WIFI_SAVED_STATE, 0); + + Class[] paramArgs = new Class[2]; + paramArgs[0] = WifiConfiguration.class; + paramArgs[1] = boolean.class; + XposedHelpers.callMethod(mWifiManager, "setWifiApEnabled", paramArgs, null, enable); + + if (!enable) { + int wifiSavedState = 0; + try { + if (Build.VERSION.SDK_INT > 16) { + wifiSavedState = Settings.Global.getInt(cr, WIFI_SAVED_STATE); + } else { + wifiSavedState = Settings.Secure.getInt(cr, WIFI_SAVED_STATE); + } + } catch (Settings.SettingNotFoundException e) { + // + } + if (wifiSavedState == 1) { + setWifiEnabled(true); + if (Build.VERSION.SDK_INT > 16) { + Settings.Global.putInt(cr, WIFI_SAVED_STATE, 0); + } else { + Settings.Secure.putInt(cr, WIFI_SAVED_STATE, 0); + } + } } + } catch (Throwable t) { + XposedBridge.log(t); } } } \ No newline at end of file diff --git a/src/com/ceco/gm2/gravitybox/pie/PieSysInfo.java b/src/com/ceco/gm2/gravitybox/pie/PieSysInfo.java index 0f0fa11bac..8d29c81a87 100644 --- a/src/com/ceco/gm2/gravitybox/pie/PieSysInfo.java +++ b/src/com/ceco/gm2/gravitybox/pie/PieSysInfo.java @@ -183,15 +183,19 @@ private String getWifiSsid() { if (wifiManager != null) { final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); if (connectionInfo != null) { - final Object wifiSsid = XposedHelpers.callMethod(connectionInfo, "getWifiSsid"); + final Object wifiSsid = Build.VERSION.SDK_INT > 16 ? + XposedHelpers.callMethod(connectionInfo, "getWifiSsid") : + XposedHelpers.callMethod(connectionInfo, "getSSID"); if (wifiSsid != null) { ssid = wifiSsid.toString(); } } } if (TextUtils.isEmpty(ssid)) { - ssid = mContext.getString(mContext.getResources().getIdentifier( - "quick_settings_wifi_not_connected", "string", PieController.PACKAGE_NAME)); + int resId = mContext.getResources().getIdentifier( + "quick_settings_wifi_not_connected", "string", PieController.PACKAGE_NAME); + // TODO: translate + ssid = resId == 0 ? "Not connected" : mContext.getString(resId); } return ssid; } From 8e9ba8af54def9605b472803637e1811db55e3df Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 09:22:24 +0200 Subject: [PATCH 042/710] Adapted to support Android 4.1 (2/2) --- .../gm2/gravitybox/GravityBoxSettings.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 0dcf04f331..1165818038 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -119,6 +119,7 @@ public class GravityBoxSettings extends Activity { 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 = "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"; @@ -134,6 +135,8 @@ public class GravityBoxSettings extends Activity { 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_CAT_KEY_DISPLAY = "pref_cat_display"; + 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"; @@ -141,6 +144,7 @@ public class GravityBoxSettings extends Activity { 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"; @@ -363,6 +367,12 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared 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; @SuppressWarnings("deprecation") @Override @@ -473,6 +483,13 @@ public void onCreate(Bundle savedInstanceState) { mPrefScreenDimLevel = (SeekBarPreference) findPreference(PREF_KEY_SCREEN_DIM_LEVEL); 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); + mPrefCatMedia = (PreferenceScreen) findPreference(PREF_CAT_KEY_MEDIA); + mPrefSafeMediaVolume = (CheckBoxPreference) findPreference(PREF_KEY_SAFE_MEDIA_VOLUME); + // Remove Phone specific preferences on Tablet devices if (Utils.isTablet(getActivity())) { mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); @@ -499,6 +516,16 @@ public void onCreate(Bundle savedInstanceState) { mQuickSettings.setEntryValues(R.array.qs_tile_values); } + // 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); + } + setDefaultValues(); } From be9e9f95adac17a2f77431f01dc151a530418911 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 09:50:04 +0200 Subject: [PATCH 043/710] HW Key Actions: added new action to Show recent apps --- res/values/arrays.xml | 2 ++ res/values/strings.xml | 3 +++ .../ceco/gm2/gravitybox/GravityBoxSettings.java | 1 + src/com/ceco/gm2/gravitybox/ModHwKeys.java | 17 +++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index f374f5c474..ac59cec71b 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -164,6 +164,7 @@ @string/hwkey_action_prev_app @string/hwkey_action_kill @string/hwkey_action_sleep + @string/hwkey_action_recent_apps @@ -173,6 +174,7 @@ 3 4 5 + 6 diff --git a/res/values/strings.xml b/res/values/strings.xml index 28920654c1..ea725209cc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -455,4 +455,7 @@ 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 + diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 1165818038..fad063da1b 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -167,6 +167,7 @@ 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_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"; diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index 4f9c073ea1..12fda005f4 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -369,6 +369,8 @@ private static void performAction(HwKeyTrigger keyTrigger) { killForegroundApp(); } else if (action == GravityBoxSettings.HWKEY_ACTION_SLEEP) { goToSleep(); + } else if (action == GravityBoxSettings.HWKEY_ACTION_RECENT_APPS) { + toggleRecentApps(); } } @@ -495,4 +497,19 @@ private static void goToSleep() { XposedBridge.log(e); } } + + 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); + } + } } \ No newline at end of file From 61b5bf3c0bdafb6a466a61e94388011c8c2c939f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 10:29:23 +0200 Subject: [PATCH 044/710] HW Key Actions: added support for HOME key long-press --- res/values/strings.xml | 3 ++ res/xml/gravitybox.xml | 7 ++++ .../gm2/gravitybox/GravityBoxSettings.java | 12 +++++++ src/com/ceco/gm2/gravitybox/ModHwKeys.java | 34 +++++++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index ea725209cc..8d40e027c8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -458,4 +458,7 @@ Show recent apps + + Home key long-press action + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index b0c6d2e282..b95b7388da 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -560,6 +560,13 @@ android:entryValues="@array/hwkey_action_values" android:defaultValue="0" /> + + 17) { + XposedHelpers.setBooleanField(param.thisObject, "mHomeConsumed", true); + } else { + XposedHelpers.setBooleanField(param.thisObject, "mHomeLongPressed", true); + } + performAction(HwKeyTrigger.HOME_LONGPRESS); + + return null; + } + }); + if (Build.VERSION.SDK_INT > 16) { XposedHelpers.findAndHookMethod(classPhoneWindowManager, "isWakeKeyWhenScreenOff", int.class, new XC_MethodHook() { @@ -280,6 +309,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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_BACK_LONGPRESS_CHANGED); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_DOUBLETAP_SPEED_CHANGED); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_KILL_DELAY_CHANGED); @@ -327,6 +357,8 @@ private static int getActionForHwKeyTrigger(HwKeyTrigger keyTrigger) { action = mMenuLongpressAction; } else if (keyTrigger == HwKeyTrigger.MENU_DOUBLETAP) { action = mMenuDoubletapAction; + } else if (keyTrigger == HwKeyTrigger.HOME_LONGPRESS) { + action = mHomeLongpressAction; } else if (keyTrigger == HwKeyTrigger.BACK_LONGPRESS) { action = mBackLongpressAction; } @@ -340,6 +372,8 @@ 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; } From 631b32f3615186a543c00d9532579f25a0105561 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 11:10:41 +0200 Subject: [PATCH 045/710] HW Key Actions: added "Launch custom app" action --- res/values/arrays.xml | 2 + res/values/strings.xml | 6 +++ res/xml/gravitybox.xml | 5 +++ .../gm2/gravitybox/GravityBoxSettings.java | 2 + src/com/ceco/gm2/gravitybox/ModHwKeys.java | 45 +++++++++++++++++++ 5 files changed, 60 insertions(+) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index ac59cec71b..756dfb389a 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -165,6 +165,7 @@ @string/hwkey_action_kill @string/hwkey_action_sleep @string/hwkey_action_recent_apps + @string/hwkey_action_custom_app @@ -175,6 +176,7 @@ 4 5 6 + 7 diff --git a/res/values/strings.xml b/res/values/strings.xml index 8d40e027c8..ea19b4f899 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -461,4 +461,10 @@ Home key long-press action + + Launch custom app + Set custom app + No custom app assigned! + Custom app not found! + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index b95b7388da..aa9340f15c 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -574,6 +574,11 @@ android:entryValues="@array/hwkey_action_values" android:defaultValue="0" /> + + classActivityManagerNative; private static Object mPhoneWindowManager; private static Context mContext; @@ -46,6 +51,8 @@ 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 boolean mIsMenuLongPressed = false; private static boolean mIsMenuDoubleTap = false; private static boolean mIsBackLongPressed = false; @@ -57,6 +64,7 @@ public class ModHwKeys { 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 void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -118,6 +126,7 @@ public void onReceive(Context context, Intent intent) { public static void initZygote(final XSharedPreferences prefs) { try { + mPrefs = prefs; try { mMenuLongpressAction = Integer.valueOf( prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_MENU_LONGPRESS, "0")); @@ -305,6 +314,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_LONGPRESS_CHANGED); @@ -405,6 +416,8 @@ private static void performAction(HwKeyTrigger keyTrigger) { goToSleep(); } else if (action == GravityBoxSettings.HWKEY_ACTION_RECENT_APPS) { toggleRecentApps(); + } else if (action == GravityBoxSettings.HWKEY_ACTION_CUSTOM_APP) { + launchCustomApp(); } } @@ -546,4 +559,36 @@ private static void toggleRecentApps() { XposedBridge.log(t); } } + + private static void launchCustomApp() { + Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneWindowManager, "mHandler"); + if (handler == null) return; + mPrefs.reload(); + + handler.post( + new Runnable() { + @Override + public void run() { + try { + String appInfo = mPrefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_CUSTOM_APP, 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); + } + } + } + ); + } } \ No newline at end of file From fbac3fa2ed02e49acfc66397261e0b989ebf4e17 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 13:28:14 +0200 Subject: [PATCH 046/710] Option to link notification clock to DeskClock app instead of Date&Time --- res/values/strings.xml | 4 ++ res/xml/gravitybox.xml | 6 +++ .../gm2/gravitybox/GravityBoxSettings.java | 5 ++ .../ceco/gm2/gravitybox/ModCenterClock.java | 51 +++++++++++++++++++ 4 files changed, 66 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index ea19b4f899..21d67c4c0d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -467,4 +467,8 @@ No custom app assigned! Custom app not found! + + Link to DeskClock + Links notification panel clock to DeskClock app instead of Date&Time settings + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index aa9340f15c..268d3dfacc 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -329,6 +329,12 @@ android:title="@string/pref_clock_hide_title" android:defaultValue="false" /> + + 16 ? @@ -147,6 +152,15 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { if (panelHolder != null) { mClockExpanded = (TextView) panelHolder.findViewById( liparam.res.getIdentifier("clock", "id", PACKAGE_NAME)); + if (mClockExpanded != null && Build.VERSION.SDK_INT < 17) { + mClockExpanded.setClickable(true); + mClockExpanded.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + launchDeskClock(); + } + }); + } } // inject new clock layout @@ -277,6 +291,25 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); + if (Build.VERSION.SDK_INT > 16) { + XposedHelpers.findAndHookMethod(phoneStatusBarClass, "startActivityDismissingKeyguard", + Intent.class, boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if (!mClockLink) return; + + Intent i = (Intent) param.args[0]; + if (i == null || i.getAction() == null) return; + + if (i.getAction().equals(Intent.ACTION_QUICK_CLOCK)) { + i.setAction(Intent.ACTION_MAIN); + i.addCategory(Intent.CATEGORY_LAUNCHER); + i.setPackage("com.android.deskclock"); + } + } + }); + } + XposedHelpers.findAndHookMethod(tickerClass, "tickerStarting", new XC_MethodHook() { @Override @@ -349,4 +382,22 @@ private static void setClockPosition(boolean center) { mClockCentered = center; } + + private static void launchDeskClock() { + if (mContext == null || !mClockLink) return; + + try { + Intent i = new Intent(Intent.ACTION_MAIN); + i.addCategory(Intent.CATEGORY_LAUNCHER); + i.setPackage("com.android.deskclock"); + i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + mContext.startActivity(i); + if (mPhoneStatusBar != null) { + XposedHelpers.callMethod(mPhoneStatusBar, Build.VERSION.SDK_INT > 16 ? + "animateCollapsePanels" : "animateCollapse"); + } + } catch (Throwable t) { + log(t.getMessage()); + } + } } \ No newline at end of file From e9c8b66f4a66f3a412aec0dd8af73f099be0a608 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 13:56:36 +0200 Subject: [PATCH 047/710] Added Indonesian translations (thanks to awaaas) --- res/values-in/strings.xml | 470 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 470 insertions(+) create mode 100644 res/values-in/strings.xml diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml new file mode 100644 index 0000000000..9df3083a41 --- /dev/null +++ b/res/values-in/strings.xml @@ -0,0 +1,470 @@ + + + + GravityBox + + Gaya indikator Baterai + Indikator baterai bawaan + Baterai lingkar + Baterai lingkar 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 + + + Kotak-kotak QuickSettings Statusbar + Membolehkan kotak-kotak QuickSettings di statusbar untuk di tampil/sembunyikan + Profil pengguna + Mode pesawat terbang + Status baterai + Wi-Fi + Bluetooth + GPS + 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 + + + Pilihan Warna + Tekan pada warna untuk memilih + + + Warna latar Statusbar + Membolehkan untuk mengeset warna latar dan transparansi 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 + Donasilah kepada saya jika anda pikir aplikasi ini pantas! Dan juga pertimbangkan untuk donasi ke rovo89 untuk Xposed framework-nya yang hebat. + + + %s anda akan reboot + %s anda akan reboot ke recovery + + + 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) + Nilai dari jarak antara: 10 – 80 + + + Level Autobrightness + Membolehkan anda untuk men-set nilai level cahaya ambien dan cahaya latar LCD yang terkai + Level + Lux max + Kecerahan (10 – 255) + Nomor yang dimasukkan tidak valid + Tidak direkomendasikan untuk men-set nilai kecerahan di bawah 10 + 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 + + + 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 + Aplikasi 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 + + + Matikan getar ketika panggilan tersambung + Mematikan getaran yang muncul ketika panggilan tersambung + + + 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 + + + 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 + Tampilkan tombol pencarian + 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 fisik + Matikan tombol MENU, BACK, HOME ketika kontrol Pie diaktifkan. Aksi tombol akan tetap bekerja. (untuk perangkat dengan tombol fisik) + + + 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 + + + Selalu tampilkan tombol menu + + + Mode ringtone + + + Setting jam + + + Sembunyikan AM/PM + + + Sembunyikan jam + + + + Besar pemicu + + Manajemen transparansi + Transparansi statusbar untuk launcher + Transparansi statusbar untuk lockscreen + Transparansi Navbar untuk launcher + Transparansi 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 + Tidak ada aplikasi kustom yang ditetapkan! + Aplikasi kustom tidak ditemukan! + + From 0f76f0cd4945f51d863d4e15427b9f9e98c5a965 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 14:54:48 +0200 Subject: [PATCH 048/710] Identify MT6575 platform as MTK device --- src/com/ceco/gm2/gravitybox/Utils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index adfa754b0e..6545508532 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -59,7 +59,8 @@ public static enum MethodState { } public static boolean isMtkDevice() { - return (Build.HARDWARE.toLowerCase().contains("mt6577") + return (Build.HARDWARE.toLowerCase().contains("mt6575") + || Build.HARDWARE.toLowerCase().contains("mt6577") || Build.HARDWARE.toLowerCase().contains("mt6589") || Build.HARDWARE.toLowerCase().contains("mt8389")); } From dee81a5d7e84eb8156d78633f517b10ca5b5f5f7 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 15:30:54 +0200 Subject: [PATCH 049/710] QuickSettings: added Volume Tile --- res/drawable-hdpi/ic_qs_volume.png | Bin 0 -> 3114 bytes res/drawable-xhdpi/ic_qs_volume.png | Bin 0 -> 3150 bytes res/layout/quick_settings_tile_volume.xml | 23 ++++++++ res/values/arrays.xml | 4 ++ res/values/strings.xml | 1 + .../ceco/gm2/gravitybox/ModQuickSettings.java | 8 ++- .../gravitybox/quicksettings/VolumeTile.java | 53 ++++++++++++++++++ 7 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 res/drawable-hdpi/ic_qs_volume.png create mode 100644 res/drawable-xhdpi/ic_qs_volume.png create mode 100644 res/layout/quick_settings_tile_volume.xml create mode 100644 src/com/ceco/gm2/gravitybox/quicksettings/VolumeTile.java diff --git a/res/drawable-hdpi/ic_qs_volume.png b/res/drawable-hdpi/ic_qs_volume.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e9c2f222fc5f8ec8a4268e29618d2398404961 GIT binary patch literal 3114 zcmV+_4At|AP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00041NkllLIk^q&fXb>{pjxEvwxlEQ0UWIQ9=HQe$@YMS$uV;K44gs;=co-y0Z3W_%Md~X ztWEqA@Ek&D2WO!KVtZq;y#gMACTj9_N&IX8=Jw9SFaNX-%;@$w3)w{Ck7Kw!X(}P9 zj&AE)h#$QNBvlq7z2KLd=Rza8y|w9Y+GK7-x97=5uUsYfbGUu=AeK~_a7=g-;=cuu zw2|}*yr(4kVhCAm_k*%Zen%F&ZK5|>Z7C%^F5A6L^!T}s0-;(;V%0bfSz_Y3c zXny#zHo7*y6mpAiv_M<KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004bNkl{qt@BGyQdGKT#_ymr?33vyp;KcR`cq_~D+<7*wDPU#?U_WHL zEX#Iu7g)LNwiB+1zaPM{Yx~D-aD~C^IJaxy0q6&v9DX$bqV4OVw!P^=XhpW?ISDQ> zbRKQ*Zf$$f0L-k4wwr(L1r`$i8F+Hj4VqaMjo-f;yyM({8Q8+o17K!F=Xkoj`+ym3 z*D-jp=nIjVY}dVJBwYY&vOU)bD1g_sHdUKH7;j?hnM8$&q5BsNXBPlQu9cFiFu``x z6+GD<1P~WA7q-Vnz#hk?m!kq800JNYo-4(-!v`~KCw8$(0w{j-aHbC?v + + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 756dfb389a..d624195f87 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -66,6 +66,7 @@ @string/qs_tile_network_mode @string/qs_tile_data_usage @string/qs_tile_audio + @string/qs_tile_volume @string/qs_tile_brightness @string/qs_tile_screen_timeout @string/qs_tile_autorotation @@ -89,6 +90,7 @@ network_mode_tileview rssi_textview audio_profile_textview + volume_tileview brightness_textview timeout_textview auto_rotate_textview @@ -113,6 +115,7 @@ @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 @@ -135,6 +138,7 @@ bluetooth_textview gps_tileview ringer_mode_tileview + volume_tileview network_mode_tileview sync_tileview wifi_ap_tileview diff --git a/res/values/strings.xml b/res/values/strings.xml index 21d67c4c0d..b6cc9fba78 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -97,6 +97,7 @@ Sleep Quick Record Settings + Volume Color Picker diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index 195fe0fc37..7dcdf67ac1 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -22,6 +22,7 @@ import com.ceco.gm2.gravitybox.quicksettings.TorchTile; import com.ceco.gm2.gravitybox.quicksettings.GravityBoxTile; import com.ceco.gm2.gravitybox.quicksettings.SyncTile; +import com.ceco.gm2.gravitybox.quicksettings.VolumeTile; import com.ceco.gm2.gravitybox.quicksettings.WifiApTile; import android.content.BroadcastReceiver; @@ -109,7 +110,8 @@ public class ModQuickSettings { R.id.network_mode_tileview, R.id.sleep_tileview, R.id.quickapp_tileview, - R.id.quickrecord_tileview + R.id.quickrecord_tileview, + R.id.volume_tileview )); if (!Utils.isMtkDevice()) { mCustomGbTileKeys.add(R.id.gps_tileview); @@ -487,6 +489,10 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mTiles.add(rmTile); } + VolumeTile volTile = new VolumeTile(mContext, mGbContext, mStatusBar, mPanelBar); + volTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(volTile); + NetworkModeTile nmTile = new NetworkModeTile(mContext, mGbContext, mStatusBar, mPanelBar); nmTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(nmTile); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/VolumeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/VolumeTile.java new file mode 100644 index 0000000000..4a9d1440c5 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/quicksettings/VolumeTile.java @@ -0,0 +1,53 @@ +package com.ceco.gm2.gravitybox.quicksettings; + +import com.ceco.gm2.gravitybox.R; + +import de.robv.android.xposed.XposedHelpers; + +import android.content.Context; +import android.media.AudioManager; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +public class VolumeTile extends AQuickSettingsTile { + + public VolumeTile(Context context, Context gbContext, Object statusBar, Object panelBar) { + super(context, gbContext, statusBar, panelBar); + + mOnClick = new View.OnClickListener() { + + @Override + public void onClick(View v) { + XposedHelpers.callMethod(mStatusBar, "animateCollapsePanels"); + AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + am.adjustVolume(AudioManager.ADJUST_SAME, AudioManager.FLAG_SHOW_UI); + } + }; + + mOnLongClick = new View.OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + startActivity(android.provider.Settings.ACTION_SOUND_SETTINGS); + return true; + } + }; + } + + @Override + protected void onTileCreate() { + mDrawableId = R.drawable.ic_qs_volume; + mLabel = mGbContext.getString(R.string.qs_tile_volume); + + LayoutInflater inflater = LayoutInflater.from(mGbContext); + inflater.inflate(R.layout.quick_settings_tile_volume, mTile); + } + + @Override + protected synchronized void updateTile() { + TextView tv = (TextView) mTile.findViewById(R.id.volume_tileview); + tv.setText(mLabel); + tv.setCompoundDrawablesWithIntrinsicBounds(0, mDrawableId, 0, 0); + } +} \ No newline at end of file From 22691db96d29a2c06c5f27b7857fcaa3f7408f04 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 22:01:39 +0200 Subject: [PATCH 050/710] Implemented SystemPropertyProvider GB Settings need some system properties to adjust preferences. Since GB Settings are running in user context it is necessary to obtain properties from provider running in system context. Flow: 1) GB Settings send broadcast at startup asking for system properties 2) SystemPropertyProvider handles broadcast and packs system properties into bundle which is then sent back to sender 3) GB Settings receive bundle and create local mSystemProperties structure from bundle containing system properties. These can then be used during GB settings lifetime There's a timeout implemented which handles a special case (e.g. GB is not set as active module in Xposed Installer thus SystemPropertyProvider is not available to handle intent). In this case, attempt to read system properties is aborted after 5 seconds and GB settings finished showing dialog with information to the user. --- res/values/strings.xml | 4 + src/com/ceco/gm2/gravitybox/GravityBox.java | 4 + .../gm2/gravitybox/GravityBoxSettings.java | 93 ++++++++++++++++++- .../gravitybox/SystemPropertyProvider.java | 57 ++++++++++++ 4 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java diff --git a/res/values/strings.xml b/res/values/strings.xml index b6cc9fba78..ff95f2f06f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -472,4 +472,8 @@ Link to DeskClock Links notification panel clock to DeskClock app instead of Date&Time settings + + Waiting for response from GravityBox system framework… + GravityBox system framework not responding. Exiting. + diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index e512d2b68f..60ccd57016 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -87,6 +87,10 @@ public void handleInitPackageResources(InitPackageResourcesParam resparam) throw @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)) { diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 128b303dbd..d3c9d1bf8e 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -14,6 +14,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.MultiSelectListPreference; @@ -22,11 +23,14 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.provider.MediaStore; +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; @@ -43,7 +47,7 @@ import android.graphics.Rect; import net.margaritov.preference.colorpicker.ColorPickerPreference; -public class GravityBoxSettings extends Activity { +public class GravityBoxSettings extends Activity implements GravityBoxResultReceiver.Receiver { public static final String PREF_KEY_QUICK_SETTINGS = "pref_quick_settings"; public static final String PREF_KEY_QUICK_SETTINGS_TILES_PER_ROW = "pref_qs_tiles_per_row"; public static final String PREF_KEY_QUICK_SETTINGS_AUTOSWITCH = "pref_auto_switch_qs"; @@ -299,6 +303,40 @@ public class GravityBoxSettings extends Activity { PREF_KEY_BRIGHTNESS_MASTER_SWITCH )); + private static final class SystemProperties { + public boolean hasGeminiSupport; + + public SystemProperties(Bundle data) { + if (data.containsKey("hasGeminiSupport")) { + hasGeminiSupport = data.getBoolean("hasGeminiSupport"); + } + } + } + + private GravityBoxResultReceiver mReceiver; + private Handler mHandler; + private SystemProperties mSystemProperties; + 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 @@ -309,8 +347,57 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (savedInstanceState == null) - getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); + 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) { + mHandler.removeCallbacks(mGetSystemPropertiesTimeout); + dismissProgressDialog(); + Log.d("GravityBox", "result received: resultCode=" + resultCode); + if (resultCode == SystemPropertyProvider.RESULT_SYSTEM_PROPERTIES) { + mSystemProperties = new SystemProperties(resultData); + } + getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); + } + + 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 { diff --git a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java new file mode 100644 index 0000000000..2ece5c64b6 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java @@ -0,0 +1,57 @@ +package com.ceco.gm2.gravitybox; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.ResultReceiver; +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; + +public class SystemPropertyProvider { + private static final String TAG = "SystemPropertyProvider"; + public static final String PACKAGE_NAME = "com.android.systemui"; + + public static final String ACTION_GET_SYSTEM_PROPERTIES = + "gravitybox.intent.action.ACTION_GET_SYSTEM_PROPERTIES"; + public static final int RESULT_SYSTEM_PROPERTIES = 1025; + + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + + public static void init(final ClassLoader classLoader) { + try { + final Class classSystemUIService = XposedHelpers.findClass( + "com.android.systemui.SystemUIService", classLoader); + XposedHelpers.findAndHookMethod(classSystemUIService, "onCreate", new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + Context context = (Context) param.thisObject; + if (context != null) { + log("SystemUIService created. Registering BroadcastReceiver"); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(ACTION_GET_SYSTEM_PROPERTIES); + context.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + log("Broadcast received: " + intent.toString()); + if (intent.getAction().equals(ACTION_GET_SYSTEM_PROPERTIES) + && intent.hasExtra("receiver")) { + ResultReceiver receiver = intent.getParcelableExtra("receiver"); + Bundle data = new Bundle(); + data.putBoolean("hasGeminiSupport", Utils.hasGeminiSupport()); + receiver.send(RESULT_SYSTEM_PROPERTIES, data); + } + } + }, intentFilter); + } + } + }); + } catch (Throwable t) { + XposedBridge.log(t); + } + } +} From d0ea121ffadf47ac17566d891381ad51da890bc5 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 5 Sep 2013 23:09:12 +0200 Subject: [PATCH 051/710] Implemented getDeviceCharacteristics --- .../ceco/gm2/gravitybox/GravityBoxSettings.java | 4 ++++ .../gm2/gravitybox/SystemPropertyProvider.java | 1 + src/com/ceco/gm2/gravitybox/Utils.java | 15 +++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index d3c9d1bf8e..4ed8297bda 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -305,11 +305,15 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece private static final class SystemProperties { public boolean hasGeminiSupport; + public String deviceCharacteristics; public SystemProperties(Bundle data) { if (data.containsKey("hasGeminiSupport")) { hasGeminiSupport = data.getBoolean("hasGeminiSupport"); } + if (data.containsKey("deviceCharacteristics")) { + deviceCharacteristics = data.getString("deviceCharacteristics"); + } } } diff --git a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java index 2ece5c64b6..5017f378a5 100644 --- a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java +++ b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java @@ -43,6 +43,7 @@ public void onReceive(Context context, Intent intent) { ResultReceiver receiver = intent.getParcelableExtra("receiver"); Bundle data = new Bundle(); data.putBoolean("hasGeminiSupport", Utils.hasGeminiSupport()); + data.putString("deviceCharacteristics", Utils.getDeviceCharacteristics()); receiver.send(RESULT_SYSTEM_PROPERTIES, data); } } diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 6545508532..176a0b26a9 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -18,6 +18,7 @@ public class Utils { // Device type reference private static int mDeviceType = -1; private static Boolean mHasGeminiSupport = null; + private static String mDeviceCharacteristics = null; private static int getScreenType(Context con) { if (mDeviceType == -1) { @@ -79,4 +80,18 @@ public static boolean hasGeminiSupport() { return false; } } + + public static String getDeviceCharacteristics() { + if (mDeviceCharacteristics != null) return mDeviceCharacteristics; + + try { + Class classSystemProperties = findClass("android.os.SystemProperties", null); + mDeviceCharacteristics = (String) callStaticMethod(classSystemProperties, + "get", "ro.build.characteristics"); + return mDeviceCharacteristics; + } catch (Throwable t) { + XposedBridge.log("Utils: getDeviceCharacteristics failed: " + t.getMessage()); + return null; + } + } } From 442bddabadda3dd1ff8a5b66e583eb13c84f7d24 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Thu, 5 Sep 2013 22:58:52 +0100 Subject: [PATCH 052/710] Utils: small optimization --- src/com/ceco/gm2/gravitybox/Utils.java | 115 +++++++++++++++++++++---- 1 file changed, 97 insertions(+), 18 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 176a0b26a9..46dcfed28b 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -69,29 +69,108 @@ public static boolean isMtkDevice() { public static boolean hasGeminiSupport() { if (mHasGeminiSupport != null) return mHasGeminiSupport; - try { - Class classSystemProperties = findClass("android.os.SystemProperties", null); - String geminiSupport = (String) callStaticMethod(classSystemProperties, - "get", "ro.mediatek.gemini_support"); - mHasGeminiSupport = "true".equals(geminiSupport); - return mHasGeminiSupport; - } catch (Throwable t) { - XposedBridge.log("Utils: hasGeminiSupport check failed. Assuming device has no Gemini support"); - return false; - } + mHasGeminiSupport = SystemProp.getBoolean("ro.mediatek.gemini_support", false); + return mHasGeminiSupport; } public static String getDeviceCharacteristics() { if (mDeviceCharacteristics != null) return mDeviceCharacteristics; - try { - Class classSystemProperties = findClass("android.os.SystemProperties", null); - mDeviceCharacteristics = (String) callStaticMethod(classSystemProperties, - "get", "ro.build.characteristics"); - return mDeviceCharacteristics; - } catch (Throwable t) { - XposedBridge.log("Utils: getDeviceCharacteristics failed: " + t.getMessage()); - return null; + mDeviceCharacteristics = SystemProp.get("ro.build.characteristics"); + return mDeviceCharacteristics; + } + + static class SystemProp extends Utils { + + private SystemProp() { + + } + + // Get the value for the given key + // @param key: key to lookup + // @return null if the key isn't found + public static String get(String key) { + String ret; + + try { + Class classSystemProperties = findClass("android.os.SystemProperties", null); + ret = (String) callStaticMethod(classSystemProperties, "get", key); + } catch (Throwable t) { + XposedBridge.log("Utils: SystemProp.get failed: " + t.getMessage()); + ret = null; + } + return ret; + } + + // Get the value for the given key + // @param key: key to lookup + // @param def: default value to return + // @return if the key isn't found, return def if it isn't null, or an empty string otherwise + public static String get(String key, String def) { + String ret = def; + + try { + Class classSystemProperties = findClass("android.os.SystemProperties", null); + ret = (String) callStaticMethod(classSystemProperties, "get", key, def); + } catch (Throwable t) { + XposedBridge.log("Utils: SystemProp.get failed: " + t.getMessage()); + ret = def; + } + return ret; + } + + // Get the value for the given key, and return as an integer + // @param key: key to lookup + // @param def: default value to return + // @return the key parsed as an integer, or def if the key isn't found or cannot be parsed + public static Integer getInt(String key, Integer def) { + Integer ret = def; + + try { + Class classSystemProperties = findClass("android.os.SystemProperties", null); + ret = (Integer) callStaticMethod(classSystemProperties, "getInt", key, def); + } catch (Throwable t) { + XposedBridge.log("Utils: SystemProp.getInt failed: " + t.getMessage()); + ret = def; + } + return ret; + } + + // Get the value for the given key, and return as a long + // @param key: key to lookup + // @param def: default value to return + // @return the key parsed as a long, or def if the key isn't found or cannot be parsed + public static Long getLong(String key, Long def) { + Long ret = def; + + try { + Class classSystemProperties = findClass("android.os.SystemProperties", null); + ret = (Long) callStaticMethod(classSystemProperties, "getLong", key, def); + } catch (Throwable t) { + XposedBridge.log("Utils: SystemProp.getLong failed: " + t.getMessage()); + ret = def; + } + return ret; + } + + // Get the value (case insensitive) for the given key, returned as a boolean + // Values 'n', 'no', '0', 'false' or 'off' are considered false + // Values 'y', 'yes', '1', 'true' or 'on' are considered true + // If the key does not exist, or has any other value, then the default result is returned + // @param key: key to lookup + // @param def: default value to return + // @return the key parsed as a boolean, or def if the key isn't found or cannot be parsed + public static Boolean getBoolean(String key, boolean def) { + Boolean ret = def; + + try { + Class classSystemProperties = findClass("android.os.SystemProperties", null); + ret = (Boolean) callStaticMethod(classSystemProperties, "getBoolean", key, def); + } catch (Throwable t) { + XposedBridge.log("Utils: SystemProp.getBoolean failed: " + t.getMessage()); + ret = def; + } + return ret; } } } From 00aaa65082b9720fc68683ed400d1a37ee533f1b Mon Sep 17 00:00:00 2001 From: ch-vox Date: Fri, 6 Sep 2013 03:10:38 +0200 Subject: [PATCH 053/710] Updated French Translation --- res/values-fr/strings.xml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index dd96da523a..255c7e8d05 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -97,7 +97,8 @@ Veille Enregistrement rapide Réglages - + Volume + Sélecteur de couleur Sélectionner votre couleur pour l\'appliquer @@ -455,4 +456,24 @@ 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 + Définir l\'appli personnalisée + Aucune appli personnalisée attribuée ! + Appli personnalisée introuvable ! + + + Lien vers DeskClock + Crée un lien du panneau de notification vers l\'appli DeskClock au lieu du paramètre 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. Sortie + From c06dda5205086a5e01b9da7c13981063ba7afd51 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Fri, 6 Sep 2013 03:21:38 +0200 Subject: [PATCH 054/710] Updated French Translation --- res/values-fr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 255c7e8d05..c07b93559b 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -469,8 +469,8 @@ Appli personnalisée introuvable ! - Lien vers DeskClock - Crée un lien du panneau de notification vers l\'appli DeskClock au lieu du paramètre Date et Heure + Lien vers Horloge + Crée un lien du panneau de notification vers l\'appli Horloge au lieu des paramètres Date et Heure Attente d\'une réponse de la branche système… de GravityBox From 47a7283b500fa5fbf0dd1de9d98995613f455f9e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 6 Sep 2013 08:03:53 +0200 Subject: [PATCH 055/710] Updated Hungarian translations (thanks to benjoe1) --- res/values-hu/strings.xml | 53 +++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 2a5ed5b14d..b1591054f5 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -1,4 +1,4 @@ - + GravityBox @@ -26,19 +26,20 @@ SIM 1 foglalat automatikus elrejtése SIM 2 foglalat automatikus elrejtése Figyelmeztetés letiltása - \"SIM nem található"\ figyelmeztetés letiltása + "SIM nem található" figyelmeztetés letiltása Haladó kikapcsoló menü 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ával Letiltva Hangerő fel/le a kurzort balra/jobbra mozgatja Hangerő fel/le a kurzort jobbra/balra mozgatja - Töröl minden új feladatot + Töröl minden új feladatot 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) @@ -130,9 +131,10 @@ Adományozzon a részemre, ha úgy gondolja, hogy ez a program megéri az árát! Valamint fontolja meg, hogy adományozzon rovo89-nek is a kitűnő Xposed framework-ért. - A %s újra fog indulni - A %s Recovery módba fog újraindulni - + A %s újra fog indulni. + A %s Recovery módba fog újraindulni. + A %s Bootloader módba fog újraindulni. + CRT kikapcsolási effekt Animáció engedélyezése, ami a régi CRT kikapcsolási effektet szimulálja a képernyő kikapcsolásakor @@ -168,7 +170,7 @@ Különböző energiával kapcsolatos módosításokat tartalmaz - Letiltja a LED villogást + Letiltja a LED villogást Kikapcsolja a zavaró LED villogást amikor az akkumlátorszint alacsony és nincs töltés @@ -217,7 +219,7 @@ Több zene hangerő léptetés - Több hangerő léptetést ad hozzá zene folyam esetén (újraindítást szükséges) + Több hangerő léptetést eredményez zene folyam esetén (újraindítás szükséges) Biztonságos fejhallgató média hangerő @@ -240,7 +242,7 @@ 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 bezáráshoz. + 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. Alkalmazás bezárva @@ -271,18 +273,18 @@ 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. Portré módra vonatkozik. + 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 beállítási lehetőségével + 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 Csengőhang és figyelmeztető hangok értékei - Amikor ki van kapcsolva, a csengőhang és figyelmeztető hangok értékei egymástól függetlenül állíthatóak + 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 @@ -296,7 +298,7 @@ Bal - Letiltja a hangerő gombbal történő ébresztést + 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 @@ -325,8 +327,8 @@ Szín kitöltése Egyéni kép Háttérszín beállítása - Portré kép beállítása - Tájkép 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 mód Átfedés @@ -348,7 +350,7 @@ Pie Vezérlők - Pie Vezérlők engedélyezve + Pie Vezérlők engedélyezése Keresés gomb mutatása Navigációs gomb méret Kioldógomb pozíció @@ -383,10 +385,10 @@ Kikapcsolva - Bal fent - Jobb fent - Bal lent - Jobb lent + Balra fent + Jobbra fent + Balra lent + Jobbra lent Felső szegély beállítása @@ -444,4 +446,13 @@ 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ásának 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 ez a funkciót. (újraindítás szükséges) + From 8a80be2cb93cbfb996dbdd87933c55e832e67273 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 6 Sep 2013 08:16:15 +0200 Subject: [PATCH 056/710] Updated Spanish translations (thanks to klander) --- res/values-es/strings.xml | 236 ++++++++++++++++++++++++++++---------- 1 file changed, 175 insertions(+), 61 deletions(-) diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 403c35a8da..824633812d 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -1,75 +1,52 @@ - - - + + GravityBox - Indicador de batería Indicador por defecto Circular con porcentaje Solo texto grande Ninguno - Teclas de volumen para cambiar la pista Pulsación larga de las teclas de volumen cambia la pista, mientras la pantalla está apagada - Alarma de batería baja Notificación y sonido Solo notificación Solo sonido Desactivado - Los cambios se aplicarán después de reiniciar - Ocultar iconos de señal Ocultar iconos de señal para las ranuras SIM cuando no hay SIM insertada, desactiva las notificaciones \"SIM no insertada\" Ocultar ranura SIM 1 Ocultar ranura SIM 2 Desactivar notificaciones Desactivar las notificaciones \"SIM no insertada\" - Menú avanzado de apagado Habilita el menú avanzado de apagado, con la opción de reiniciar en modo recuperación - Modo recuperación - + Modo recuperación Control del cursor con las teclas de volumen Controlar el cursor con las teclas de volumen, en campos de texto Deshabilitado El cursor se mueve izquierda/derecha El 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 Habilitar en caso de experimentar errores al acceder a la configuración de Fecha y Hora (requiere reiniciar) - Parche para el ID de llamada Habilitar 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 mensajes Habilitar 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 calendario Habilitar en caso de experimentar encendidos esporádicos de la pantalla (requiere reiniciar) - Importante - Fotografía a pantalla completa del contacto Muestra la fotografía del contacto a pantalla completa en la pantalla de llamada entrante - - Sincronización activada Sincronización desactivada Wi-Fi AP activado Wi-Fi AP desactivado - - - Ajuste de los íconos del cajón" + Ajuste de los íconos del cajón Permite seleccionar los íconos que se muestran en el cajón Perfil de usuario Airplane mode @@ -86,56 +63,34 @@ Sincronización Punto de acceso Wi-Fi GravityBox - - Selección de color Toque en el color para seleccionar - - Color de fondo de la barra de estado Permite seleccionar el color de la barra de estado y su transparencia - - Parche para las preferencias de habla Habilita la busqueda por voz y los ajustes de texto-a-voz&en entrada. (requiere reiniciar) - - Opciones avanzadas de desarrolador Habilita las opciones avanzadas de desarrolador (requiere reinicio) - - Personalización de la barra de estado Personalizaciones varias de la barra de estado Personalizaciones varias Personalizaciones que no tienen cabida en otras categorias Parches generales - Parches para MTK6589. Usar solo en caso necesario. - - + Parches para MTK6589. Usar solo en caso necesario. Acerca de Programado por C3C076@XDA. Toque para visitar el foro oficial. Xposed framework Programado por rovo89@XDA. Toque para visitar el foro oficial. Donar Hazme 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 %s se reiniciará. - El %s se reiniciará en modo de restauración. - - + El %s se reiniciará + El %s se reiniciaré en modo de restauración Efecto de CRT al apagar la pantalla Habilita la animación de apagado de pantalla que simula una pantalla antigua - - Modo ingeniero Accede al codo ingeniero - - Timbre Dual SIM Permite 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 Color de fondo de la pantalla de bloqueo @@ -152,16 +107,175 @@ Otro Maximizar Widgets Cuando 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 - - Deshabilitar el parpadeo del LED de notificaciones Deshabilita el LED de notificaciones cuando queda poca carga en la batería y no se está cargando - - + Habilita el botón para borrar todas las tareas recientes a la vez + Personalizaciones + Parches - Activar solo en caso necesario + Mostrar ajustes + 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) + Valor de intervalo: 10 – 80 + Niveles de brillo automático + Permite ajustar los niveles de luz ambiental y los valores de retroiluminación LCD correspondientes + Nivel + Lux max + Brillo (10 – 255) + Número especificado no es válido + No se recomienda configurar el brillo por debajo de 10 + 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) + Salva el volumen de auriculares + Activa y desactiva la función de volumen seguro en auriculares + Desactivar LED de carga + Desactiva el LED durante la carga + Acciones hardware keys + Permite configurar acciones personalizadas en las teclas de hardware + Menú tecla larga pulsación + Menú tecla de acción doble toque + Acccion larga pulsación en 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 larga pulsación + 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 Menú tecla de acción doble toque. Define cómo debe ser aprovechado teclas de acceso rápido para activar la doble pulsación + Aplicación 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 llamar + Desactivar la vibración en llamada conectada + Desactiva la vibración que se activa cuando se conecta llamada + Software reboot + 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 hay notificaciones + Desplegable Rápido + El borde de la barra de estado baja en configuración Rápida + Apagadof + Derecha + Izquierda + Desactivar despertar con volumen + Para dispositivos como Jiayu G3, G4, donde las teclas de volumen a su vez en 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 Cajones de Notificación + Fondo del cajón de notificación + Fondo por defecto + Color de relleno + Imagen personalizada + Establecer color de fondo + Establecer imagen retrato + Ajuste la imagen del 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 + habilitados controles Pie + Mostrar el botón de búsqueda + 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 nervioso + Sustituye fondo Holo estándar interpolado para suprimir bandas de color (requiere reinicio) + Deshabilitar teclas de hardware + Deshabilitados botones MENU, BACK, HOME mientras que los controles PIE están habilitados. HW keys actions will still work. (for devices having HW keys) + Usar Dark theme Holo + Switches GB UI utilizar Holo Dark theme en vez de Holo Light + Off + 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 app3 + GPS encendido + GPS apagadof + 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 - - + \ No newline at end of file From e5d2a787dbfa8c00223358c9f8ff313734386138 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 6 Sep 2013 08:18:32 +0200 Subject: [PATCH 057/710] Don't allow translations of config strings --- res/values/config.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values/config.xml b/res/values/config.xml index 18fb1aba93..ccbc27baf7 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -1,6 +1,6 @@ - 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&currency_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&currency_code=EUR&bn=PP%%2dDonationsBF%%3abtn_donateCC_LG\%2egif%%3aNonHosted From 1f2234e8352f2217812aa83ce70d1f558006caa4 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 6 Sep 2013 10:51:04 +0200 Subject: [PATCH 058/710] Fixed accessibility of SystemProperties field from Prefs fragment --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 4ed8297bda..0f57bf2c61 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -319,7 +319,7 @@ public SystemProperties(Bundle data) { private GravityBoxResultReceiver mReceiver; private Handler mHandler; - private SystemProperties mSystemProperties; + private static SystemProperties sSystemProperties; private Dialog mAlertDialog; private ProgressDialog mProgressDialog; private Runnable mGetSystemPropertiesTimeout = new Runnable() { @@ -385,9 +385,11 @@ public void onReceiveResult(int resultCode, Bundle resultData) { dismissProgressDialog(); Log.d("GravityBox", "result received: resultCode=" + resultCode); if (resultCode == SystemPropertyProvider.RESULT_SYSTEM_PROPERTIES) { - mSystemProperties = new SystemProperties(resultData); + sSystemProperties = new SystemProperties(resultData); + getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); + } else { + finish(); } - getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); } private void dismissProgressDialog() { From 8daddd702d1df246978658bcc7270b616d5a5781 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 18:04:07 +0100 Subject: [PATCH 059/710] Remove Phone specific (complete phone category) preferences on Tablet devices --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 0f57bf2c61..79cfc78caf 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -594,6 +594,7 @@ public void onCreate(Bundle savedInstanceState) { // Remove Phone specific preferences on Tablet devices if (Utils.isTablet(getActivity())) { + getPreferenceScreen().removePreference(mPrefCatPhone); mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); } From e3603fdc23d4a8b241d902d3aa3c6636fdfcf3f4 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 18:18:49 +0100 Subject: [PATCH 060/710] Remove Gemini specific preferences for non-Gemini MTK devices --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 79cfc78caf..1514941c67 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -608,6 +608,12 @@ public void onCreate(Bundle savedInstanceState) { mQuickSettings.setEntryValues(R.array.qs_tile_aosp_values); mPrefCatPhone.removePreference(mPrefRoamingWarningDisable); } else { + // Remove Gemini specific preferences for non-Gemini MTK devices + if (!sSystemProperties.hasGeminiSupport) { + mPrefCatStatusbar.removePreference(mSignalIconAutohide); + mPrefCatStatusbar.removePreference(mPrefDisableRoamingIndicators); + } + // Remove preferences not needed for ZTE V987 if (Build.MODEL.contains("V987") && Build.DISPLAY.contains("ZTE-CN-9B18D-P188F04")) { mPrefCatFixes.removePreference(mPrefFixDateTimeCrash); From c36bdcbde6771bf6565b628c717ec42de4b76ab9 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 18:32:10 +0100 Subject: [PATCH 061/710] ModAudioSettings: handle ClassNotFoundException --- src/com/ceco/gm2/gravitybox/ModAudioSettings.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java index 8fa4fd3d30..d140c60e5b 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java @@ -27,7 +27,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) { + XposedBridge.log("ModAudioSettings: classVolumizer doesn't exist, exiting..."); + return; + } XposedHelpers.findAndHookMethod(classVolumePref, "onBindDialogView", View.class, new XC_MethodHook() { From 46332031fa591089fb63e718bce830e6b00af434 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 18:52:03 +0100 Subject: [PATCH 062/710] Only load ModSignalIconHide if device has Gemini support --- src/com/ceco/gm2/gravitybox/GravityBox.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index 60ccd57016..be2eb9177d 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -34,7 +34,9 @@ public void initZygote(StartupParam startupParam) throws Throwable { // 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); @@ -93,7 +95,8 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { // MTK Specific if (Utils.isMtkDevice()) { - if (lpparam.packageName.equals(ModSignalIconHide.PACKAGE_NAME)) { + if (Utils.hasGeminiSupport() && + lpparam.packageName.equals(ModSignalIconHide.PACKAGE_NAME)) { ModSignalIconHide.init(prefs, lpparam.classLoader); } From a483c924e00269d469d38c8d1c2273cb7e7fc800 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 22:23:13 +0100 Subject: [PATCH 063/710] Device type check UI related methods renamed --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 4 ++-- src/com/ceco/gm2/gravitybox/ModRebootMenu.java | 6 +++--- src/com/ceco/gm2/gravitybox/Utils.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 1514941c67..73c62e22ee 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -593,7 +593,7 @@ public void onCreate(Bundle savedInstanceState) { mPrefSafeMediaVolume = (CheckBoxPreference) findPreference(PREF_KEY_SAFE_MEDIA_VOLUME); // Remove Phone specific preferences on Tablet devices - if (Utils.isTablet(getActivity())) { + if (Utils.isTabletUI(getActivity())) { getPreferenceScreen().removePreference(mPrefCatPhone); mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); @@ -1110,7 +1110,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; diff --git a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index 7319e6a0c1..a4c4b4923e 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -95,11 +95,11 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), - gbRes.getString(Utils.isTablet(gbContext) ? R.string.device_tablet : R.string.device_phone)); + gbRes.getString(Utils.isTabletUI(gbContext) ? R.string.device_tablet : R.string.device_phone)); mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), - gbRes.getString(Utils.isTablet(gbContext) ? R.string.device_tablet : R.string.device_phone)); + gbRes.getString(Utils.isTabletUI(gbContext) ? R.string.device_tablet : R.string.device_phone)); mRebootConfirmBootloaderStr = String.format(gbRes.getString(R.string.reboot_confirm_bootloader), - gbRes.getString(Utils.isTablet(gbContext) ? R.string.device_tablet : R.string.device_phone)); + gbRes.getString(Utils.isTabletUI(gbContext) ? R.string.device_tablet : R.string.device_phone)); log("GlobalActions constructed, resources set."); } diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 46dcfed28b..b4319f8135 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -41,15 +41,15 @@ private static int getScreenType(Context con) { return mDeviceType; } - public static boolean isPhone(Context con) { + public static boolean isPhoneUI(Context con) { return getScreenType(con) == DEVICE_PHONE; } - public static boolean isHybrid(Context con) { + public static boolean isHybridUI(Context con) { return getScreenType(con) == DEVICE_HYBRID; } - public static boolean isTablet(Context con) { + public static boolean isTabletUI(Context con) { return getScreenType(con) == DEVICE_TABLET; } From cbd226f4683dcc16be8884d9fbb07731b2f0c9a3 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 23:34:23 +0100 Subject: [PATCH 064/710] Implemented new method to check if device is a tablet - Also added info regarding device type into HW info startup log --- src/com/ceco/gm2/gravitybox/GravityBox.java | 1 + src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 6 +++--- src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java | 2 +- src/com/ceco/gm2/gravitybox/Utils.java | 4 ++++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index be2eb9177d..3aa061e789 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -24,6 +24,7 @@ public void initZygote(StartupParam startupParam) throws Throwable { XposedBridge.log("Device manufacturer: " + Build.MANUFACTURER); XposedBridge.log("Device brand: " + Build.BRAND); XposedBridge.log("Device model: " + Build.MODEL); + XposedBridge.log("Device type: " + (Utils.isTablet() ? "tablet" : "phone")); XposedBridge.log("Is MTK device: " + Utils.isMtkDevice()); XposedBridge.log("Has Gemini support: " + Utils.hasGeminiSupport()); XposedBridge.log("Android SDK: " + Build.VERSION.SDK_INT); diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 73c62e22ee..93419fe8b5 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -305,14 +305,14 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece private static final class SystemProperties { public boolean hasGeminiSupport; - public String deviceCharacteristics; + public boolean isTablet; public SystemProperties(Bundle data) { if (data.containsKey("hasGeminiSupport")) { hasGeminiSupport = data.getBoolean("hasGeminiSupport"); } - if (data.containsKey("deviceCharacteristics")) { - deviceCharacteristics = data.getString("deviceCharacteristics"); + if (data.containsKey("isTablet")) { + isTablet = data.getBoolean("isTablet"); } } } diff --git a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java index 5017f378a5..b30c4d53e3 100644 --- a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java +++ b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java @@ -43,7 +43,7 @@ public void onReceive(Context context, Intent intent) { ResultReceiver receiver = intent.getParcelableExtra("receiver"); Bundle data = new Bundle(); data.putBoolean("hasGeminiSupport", Utils.hasGeminiSupport()); - data.putString("deviceCharacteristics", Utils.getDeviceCharacteristics()); + data.putBoolean("isTablet", Utils.isTablet()); receiver.send(RESULT_SYSTEM_PROPERTIES, data); } } diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index b4319f8135..62b705faff 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -53,6 +53,10 @@ public static boolean isTabletUI(Context con) { return getScreenType(con) == DEVICE_TABLET; } + public static boolean isTablet() { + return "tablet".equals(getDeviceCharacteristics()); + } + public static enum MethodState { UNKNOWN, METHOD_ENTERED, From 68607408bc1c8b556b8bc559c0aff649f674019b Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 6 Sep 2013 23:38:16 +0100 Subject: [PATCH 065/710] Use new isTablet method - Devices that were not being identified as tablets should now be --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 2 +- src/com/ceco/gm2/gravitybox/ModRebootMenu.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 93419fe8b5..131e0f7558 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -593,7 +593,7 @@ public void onCreate(Bundle savedInstanceState) { mPrefSafeMediaVolume = (CheckBoxPreference) findPreference(PREF_KEY_SAFE_MEDIA_VOLUME); // Remove Phone specific preferences on Tablet devices - if (Utils.isTabletUI(getActivity())) { + if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); diff --git a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index a4c4b4923e..f6ca35e952 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -95,11 +95,11 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), - gbRes.getString(Utils.isTabletUI(gbContext) ? R.string.device_tablet : R.string.device_phone)); + gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), - gbRes.getString(Utils.isTabletUI(gbContext) ? R.string.device_tablet : R.string.device_phone)); + gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); mRebootConfirmBootloaderStr = String.format(gbRes.getString(R.string.reboot_confirm_bootloader), - gbRes.getString(Utils.isTabletUI(gbContext) ? R.string.device_tablet : R.string.device_phone)); + gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); log("GlobalActions constructed, resources set."); } From 1b2ac6296f9458cfab138988adf83b298eca2595 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 7 Sep 2013 22:36:51 +0100 Subject: [PATCH 066/710] Utils: modified isTablet check method Device characteristics (ro.build.characteristics) field can contain more than one value --- src/com/ceco/gm2/gravitybox/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 62b705faff..a3863af936 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -54,7 +54,7 @@ public static boolean isTabletUI(Context con) { } public static boolean isTablet() { - return "tablet".equals(getDeviceCharacteristics()); + return getDeviceCharacteristics().contains("tablet"); } public static enum MethodState { From 5ec5480dd00bcb15bcb9f41c3eb2bcfaa222fcff Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 7 Sep 2013 23:42:21 +0100 Subject: [PATCH 067/710] Utils: isMtkDevice now looks for the value on an array The array contains the list of all supported MTK devices --- src/com/ceco/gm2/gravitybox/Utils.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index a3863af936..8d8ba6797c 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -5,6 +5,7 @@ import android.os.Build; import android.util.DisplayMetrics; import android.view.WindowManager; +import java.util.*; import static de.robv.android.xposed.XposedHelpers.callStaticMethod; import static de.robv.android.xposed.XposedHelpers.findClass; @@ -17,9 +18,15 @@ public class Utils { // Device type reference private static int mDeviceType = -1; + private static Boolean mIsMtkDevice = null; private static Boolean mHasGeminiSupport = null; private static String mDeviceCharacteristics = null; + // Supported MTK devices + private static final Set MTK_DEVICES = new HashSet(Arrays.asList( + new String[] {"mt6575","mt6577","mt6589","mt8389"} + )); + private static int getScreenType(Context con) { if (mDeviceType == -1) { WindowManager wm = (WindowManager)con.getSystemService(Context.WINDOW_SERVICE); @@ -64,10 +71,10 @@ public static enum MethodState { } public static boolean isMtkDevice() { - return (Build.HARDWARE.toLowerCase().contains("mt6575") - || Build.HARDWARE.toLowerCase().contains("mt6577") - || Build.HARDWARE.toLowerCase().contains("mt6589") - || Build.HARDWARE.toLowerCase().contains("mt8389")); + if (mIsMtkDevice != null) return mIsMtkDevice; + + mIsMtkDevice = MTK_DEVICES.contains(Build.HARDWARE.toLowerCase()); + return mIsMtkDevice; } public static boolean hasGeminiSupport() { From c1f547b178e52c6bc609bbefdee3597e8ad5927a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 09:47:07 +0200 Subject: [PATCH 068/710] Identation fixes. We use spaces for TAB. --- src/com/ceco/gm2/gravitybox/GravityBox.java | 2 +- .../ceco/gm2/gravitybox/GravityBoxSettings.java | 12 ++++++------ src/com/ceco/gm2/gravitybox/ModAudioSettings.java | 14 +++++++------- src/com/ceco/gm2/gravitybox/ModRebootMenu.java | 6 +++--- src/com/ceco/gm2/gravitybox/Utils.java | 6 +++--- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index 3aa061e789..7436c2a49c 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -97,7 +97,7 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { // MTK Specific if (Utils.isMtkDevice()) { if (Utils.hasGeminiSupport() && - lpparam.packageName.equals(ModSignalIconHide.PACKAGE_NAME)) { + lpparam.packageName.equals(ModSignalIconHide.PACKAGE_NAME)) { ModSignalIconHide.init(prefs, lpparam.classLoader); } diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 131e0f7558..5adad98197 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -312,7 +312,7 @@ public SystemProperties(Bundle data) { hasGeminiSupport = data.getBoolean("hasGeminiSupport"); } if (data.containsKey("isTablet")) { - isTablet = data.getBoolean("isTablet"); + isTablet = data.getBoolean("isTablet"); } } } @@ -595,8 +595,8 @@ public void onCreate(Bundle savedInstanceState) { // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); - mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); - mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); + mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); + mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); } // Remove MTK specific preferences for non-MTK devices @@ -616,9 +616,9 @@ public void onCreate(Bundle savedInstanceState) { // 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); + mPrefCatFixes.removePreference(mPrefFixDateTimeCrash); + mPrefCatFixes.removePreference(mPrefFixTtsSettings); + mPrefCatFixes.removePreference(mPrefFixDevOpts); } mQuickSettings.setEntries(R.array.qs_tile_entries); diff --git a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java index d140c60e5b..c2ca7da71e 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java @@ -30,10 +30,10 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL final Class classVolumizer; try { classVolumizer = XposedHelpers.findClass(CLASS_VOLUMIZER, classLoader); - } catch (Throwable t) { - XposedBridge.log("ModAudioSettings: classVolumizer doesn't exist, exiting..."); - return; - } + } catch (Throwable t) { + XposedBridge.log("ModAudioSettings: classVolumizer doesn't exist, exiting..."); + return; + } XposedHelpers.findAndHookMethod(classVolumePref, "onBindDialogView", View.class, new XC_MethodHook() { @@ -94,7 +94,7 @@ protected void beforeHookedMethod(MethodHookParam param2) throws Throwable { 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"); + "Attempt to set volume of foreign Stream Type - ignoring"); param2.args[0] = streamType; } } @@ -129,7 +129,7 @@ String.class, int.class, int.class, new XC_MethodHook() { 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"); + "Attempt to set volume of foreign Stream Type - ignoring"); param2.args[1] = streamType; } } @@ -163,7 +163,7 @@ String.class, int.class, int.class, new XC_MethodHook() { 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"); + "Attempt to set volume of foreign Stream Type - ignoring"); param2.args[1] = streamType; } } diff --git a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index f6ca35e952..835df5208b 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -94,13 +94,13 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mRebootItemList.add(new BasicIconListItem(mBootloaderStr, null, mBootloaderIcon, null)); } - mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), + mRebootConfirmStr = String.format(gbRes.getString(R.string.reboot_confirm), gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); mRebootConfirmRecoveryStr = String.format(gbRes.getString(R.string.reboot_confirm_recovery), gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); - mRebootConfirmBootloaderStr = String.format(gbRes.getString(R.string.reboot_confirm_bootloader), + mRebootConfirmBootloaderStr = String.format(gbRes.getString(R.string.reboot_confirm_bootloader), gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); - + log("GlobalActions constructed, resources set."); } }); diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 8d8ba6797c..2b71a5161e 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -24,9 +24,9 @@ public class Utils { // Supported MTK devices private static final Set MTK_DEVICES = new HashSet(Arrays.asList( - new String[] {"mt6575","mt6577","mt6589","mt8389"} - )); - + new String[] {"mt6575","mt6577","mt6589","mt8389"} + )); + private static int getScreenType(Context con) { if (mDeviceType == -1) { WindowManager wm = (WindowManager)con.getSystemService(Context.WINDOW_SERVICE); From 8e7f2e564fb1e67d6cbd00335e7872d313d44157 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 09:50:59 +0200 Subject: [PATCH 069/710] Avoid potential NPE in Utils.isTablet() --- src/com/ceco/gm2/gravitybox/Utils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 2b71a5161e..8e78a784dd 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -61,7 +61,9 @@ public static boolean isTabletUI(Context con) { } public static boolean isTablet() { - return getDeviceCharacteristics().contains("tablet"); + String deviceCharacteristics = getDeviceCharacteristics(); + return (deviceCharacteristics != null + && deviceCharacteristics.contains("tablet")); } public static enum MethodState { From 792ec85bb6c2543a18f7c268e4b53346cc82648d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 09:57:39 +0200 Subject: [PATCH 070/710] Fixed NPE in AppPickerPreference --- src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java index d7c203d28f..0a1650089d 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java @@ -173,6 +173,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) } private String getAppNameFromValue(String value) { + if (value == null) return null; + try { PackageManager pm = mContext.getPackageManager(); String[] splitValue = value.split(SEPARATOR); From c29547703ed636fc06fd8d8080e0de40099730f2 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 12:18:30 +0200 Subject: [PATCH 071/710] Optimized AppPickerPreference - asynchronous loading of app icons - implemented soft referenced cache for app icons - after the app list is populated for the first time, subsequent opening of the list will be displayed super fast --- .../gravitybox/preference/AppIconLoader.java | 73 +++++++++++++++++++ .../preference/AppPickerPreference.java | 49 ++++++++----- 2 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java diff --git a/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java b/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java new file mode 100644 index 0000000000..f68ac7ae4b --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java @@ -0,0 +1,73 @@ +package com.ceco.gm2.gravitybox.preference; + +import java.lang.ref.SoftReference; +import java.util.HashMap; +import java.util.Map; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.util.TypedValue; + +public class AppIconLoader extends AsyncTask { + + private Context mContext; + private int mSizePx; + private AppIconLoaderListener mListener; + private static Map> sAppIconCache = + new HashMap>(); + + public interface AppIconLoaderListener { + String getCachedIconKey(); + void onAppIconLoaded(Drawable icon); + } + + public AppIconLoader(Context context, int size, AppIconLoaderListener listener) { + mContext = context; + if (mContext == null) { + throw new IllegalArgumentException("GravityBox AppIconLoader: context cannot be null"); + } + + mSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, size, + mContext.getResources().getDisplayMetrics()); + + mListener = listener; + if (mListener == null) { + throw new IllegalArgumentException("GravityBox AppIconLoader: listener cannot be null"); + } + } + + public static boolean isCachedIcon(String key) { + return (sAppIconCache.containsKey(key) && sAppIconCache.get(key).get() != null); + } + + public static Drawable getCachedIcon(String key) { + return sAppIconCache.get(key).get(); + } + + @Override + protected Drawable doInBackground(ResolveInfo... params) { + if (params[0] == null) return null; + + try { + PackageManager pm = mContext.getPackageManager(); + Bitmap bitmap = ((BitmapDrawable)params[0].loadIcon(pm)).getBitmap(); + Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, mSizePx, mSizePx, true); + Drawable appIcon = new BitmapDrawable(mContext.getResources(), scaledBitmap); + sAppIconCache.put(mListener.getCachedIconKey(), new SoftReference(appIcon)); + return appIcon; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + @Override + protected void onPostExecute(Drawable icon) { + mListener.onAppIconLoaded(icon); + } +} diff --git a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java index 0a1650089d..72865284d5 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java @@ -15,17 +15,13 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.res.Resources; import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.preference.DialogPreference; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -130,19 +126,11 @@ protected Void doInBackground(Void... arg0) { List appList = pm.queryIntentActivities(mainIntent, 0); Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm)); - Resources res = mContext.getResources(); - int sizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, - res.getDisplayMetrics()); - - mListData.add(new AppItem(null, null, mContext.getString(R.string.app_picker_none), null)); + mListData.add(new AppItem(mContext.getString(R.string.app_picker_none), null)); for (ResolveInfo ri : appList) { if (this.isCancelled()) break; String appName = ri.loadLabel(pm).toString(); - Bitmap appIcon = ((BitmapDrawable)ri.loadIcon(pm)).getBitmap(); - Bitmap scaledIcon = Bitmap.createScaledBitmap(appIcon, sizePx, sizePx, true); - AppItem ai = new AppItem(ri.activityInfo.packageName, - ri.activityInfo.name, - appName, new BitmapDrawable(res, scaledIcon)); + AppItem ai = new AppItem(appName, ri); mListData.add(ai); } @@ -187,17 +175,27 @@ private String getAppNameFromValue(String value) { } } - class AppItem implements IIconListAdapterItem { + class AppItem implements IIconListAdapterItem, AppIconLoader.AppIconLoaderListener { private String mPackageName; private String mClassName; private String mAppName; private Drawable mAppIcon; + private ResolveInfo mResolveInfo; - public AppItem(String packageName, String className, String appName, Drawable appIcon) { - mPackageName = packageName; - mClassName = className; + public AppItem(String appName, ResolveInfo ri) { mAppName = appName; - mAppIcon = appIcon; + mResolveInfo = ri; + if (mResolveInfo != null) { + mPackageName = mResolveInfo.activityInfo.packageName; + mClassName = mResolveInfo.activityInfo.name; + } + + if (AppIconLoader.isCachedIcon(getValue())) { + mAppIcon = AppIconLoader.getCachedIcon(getValue()); + } else { + AppIconLoader iconLoader = new AppIconLoader(mContext, 40, this); + iconLoader.execute(mResolveInfo); + } } public String getPackageName() { @@ -237,5 +235,18 @@ public Drawable getIconLeft() { public Drawable getIconRight() { return null; } + + @Override + public void onAppIconLoaded(Drawable icon) { + mAppIcon = icon; + if (mListView.getAdapter() != null) { + ((IconListAdapter)mListView.getAdapter()).notifyDataSetChanged(); + } + } + + @Override + public String getCachedIconKey() { + return getValue(); + } } } From 2bc2a26193e0951d969fd267eeb5169fe2f620cb Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 15:13:28 +0200 Subject: [PATCH 072/710] Yet another AppPickerPreference optimizations - load app icons on demand while scrolling - use LruCache instead of deprecated SoftReference cache --- .../gravitybox/preference/AppIconLoader.java | 37 ++++++++++--------- .../preference/AppPickerPreference.java | 31 ++++++++++++---- 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java b/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java index f68ac7ae4b..7aae5f8293 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java @@ -1,9 +1,5 @@ package com.ceco.gm2.gravitybox.preference; -import java.lang.ref.SoftReference; -import java.util.HashMap; -import java.util.Map; - import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; @@ -11,15 +7,25 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; +import android.util.LruCache; import android.util.TypedValue; -public class AppIconLoader extends AsyncTask { +public class AppIconLoader extends AsyncTask { private Context mContext; private int mSizePx; private AppIconLoaderListener mListener; - private static Map> sAppIconCache = - new HashMap>(); + private static LruCache sAppIconCache; + + static { + final int cacheSize = Math.min((int)Runtime.getRuntime().maxMemory() / 6, 4194304); + sAppIconCache = new LruCache(cacheSize) { + @Override + protected int sizeOf(String key, BitmapDrawable d) { + return d.getBitmap().getByteCount(); + } + }; + } public interface AppIconLoaderListener { String getCachedIconKey(); @@ -41,24 +47,20 @@ public AppIconLoader(Context context, int size, AppIconLoaderListener listener) } } - public static boolean isCachedIcon(String key) { - return (sAppIconCache.containsKey(key) && sAppIconCache.get(key).get() != null); - } - public static Drawable getCachedIcon(String key) { - return sAppIconCache.get(key).get(); + return (key == null) ? null : sAppIconCache.get(key); } @Override - protected Drawable doInBackground(ResolveInfo... params) { + protected BitmapDrawable doInBackground(ResolveInfo... params) { if (params[0] == null) return null; try { PackageManager pm = mContext.getPackageManager(); Bitmap bitmap = ((BitmapDrawable)params[0].loadIcon(pm)).getBitmap(); - Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, mSizePx, mSizePx, true); - Drawable appIcon = new BitmapDrawable(mContext.getResources(), scaledBitmap); - sAppIconCache.put(mListener.getCachedIconKey(), new SoftReference(appIcon)); + bitmap = Bitmap.createScaledBitmap(bitmap, mSizePx, mSizePx, true); + BitmapDrawable appIcon = new BitmapDrawable(mContext.getResources(), bitmap); + bitmap = null; return appIcon; } catch (Exception e) { e.printStackTrace(); @@ -67,7 +69,8 @@ protected Drawable doInBackground(ResolveInfo... params) { } @Override - protected void onPostExecute(Drawable icon) { + protected void onPostExecute(BitmapDrawable icon) { + sAppIconCache.put(mListener.getCachedIconKey(), icon); mListener.onAppIconLoaded(icon); } } diff --git a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java index 72865284d5..d4f3e30984 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java @@ -39,6 +39,12 @@ public class AppPickerPreference extends DialogPreference implements OnItemClick private ProgressBar mProgressBar; private AsyncTask mAsyncTask; + private enum AppIconLoadingState { + NOT_LOADED, + LOADING, + LOADED + } + public AppPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); @@ -181,6 +187,7 @@ class AppItem implements IIconListAdapterItem, AppIconLoader.AppIconLoaderListen private String mAppName; private Drawable mAppIcon; private ResolveInfo mResolveInfo; + private AppIconLoadingState mIconLoadingState; public AppItem(String appName, ResolveInfo ri) { mAppName = appName; @@ -189,13 +196,7 @@ public AppItem(String appName, ResolveInfo ri) { mPackageName = mResolveInfo.activityInfo.packageName; mClassName = mResolveInfo.activityInfo.name; } - - if (AppIconLoader.isCachedIcon(getValue())) { - mAppIcon = AppIconLoader.getCachedIcon(getValue()); - } else { - AppIconLoader iconLoader = new AppIconLoader(mContext, 40, this); - iconLoader.execute(mResolveInfo); - } + mIconLoadingState = AppIconLoadingState.NOT_LOADED; } public String getPackageName() { @@ -228,7 +229,20 @@ public String getSubText() { @Override public Drawable getIconLeft() { - return mAppIcon; + if (mIconLoadingState == AppIconLoadingState.LOADED) return mAppIcon; + if (mIconLoadingState == AppIconLoadingState.LOADING + || mResolveInfo == null) return null; + + mAppIcon = AppIconLoader.getCachedIcon(getCachedIconKey()); + if (mAppIcon != null) { + mIconLoadingState = AppIconLoadingState.LOADED; + return mAppIcon; + } else { + mIconLoadingState = AppIconLoadingState.LOADING; + AppIconLoader iconLoader = new AppIconLoader(mContext, 40, this); + iconLoader.execute(mResolveInfo); + return null; + } } @Override @@ -238,6 +252,7 @@ public Drawable getIconRight() { @Override public void onAppIconLoaded(Drawable icon) { + mIconLoadingState = AppIconLoadingState.LOADED; mAppIcon = icon; if (mListView.getAdapter() != null) { ((IconListAdapter)mListView.getAdapter()).notifyDataSetChanged(); From feec6743a1ddc6390d5862df5c620037efdfd0fb Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 15:19:57 +0200 Subject: [PATCH 073/710] Fix potential NPE while receiving results from SystemPropertyProvider --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 5adad98197..224a97c690 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -381,7 +381,10 @@ protected void onDestroy() { @Override public void onReceiveResult(int resultCode, Bundle resultData) { - mHandler.removeCallbacks(mGetSystemPropertiesTimeout); + if (mHandler != null) { + mHandler.removeCallbacks(mGetSystemPropertiesTimeout); + mHandler = null; + } dismissProgressDialog(); Log.d("GravityBox", "result received: resultCode=" + resultCode); if (resultCode == SystemPropertyProvider.RESULT_SYSTEM_PROPERTIES) { From cc45e60f67a443daf81ba12fe801ded116aacbbf Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 15:35:23 +0200 Subject: [PATCH 074/710] Fixed Italian translations --- res/values-it/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index f7c5b97d1b..a29bc5237d 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -5,7 +5,8 @@ Stile indicatore batteria Indicatore batteria stock - Batteria circolare con percentuale + Batteria circolare no percentuale + Batteria circolare con percentuale Testo percentuale largo Nessuno From 1df00a88d7c9692e5c13b0d82c9fe12c011f3eae Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 16:33:54 +0200 Subject: [PATCH 075/710] Added option for national data roaming (MVNO) --- res/values/strings.xml | 4 ++ res/xml/gravitybox.xml | 6 ++ src/com/ceco/gm2/gravitybox/GravityBox.java | 1 + .../gm2/gravitybox/GravityBoxSettings.java | 1 + src/com/ceco/gm2/gravitybox/ModPhone.java | 55 +++++++++++++++++++ 5 files changed, 67 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index ff95f2f06f..151e9f75fa 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -476,4 +476,8 @@ Waiting for response from GravityBox system framework… GravityBox system framework not responding. Exiting. + + National data roaming + Connect to data services when nationally roaming + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 268d3dfacc..68ace62a9e 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -508,6 +508,12 @@ android:summary="@string/pref_roaming_warning_disable_summary" android:defaultValue="false" /> + + classServiceStateExt = XposedHelpers.findClass(CLASS_SERVICE_STATE_EXT, null); + + XposedHelpers.findAndHookMethod(classServiceStateExt, "ignoreDomesticRoaming", + new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + prefs.reload(); + boolean mvno = prefs.getBoolean(GravityBoxSettings.PREF_KEY_NATIONAL_ROAMING, false); + if (DEBUG) log("ignoreDomesticRoaming: " + mvno); + return mvno; + } + }); + } else { + final Class classGsmServiceStateTracker = XposedHelpers.findClass( + CLASS_GSM_SERVICE_STATE_TRACKER, null); + + XposedHelpers.findAndHookMethod(classGsmServiceStateTracker, "isRoamingBetweenOperators", + boolean.class, "android.telephony.ServiceState", new XC_MethodHook() { + + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + prefs.reload(); + boolean mvno = prefs.getBoolean(GravityBoxSettings.PREF_KEY_NATIONAL_ROAMING, false); + final Class classSystemProperties = + XposedHelpers.findClass("android.os.SystemProperties", null); + String simNumeric = (String) XposedHelpers.callStaticMethod( + classSystemProperties, "get", "gsm.sim.operator.numeric", ""); + String operatorNumeric = (String) XposedHelpers.callMethod( + param.args[1], "getOperatorNumeric"); + boolean equalsMcc = true; + try { + equalsMcc = simNumeric.substring(0, 3). + equals(operatorNumeric.substring(0, 3)); + } catch (Exception e) { } + + boolean result = (Boolean) param.getResult(); + result = result && !(equalsMcc && mvno); + if (DEBUG) log("isRoamingBetweenOperators: " + result); + param.setResult(result); + } + }); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { try { final Class classInCallScreen = XposedHelpers.findClass(CLASS_IN_CALL_SCREEN, classLoader); From e4fc31b6d33264191ceaf6f07005cd8472df918c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 16:44:35 +0200 Subject: [PATCH 076/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 589 +++++++++++++++++++------------------- 1 file changed, 298 insertions(+), 291 deletions(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 25b7467844..9f1005493e 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -1,291 +1,298 @@ - - - GravityBox - Styl wskaźnika baterii - Standardowy - Koło - Koło z procentami - Tekstowy wskaźnik baterii - Brak - 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 powiadomienie - Tylko dźwięk - Wyłączone - Zmiany będą zastosowane po restarcie - Auto-ukrywanie ikon sygnału - 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 2 - Zablokuj powiadomienia - Powiadomienia \"Brak karty SIM\" zablokowane - Zaawansowane menu wyłączania - Włącza dodatkowe opcje dotyczące restartu telefonu (Recovery) - Recovery - Kotroluj kursor przyciskiem głośności - Pozwala przesuwać kursor przyciskami głośności w polach tekstowych - Wyłącz - Głośność góra/dół porusza w lewo/prawo - Głośność góra/dół porusza w prawo/lewo - Wyczyść wszystkie zadania - 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 restart) - Po restarcie usuń podwójne wątki aby zmiana dała efekt! - Napraw aplikację kalendarza - Włącz jeśli aplikacja powoduje samoczynne włączanie się ekranu (wymagany restart) - Ważne - Fotografia dzwoniącego na pełnym ekranie - Wyświetla fotografię dzwoniącego na pełnym ekranie podczas rozmowy przychodzącej - Włączono synchronizację - Wyłączono synchronizację - Wi-Fi AP włączony - Wi-Fi AP wyłączony - Latarka włączona - Latarka wyłączona - Dotknij aby wyłączyć - Odtwarzam... - Nagrywam... - Nagrano - Przytrzymaj aby nagrać - Dotknij aby zatrzymać - Kafelki Szybkich Ustawień - Pozwala wyświetlić lub ukryć Kafelki Szybkich Ustawień na pasku statusu - Profil użytkownika - Tryb samolotowy - Stan baterii - Wi-Fi - Bluetooth - GPS - Transmisja danych - Tryb sieci - Użycie danych - Profile dźwiękowe - Jasność - Limit czasu wyświetlacza - Auto-Obracanie ekranu - Synchronizacja - Punkt dostępowy Wi-Fi - Latarka - GravityBox - Uśpienie - Dyktafon - Ustawienia - Wybór koloru - Naciśnij na kolor aby ustawić - Kolor tła paska statusu - Umożliwia wybór tła i przeźroczystości paska statusu - Napraw ustawienia mowy - 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 restart) - Ustawienia paska statusu - Zawiera różne dodatkowe ustawienia dla paska statusu - 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 aplikacji - Stworzone przez C3C076@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. - Xposed framework - Stworzone przez rovo89@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. - Darowizna - Wspomóż mnie jeśli uważasz, że program jest tego warty! Wspomóż też rovo89 za jego wspaniały Xposed framework. - %s zostanie zrestartowany - %s zostanie zrestartowany do trybu Recovery - Efekt wyłączenia ekranu CRT - Włącza animację imitującą efekt wyłączania ekranu CRT podczas wygaszania ekranu - Tryb inżynierski - Włącza ukrytą aplikację trybu inżynierskiego - Dzwonki Dual SIM - Uruchamia aplikację pozwalającą na przypisanie innych dzwonków dla każdej karty SIM - Ustawienia ekranu blokady - Zawiera dodatkowe poprawki ustawień ekranu blokady - Tło ekranu blokady - Styl tła - Domyślna tapeta - Wypełnij kolorem - Zdefiniowany obrazek - Ustaw kolor - Pozwala ustawić własny kolor ekranu blokady - Ustaw własny obraz - Pozwala ustawić własną tepetę ekranu blokady - Tło zostało zmienione - Tło nie zostało zmienione - Inne - Maksymalizuj widżety - Gdy włączone, widżety będą domyślnie zmaksymalizowane - Poprawki ustawień zasilania - Zawiera dodatkowe poprawki związane z zasilaniem - Wyłącz mruganie diody LED - 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) - Wartość z zakresu: 10 – 80 - 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ść (10 – 255) - Wybrana wartość jest niepoprawna - Nie jest zalecane, aby ustawić jasność poniżej 10 - 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 - 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 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 - Wyłącz wibrację przy połączeniu - Wyłącza wibracje uruchamiane gdy połączenie zostanie zestawione - 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ł - 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 - Pokaż przycisk wyszukiwania - 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łacz 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 - Zawsze pokazuj przycisk menu - Tryb dwonka - Ustawienia Zegara - Ukryj AM/PM - Ukryj Zegar - Wielkość przełącznika Pie - Ustawienia przezroczystości - Przezr. paska statusu startera - Przezr. paska statusu ekranu blokady - Przezr. paska nawigacji startera - Przezr. paska nawi. ekranu blokady - Ukryj ikonę alarmu - Poziom przyciemnienia ekranu - Poziom niskiej jasności - zanim ekran zostanie całkiem wygaszony (wymagany restart) - + + + GravityBox + Styl wskaźnika baterii + Standardowy + Koło + Koło z procentami + Tekstowy wskaźnik baterii + Brak + 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 powiadomienie + Tylko dźwięk + Wyłączone + Zmiany będą zastosowane po restarcie + Auto-ukrywanie ikon sygnału + 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 2 + Zablokuj powiadomienia + Powiadomienia \"Brak karty SIM\" zablokowane + Zaawansowane menu wyłączania + Włącza dodatkowe opcje dotyczące restartu telefonu (Recovery) + Recovery + Bootloader + Kotroluj kursor przyciskiem głośności + Pozwala przesuwać kursor przyciskami głośności w polach tekstowych + Wyłącz + Głośność góra/dół porusza w lewo/prawo + Głośność góra/dół porusza w prawo/lewo + Wyczyść wszystkie zadania + 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 restart) + Po restarcie usuń podwójne wątki aby zmiana dała efekt! + Napraw aplikację kalendarza + Włącz jeśli aplikacja powoduje samoczynne włączanie się ekranu (wymagany restart) + Ważne + Fotografia dzwoniącego na pełnym ekranie + Wyświetla fotografię dzwoniącego na pełnym ekranie podczas rozmowy przychodzącej + Włączono synchronizację + Wyłączono synchronizację + Wi-Fi AP włączony + Wi-Fi AP wyłączony + Latarka włączona + Latarka wyłączona + Dotknij aby wyłączyć + Odtwarzam... + Nagrywam... + Nagrano + Przytrzymaj aby nagrać + Dotknij aby zatrzymać + Kafelki Szybkich Ustawień + Pozwala wyświetlić lub ukryć Kafelki Szybkich Ustawień na pasku statusu + Profil użytkownika + Tryb samolotowy + Stan baterii + Wi-Fi + Bluetooth + GPS + Transmisja danych + Tryb sieci + Użycie danych + Profile dźwiękowe + Jasność + Limit czasu wyświetlacza + Auto-Obracanie ekranu + Synchronizacja + Punkt dostępowy Wi-Fi + Latarka + GravityBox + Uśpienie + Dyktafon + Ustawienia + Wybór koloru + Naciśnij na kolor aby ustawić + Kolor tła paska statusu + Umożliwia wybór tła i przeźroczystości paska statusu + Napraw ustawienia mowy + 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 restart) + Ustawienia paska statusu + Zawiera różne dodatkowe ustawienia dla paska statusu + 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 aplikacji + Stworzone przez C3C076@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. + Xposed framework + Stworzone przez rovo89@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA. + Darowizna + Wspomóż mnie jeśli uważasz, że program jest tego warty! Wspomóż też rovo89 za jego wspaniały Xposed framework. + 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 CRT + Włącza animację imitującą efekt wyłączania ekranu CRT podczas wygaszania ekranu + Tryb inżynierski + Włącza ukrytą aplikację trybu inżynierskiego + Dzwonki Dual SIM + Uruchamia aplikację pozwalającą na przypisanie innych dzwonków dla każdej karty SIM + Ustawienia ekranu blokady + Zawiera dodatkowe poprawki ustawień ekranu blokady + Tło ekranu blokady + Styl tła + Domyślna tapeta + Wypełnij kolorem + Zdefiniowany obrazek + Ustaw kolor + Pozwala ustawić własny kolor ekranu blokady + Ustaw własny obraz + Pozwala ustawić własną tepetę ekranu blokady + Tło zostało zmienione + Tło nie zostało zmienione + Inne + Maksymalizuj widżety + Gdy włączone, widżety będą domyślnie zmaksymalizowane + Poprawki ustawień zasilania + Zawiera dodatkowe poprawki związane z zasilaniem + Wyłącz mruganie diody LED + 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) + Wartość z zakresu: 10 – 80 + 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ść (10 – 255) + Wybrana wartość jest niepoprawna + Nie jest zalecane, aby ustawić jasność poniżej 10 + 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 + 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 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 + Wyłącz wibrację przy połączeniu + Wyłącza wibracje uruchamiane gdy połączenie zostanie zestawione + 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ł + 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 + Pokaż przycisk wyszukiwania + 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łacz 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 + Zawsze pokazuj przycisk menu + Tryb dwonka + Ustawienia Zegara + Ukryj AM/PM + Ukryj Zegar + Wielkość przełącznika Pie + Ustawienia przezroczystości + Przezr. paska statusu startera + Przezr. paska statusu ekranu blokady + Przezr. paska nawigacji startera + Przezr. paska nawi. 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) + From 89a219165473b33ee1979e0f901f5c7fce2a6d6a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 16:53:52 +0200 Subject: [PATCH 077/710] Updated Slovak translations --- res/values-sk/strings.xml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 43b4c3c651..6f0ac1f9d3 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -448,4 +448,28 @@ 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 + Nastaviť aplikáciu na spustenie + Aplikácia nie je nastavená! + Aplikácia nebola nájdená! + + + Väzba na aplikáciu Hodiny + Naviaže hodiny notifikačného panelu na aplikáciu Hodiny 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 + From c27b608e0b0be27beb6517ecf1f348f1d665f4f0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 16:56:47 +0200 Subject: [PATCH 078/710] Updated Czech translations --- res/values-cs/strings.xml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index ed57a57266..509c399f0a 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -451,4 +451,28 @@ 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 + Nastavit aplikaci ke spuštění + Aplikace není nastavena! + Aplikace nebyla nalezena! + + + Vazba na aplikaci Hodiny + Naváže hodiny notifikačního panelu na aplikaci Hodiny 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 + From da4567a7382c8bc8b5443620bcac2fc877e386f8 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 17:33:21 +0200 Subject: [PATCH 079/710] Increased xposed min version. Module now requires Xposed framework 2.2 --- AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 1793833890..ae37c8f93b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -55,7 +55,7 @@ android:value="true" /> + android:value="30+" /> From b180d48b862d7e9a282438cfe67fba6d04f2c8e0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 17:38:45 +0200 Subject: [PATCH 080/710] Make sure prefs are world readable --- src/com/ceco/gm2/gravitybox/GravityBox.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index cee746ed02..309e46ef22 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -18,6 +18,7 @@ public class GravityBox implements IXposedHookZygoteInit, IXposedHookInitPackage public void initZygote(StartupParam startupParam) throws Throwable { MODULE_PATH = startupParam.modulePath; prefs = new XSharedPreferences(PACKAGE_NAME); + prefs.makeWorldReadable(); XposedBridge.log("Hardware: " + Build.HARDWARE); XposedBridge.log("Product: " + Build.PRODUCT); From e51061b56a78e4fdb2cb844ec5c22bda1cc4bd6e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 8 Sep 2013 17:57:13 +0200 Subject: [PATCH 081/710] Version 2.3.0 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ae37c8f93b..531e9bc1d5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="26" + android:versionName="2.3.0" > Date: Sun, 8 Sep 2013 21:14:00 +0200 Subject: [PATCH 082/710] AppPickerPreference: query for launch activities on per-package bases This avoids TransactionTooLarge IPC error on devices with huge number of apps installed. --- .../preference/AppPickerPreference.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java index d4f3e30984..a4c81e73c3 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java @@ -13,6 +13,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.TypedArray; @@ -126,12 +127,22 @@ protected void onPreExecute() @Override protected Void doInBackground(Void... arg0) { + PackageManager pm = mContext.getPackageManager(); + List appList = new ArrayList(); + + List packages = pm.getInstalledPackages(0); Intent mainIntent = new Intent(Intent.ACTION_MAIN); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); - PackageManager pm = mContext.getPackageManager(); - List appList = pm.queryIntentActivities(mainIntent, 0); - Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm)); + for(PackageInfo pi : packages) { + if (this.isCancelled()) break; + mainIntent.setPackage(pi.packageName); + List activityList = pm.queryIntentActivities(mainIntent, 0); + for(ResolveInfo ri : activityList) { + appList.add(ri); + } + } + Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm)); mListData.add(new AppItem(mContext.getString(R.string.app_picker_none), null)); for (ResolveInfo ri : appList) { if (this.isCancelled()) break; From a7f2e68bbe58beebeac6ff87662f65abdfc3d488 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Mon, 9 Sep 2013 06:17:00 +0200 Subject: [PATCH 083/710] Updated French translation --- res/values-fr/strings.xml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index c07b93559b..c2fcc0ed1f 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -435,10 +435,10 @@ Gestion de la transparence - Transparence de la barre de status pour le lanceur - Transparence de la barre de status pour l\'écran de déverrouillage - Transparence de la barre de navigation pour le lanceur - Transparence de la barre de navigation pour l\'écran de déverrouillage + Barre de statut : lanceur + Barre de statut : écran de déverrouillage + Barre de navigation : lanceur + Barre de navigation : écran de déverrouillage Masquer l\'icône de l\'alarme @@ -473,7 +473,11 @@ Crée un lien du panneau de notification vers l\'appli Horloge au lieu des paramètres Date et Heure - Attente d\'une réponse de la branche système… de GravityBox + Attente d\'une réponse de la branche système de GravityBox… La branche système de GravityBox ne répond pas. Sortie + + Itinérance de données nationale + Se connecter aux services de données en itinérance nationale + From ff2234a299f2179dbf7f5f4491be4988da497ede Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 9 Sep 2013 13:20:20 +0200 Subject: [PATCH 084/710] Updated Indonesian translations (thanks to awaaas) --- res/values-in/strings.xml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 9df3083a41..2f8aaa665c 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -364,8 +364,8 @@ 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) @@ -429,8 +429,8 @@ Sembunyikan jam - Besar pemicu + Manajemen transparansi Transparansi statusbar untuk launcher @@ -445,7 +445,6 @@ Level keredupan layar Jumlah kecerahan ketika layar redup - ketika layar hendak mati (membutuhkan restart) - Perangkat Tablet @@ -467,4 +466,16 @@ 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 + From 3f7afd4efaae924c000824cf18a9e9b666500d7b Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 9 Sep 2013 13:22:39 +0200 Subject: [PATCH 085/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 9f1005493e..a0cf0c4326 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -78,6 +78,7 @@ Uśpienie Dyktafon Ustawienia + Głośność Wybór koloru Naciśnij na kolor aby ustawić Kolor tła paska statusu @@ -289,10 +290,22 @@ Przezr. paska nawi. ekranu blokady Ukryj ikonę alarmu Poziom przyciemnienia ekranu - Poziom niskiej jasności - zanim ekran zostanie całkiem wygaszony (wymagany restart) + 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ż najnowsze aplikacje + Akcja długiego naciśnięcia HOME + Uruchom własną aplikację + Ustaw własną aplikację + 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 From 6306319f4b024d1e1b68db36db2cbf80b6bad754 Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Mon, 9 Sep 2013 16:18:48 +0300 Subject: [PATCH 086/710] Updated Russian translation --- res/values-ru/strings.xml | 50 ++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 6e50927451..b13cf6ec46 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -30,7 +30,8 @@ Расширенное меню перезагрузки Включает расширенное меню перезагрузки с возможностью перезагрузки в Recovery - Recovery + Recovery + Bootloader Управление курсором клавишами громкости Позволяет управлять курсором в текстовых полях клавишами громкости @@ -40,18 +41,18 @@ Закрыть все текущие задачи - Исправление падения диалога Дата и время + Падения диалога Дата и время Включить, если при входе в настройки Даты и времени происходит падение (Необходима перезагрузка) - Исправление определения номера для звонка + Определения номера для звонка Включить, если номер звонящего не сопоставляется с контактом при входящем звонке (Необходима перезагрузка) После перезагрузки необходимо удалить и заново добавить контакты, чтобы изменения вступили в силу! Используйте Настройки - Приложения - Хранилище контактов - Стереть данные. - Исправление определителя номера для сообщений + Определителя номера для сообщений Включить, если наблюдается проблема нескольких веток сообщений для одного контакта (Необходима перезагрузка) После перезагрузки необходимо удалить все раздельные ветки в приложении Сообщения, чтобы изменения вступили в силу! - Исправить приложение Календарь + Приложение Календарь Включить, если есть проблема с периодически включающимся экраном в спящем режиме Важно @@ -96,6 +97,7 @@ Сон Быстрая запись Настройки + Звук Выбор цвета @@ -132,6 +134,7 @@ %s будет перезагружен. %s будет перезагружен в recovery. + %s будет перезагружен в bootloader. CRT-эффект выключения экрана @@ -363,7 +366,7 @@ Отключить подсветку Включать всегда, когда включен экран Уведомления подсветкой клавиш - ЭКСПЕРИМЕНТАЛЬНО! Моргающая подсветка клавиш при уведомлениях. Использовать только в сулчае отсутствия LED индикатора. Может привести к ухудшению жизни батареи. + ЭКСПЕРИМЕНТАЛЬНО! Моргающая подсветка клавиш при уведомлениях. Использовать только в случае отсутствия LED индикатора. Может привести к ухудшению жизни батареи. Скрыть панель навигации @@ -401,7 +404,7 @@ Быстрый запуск - Настрйоки тайла Быстрого запуска + Настройки тайла Быстрого запуска Основное приложение Долгий тап, слот 1 Долгий тап, слот 2 @@ -444,8 +447,39 @@ Уровень затухания подсветки Яркость для приглушенной подсветки - когда экран почти выключился (необходима перезагрузка) - + Телефон + Планшет + + + Настройки яркости + Включить настройку яркости + Включить только в случае, если устройство использует стандартный механизм Android для регулировки яркости. Оставьте выключенным, если есть проблемы, как-то связанные с яркостью. (Необходима перезагрузка) + + + Показать недвание приложения + + + Действие по долгому нажатию Home + + + Запустить приложение + Выбрать приложение + Приложение не выбрано! + Приложение не найдено! + + + Связать с DeskClock + Связывает часы на статусбаре с приложение DeskClock вместо настроек Даты и времени + + + Ожидание отклика от системного фреймворка GravityBox… + Системный фреймворк GravityBox не отвечает. Выход. + + + Национальный роуминг + Подключаться к службам передачи данных в национальном роуминге + From ce9311538167a87fe9a276d152cbfcf9e26dd163 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 10 Sep 2013 09:39:35 +0200 Subject: [PATCH 087/710] Updated Chinese (Traditional) translations (thanks to jwchen119) --- res/values-zh-rTW/strings.xml | 243 +++++++++++++++++++++++++++++++--- 1 file changed, 224 insertions(+), 19 deletions(-) diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index ecaf48d80c..1c2b0e302d 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -1,11 +1,12 @@ - - + + GravityBox - + 電量指示圖案樣式 原廠電量指示圖案 - 圓形電量圖示(包含百分比) + 圓形電量圖示(不包含百分比) + 圓形電量圖示(包含百分比) 電量百分比文字 @@ -30,6 +31,7 @@ 進階重新啟動選單 啟用有重新啟動至 Recovery 選項的進階重新啟動選單 Recovery + Bootloader 音量鍵游標控制 在文字輸入區域內,以音量鍵控制游標位置 @@ -38,7 +40,6 @@ 音量增/減鈕控制游標向右/向左 清除全部最近使用的應用程式 - 在「最近使用的應用程式」畫面增加一個可以清除所有應用程式的按鈕 修正「日期與時間設定」錯誤 當您進入日期與時間設定時發生錯誤時,啟用這個選項(需要重新啟動) @@ -67,7 +68,7 @@ 手電筒開啟 手電筒關閉 按下以關閉 - 播放中… + 播放中… 錄音中… 已錄音 長按以錄音 @@ -85,7 +86,7 @@ 資料連結 網路模式 資料用量 - 情境模式 + 情境模式 亮度 休眠 自動旋轉 @@ -95,7 +96,9 @@ GravityBox 關閉螢幕 快速錄音 - + 設定 + 音量 + 顏色選擇器 在顏色上按下以套用 @@ -129,8 +132,9 @@ 若您覺得這個 app 好用的話,請贊助我!也請考慮捐助給編寫出優秀的 Xposed 框架的 rovo89。 - 您的手機將重新啟動 - 您的手機將重新啟動至 Recovery + 您的 %s 將重新啟動 + 您的 %s 將重新啟動至 Recovery + 您的 %s 將重新啟動至 Bootloader. CRT 螢幕關閉特效 @@ -227,8 +231,8 @@ 停用當充電時會亮起的 LED 燈號 - 硬體按鍵動作 - 可在此為硬體按鍵設定自訂的動作 + 實體按鍵動作 + 可在此為實體按鍵設定自訂的動作 選單鍵長按動作 選單鍵雙擊動作 返回鍵長按動作 @@ -237,7 +241,7 @@ 語音搜尋 切換至上一個應用程式 結束正在使用的應用程式 - 使裝置休眠 + 使裝置休眠 結束應用程式的長按延遲 適用於「結束正在使用的應用程式」動作。定義按鍵需要按下持續多久才會觸發動作 雙擊速度 @@ -260,19 +264,220 @@ 停用接通時的震動 停用在通話接通時所觸發的震動 - + 軟重啟 - - + + 純黑色背景 在預設的 Holo 系統內建佈景主題內使用純黑色的背景,而不是黑-灰色的漸層(需要重新啟動) - + 每列磁貼數 定義快速設定內每列有幾個磁貼。磁貼會根據您的設定自動縮放。適用於豎屏。 - + 顯示目前是一週的哪一天 + + + 可擴展的音量面板 + 啟用此選項使您可以調整不同串流的音量 + + + 將鈴聲音量與通知音量連結 + 當關閉時,鈴聲音量與通知音量將可以分別調整 + + + 自動切換快速選單 + 當沒有通知時,下拉狀態列自動切換成快速設定選單 + + + 快速設定選單下拉位置 + 選擇下拉狀態列邊緣啟用快速選單的位置 + 關閉 + 右邊 + 左邊 + + + 關閉音量鍵喚醒螢幕 + 佳域 G3s 和 G4 的實體音量鍵會喚醒螢幕 + + + 狀態列顏色 + + + 開啟更改狀態列圖示顏色 + + + 狀態列圖示顏色 + 設定狀態列圖示和時鐘的顏色 + + + 資料傳輸顏色 + 設定傳輸資料時的顏色 + + + 管理快速設定選單 + + + 通知列樣式 + + + 通知列背景 + 預設背景 + 純色 + 自訂圖案 + 設定背景顏色 + 設定肖像圖片 + 設定風景圖片 + 背景透明度 + 背景模式 + 疊加 + 襯底 + + + 隱藏漫遊指示 + 當隱藏時,漫遊指示器上的 R 會消失,請小心使用 + + + 充電中 (%d%%) + 電量已滿 + %d%% remaining + + + 沒有服務 + 飛航模式啟用 + 僅能撥打緊急電話 + + + Pie Controls + 啟用 Pie Controls + 顯示搜尋按鍵 + 導航鍵大小 + 觸發位置 + 螢幕左邊緣 + 螢幕下邊緣 + 螢幕右邊緣 + 螢幕上邊緣 + + + 背光燈行為模式 + 預設 + 關閉背光燈 + 當螢幕喚醒時背光燈永遠打開 + 背光燈通知效果 + 這個設定是實驗性的!當收到通知時背光燈會閃爍提醒。當您的裝置沒有 LED 通知燈時才開啟,此功能可能會消耗部分電量 + + + 隱藏海苔條 + 當 Pie Controls 啟用時隱藏海苔條(需要重新啟動) + + + 優化 Holo 背景 + 取代原本不完美漸層的預設 Holo 黑-灰色背景(需要重新啟動) + + + 關閉實體按鍵 + 當 Pie Controls 啟用時將會關閉選單鍵、返回鍵與 HOME 鍵功能,但是實體按鍵功能仍可使用(如果您的裝置有實體按鍵) + + + 使用 Holo 黑色主題 + 將 GravityBox 的 Holo 白色背景主題換成 Holo 黑色背景主題 + + + 關閉 + 左上角 + 右上角 + 左下角 + 右下角 + + + Adjust top margin + + + 關閉漫遊警告 + 關閉當漫遊時傳送訊息或撥打電話的警告 + + + 搜尋 + (無) + + + 快速應用程式選單 + QuickApp tile settings + 主要應用程式 + 長按應用程式槽 1 + 長按應用程式槽 2 + 長按應用程式槽 3 + 長按應用程式槽 4 + + + 開啟 GPS + 關閉 GPS + + + 總是顯示選單按鍵 + + + 鈴聲模式 + + + 時鐘設定 + + + 隱藏 AM/PM + + + 隱藏時鐘 + + + 觸發位置大小 + + + 管理透明度調整 + 啟動器下的狀態列透明度 + 鎖定畫面時的狀態列透明度 + 啟動器下的海苔條透明度 + 鎖定畫面時的海苔條透明度 + + + 隱藏鬧鐘圖示 + + + Screen dim level + Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + + + 手機 + 平板 + + + 亮度設定 + 啟用亮度設定 + 這個功能只能在您的手機支援標準的 Android 亮度調整。如果您遇到任何亮度問題請關閉此選項(需要重新啟動) + + + 顯示最近使用的應用程式 + + + 長按 HOME 鍵行為 + + + 執行自訂的應用程式 + 設定自訂應用程式 + 沒有指定應用程式! + 未找到自訂應用程式! + + + 與應用程式時鐘做連結 + 啟用此功能後狀態列的時間將與應用程式「時鐘」做連結而非原本「日期與時間設定」 + + + 等待 GravityBox 系統框架的回應… + GravityBoy 系統框架無反應。離開中 + + + National data roaming + Connect to data services when nationally roaming - + \ No newline at end of file From 2bd0d895a0a08268df407320c5ea43f3e167dc1e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 10 Sep 2013 09:42:01 +0200 Subject: [PATCH 088/710] Updated Hungarian translations (thanks to benjoe1) --- res/values-hu/strings.xml | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index b1591054f5..cbefa7f818 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -39,7 +39,7 @@ Hangerő fel/le a kurzort balra/jobbra mozgatja Hangerő fel/le a kurzort jobbra/balra mozgatja - Töröl minden új feladatot gomb + Legutóbbi feladatok 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) @@ -97,6 +97,7 @@ Alvás Gyors Felvétel Beállítások + Hangerő Szín választó @@ -161,7 +162,7 @@ Lehetővé teszi egyéni háttérkép beállítását a Lockscreen-hez A háttér megváltozott A háttér nem változott meg - Másik + Egyéb Widgetek maximalizálása Ha engedélyezve van, a Lockscreen widgetek alapértelmezetten maximalizálva lesznek @@ -399,7 +400,7 @@ Keresés - (Nincs) + (Semmi) Gyors Program elérés @@ -455,4 +456,28 @@ Fényerő beállítások módosításának 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 ez a funkciót. (újraindítás szükséges) + + Legutóbb használt alkalmazások megjelenítése + + + Home gomb hosszú érintés művelete + + + Egyéni alkalmazás indítása + Egyéni alkalmazás beállítása + Nincs engedélyezve egyéni alkalmazás! + Egyéni alkalmazás nem található! + + + Átirányítás DeskClock-ra + Az értesítési panel órájának megérintésével a DeskClock 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álatáshoz hazai roaming esetén + From 42871f91b48aeac149675b6bdd91f1ec710150b5 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 10 Sep 2013 10:15:05 +0200 Subject: [PATCH 089/710] Fixed potential NPE in ModSettings/PowerUsageSummary refreshStats hook --- src/com/ceco/gm2/gravitybox/ModSettings.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/ModSettings.java b/src/com/ceco/gm2/gravitybox/ModSettings.java index 46a0139b52..497970658f 100644 --- a/src/com/ceco/gm2/gravitybox/ModSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModSettings.java @@ -27,6 +27,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL protected void afterHookedMethod(MethodHookParam param) throws Throwable { PreferenceGroup appListGroup = (PreferenceGroup) XposedHelpers.getObjectField( param.thisObject, "mAppListGroup"); + if (appListGroup == null) return; int prefCount = appListGroup.getPreferenceCount(); for (int i = 0; i < prefCount; i++) { @@ -34,7 +35,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { // Assumption is a mother of all fuckups, thus: // TODO: make this more bullet-proof Preference pref = appListGroup.getPreference(i); - if (pref instanceof CheckBoxPreference) { + if (pref != null && pref instanceof CheckBoxPreference) { log("CheckBoxPreference found: " + pref.getTitle() + " - removing"); appListGroup.removePreference(pref); break; From c61b0fc004f7d78734783914a7632aea402018e8 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 10 Sep 2013 10:21:33 +0200 Subject: [PATCH 090/710] Version 2.3.1 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 12 +++++++++++ res/values-it/strings.xml | 42 +++++++++++++++++++++++++++++++++------ 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 531e9bc1d5..d66ca53e8e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="27" + android:versionName="2.3.1" > 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 %s si riavvierà. - Il %s si riavvierà in ripristino. + Il %s si riavvierà + Il %s si riavvierà in ripristino Effetto spegni schermo CRT @@ -291,14 +291,14 @@ I QuickSettings saranno visibili automaticamente aprendo la barra delle notifiche, se non sono già presenti notifiche - Visualizzaione rapida + Visualizzazione rapida Trascinando un bordo dello schermo appariranno direttamente i QuickSettings Spento Destra Sinistra - Disable volume rocker wake + Disabilita sblocco schermo con tasti volume Per modelli come Jiayu G3s,G4 in cui i tasti volume accendono lo schermo @@ -381,7 +381,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 Light Off @@ -445,8 +445,38 @@ 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 From 26eb22c5931b18525f8110a28656edf638486b79 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 13 Sep 2013 08:45:36 +0200 Subject: [PATCH 091/710] Initialize system properties only when not initialized yet --- .../gm2/gravitybox/GravityBoxSettings.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index ddc3bd328c..b36515bf2d 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -352,20 +352,22 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - 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); + 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 From 84c868a764eb85b7139b3f0f32e56a13ba409f2f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 13:30:18 +0200 Subject: [PATCH 092/710] Implemented Expanded Desktop feature (initial commit) --- .../ic_lock_expanded_desktop.png | Bin 0 -> 1169 bytes .../ic_lock_expanded_desktop.png | Bin 0 -> 1390 bytes res/values/arrays.xml | 14 + res/values/strings.xml | 10 + res/xml/gravitybox.xml | 7 + src/com/ceco/gm2/gravitybox/GravityBox.java | 1 + .../gm2/gravitybox/GravityBoxSettings.java | 18 + .../gm2/gravitybox/ModExpandedDesktop.java | 697 ++++++++++++++++++ .../ceco/gm2/gravitybox/ModRebootMenu.java | 215 ++++-- 9 files changed, 903 insertions(+), 59 deletions(-) create mode 100644 res/drawable-hdpi/ic_lock_expanded_desktop.png create mode 100644 res/drawable-xhdpi/ic_lock_expanded_desktop.png create mode 100644 src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java 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 0000000000000000000000000000000000000000..01f5b89cbc75d20ac8bf47d9bd13788e342f787a GIT binary patch literal 1169 zcmV;C1aA9@P)KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=imUex%6h~NXf z1O&x{uOKl8Fa7}{DnSJgdhp=Jh!~U*6j@QwgNVi_s3$=TSrLLnVa3GqQjw;tA?+3D%-Z|m#%x~itv6A^0J>Zox`2qXj?ZEno?3xENj9hd;Tfb&H$Mu8)R26!hs@wS* zeO#UQTnLzxKL(8Hx8hp)uwir_kn%BZp-O0LH57B6HNMoGcHlP9S&P+Z3dqDQo45$H z0K>p$2aIW;8@L%40k23zSOg3Kn;aM60B~Kie%2xu83EfGfg8X^N9PX$*MQZ)6tEk3 zpnc6QnRvv=h|fi&$>?hqk*v7eF~vJ9BA-O0P1|iE@>a(b^v{Jrhn5Pi)}wekwf)BW z{beH3Dpww`!{{Wi7kC)}qX#%^wEqIX%bCdRP?`gFXoXtJdVvd3N;!%= z0Pq!94?LY^?n&T$HJ1`UH2I7c=sN+N4se(i>n5Jq9%~{8S=(~JppiI4Ws7jv>FK~N=wK21k6{+<-i@_iQe}@NJ5P7Jg@>- zXY|)wrGztqMyuT!^Xpxvl*;o=ps<+y&6*HM j2qXj&0ttaywtoWvp{8)MM=pjm00000NkvXXu0mjfM?(dF literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e0c99e5bcbdef6c3ad79cd525d4df1c64b9a515c GIT binary patch literal 1390 zcmV-!1(EuRP)KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=ioKJ^ynX;C@PqM8Wo9(xS<}RFfPeKXHYXnV_r0!3n$4zBM#G4sCZHyuCZHx@q%l_V_0PsDxEv>uWldg% zkMQtv2PGxzfOGL4uFYxv6IfH_5IBi@FqI<#mCpflxD_9lk>je81pmYX*f+{m;6#ux zRpdp7sRA40{Q0F4Y@gd2n82Y3hnu1@Y^y2(oAD$r!3r!aS7mx^ORy5had*c(B^lY5 zWKF;pypPoxK7?s($9I^->p^lQL*UVjji183I1*v7r%2<|5O76?*FF$#e>9BWi)*Sb zh5ucmj_-@LR)m~Qy2M}m`^qSLkKtErz+1TNOy~s`x){GL;<#Uo<5c{exA8rbU}MMy z4-RO&4&x^y=1Y0l%;ecYW-#gB!`jERrbg2^2hZcmFuaYQqQm?ly39h8;04jo=TYa6gxi0sHBR4)tr7pH z7ajXOuESYb6Oi=yzB4D|XK_aiP1a&JuI~|=zm<^$KkaCCvNZnAFuqOlja3ywFJgzK z2c?6eoz!MJ?su|Ey+AkD+l2=+AmLcJ{r*K|?T;!+;baLC_Gk?{(~|JB)_D9t-d>xh z5ZaALx@72H_z}0K7_^i!59lS1p4FNWKGP@J?U*mb_^d*p7oLl7=!M^L7rs7|+Tnhs z@h&{H%>KF1@n594ho&K3tjMAYBm?Ax9bFofS*^+P{{Q<#2wu?ob*U|u4u{)MD+yy6 zxcs1V!l&_fWcsH%I=8IDu8=CQkn+5j;*$oa%M5|V?9a#3EE4}zDF5o1nhQQ+ESK~E&7Tz$HQ4BY`xP4P=q<(RihuA2JfK^?#ofqwDSr{KCF%HVySE`3O zeT=@cB4B5~la_)ok0xi8Ur5#w+Ot5=88^7a1= wjW}uoY65BkY65BkY65BkY65BkMiu`J0AC-qft`Z<(*OVf07*qoM6N<$f)m(~QUCw| literal 0 HcmV?d00001 diff --git a/res/values/arrays.xml b/res/values/arrays.xml index d624195f87..9fcda1355a 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -387,4 +387,18 @@ 85 + + @string/expanded_desktop_disabled + @string/expanded_desktop_statusbar + @string/expanded_desktop_navbar + @string/expanded_desktop_both + + + + 0 + 1 + 2 + 3 + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 151e9f75fa..af642d262b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -480,4 +480,14 @@ 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 + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 68ace62a9e..1f506c988a 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -407,6 +407,13 @@ android:title="@string/pref_cat_display_title" android:summary="@string/pref_cat_display_summary"> + + diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index 309e46ef22..5cd90c514d 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -68,6 +68,7 @@ public void initZygote(StartupParam startupParam) throws Throwable { ModHwKeys.initZygote(prefs); PatchMasterKey.initZygote(); ModPhone.initZygote(prefs); + ModExpandedDesktop.initZygote(prefs); } @Override diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index b36515bf2d..49d54d31c0 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -142,6 +142,13 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece public static final String PREF_KEY_CHARGING_LED_DISABLE = "pref_charging_led_disable"; 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"; @@ -480,6 +487,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private CheckBoxPreference mPrefCrtOff; private PreferenceScreen mPrefCatMedia; private CheckBoxPreference mPrefSafeMediaVolume; + private ListPreference mPrefExpandedDesktop; @SuppressWarnings("deprecation") @Override @@ -598,6 +606,8 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatMedia = (PreferenceScreen) findPreference(PREF_CAT_KEY_MEDIA); mPrefSafeMediaVolume = (CheckBoxPreference) findPreference(PREF_KEY_SAFE_MEDIA_VOLUME); + mPrefExpandedDesktop = (ListPreference) findPreference(PREF_KEY_EXPANDED_DESKTOP); + // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); @@ -812,6 +822,10 @@ private void updatePreferences(String key) { mPrefScreenDimLevel.setEnabled(enabled); mPrefAutoBrightness.setEnabled(enabled); } + + if (key == null || key.equals(PREF_KEY_EXPANDED_DESKTOP)) { + mPrefExpandedDesktop.setSummary(mPrefExpandedDesktop.getEntry()); + } } @Override @@ -1003,6 +1017,10 @@ 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"))); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java new file mode 100644 index 0000000000..e3dc6229cb --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java @@ -0,0 +1,697 @@ +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; + + public static final String SETTING_EXPANDED_DESKTOP_STATE = "expanded_desktop_state"; + public static final String SETTING_EXPANDED_DESKTOP_MODE = "expanded_desktop_mode"; + 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); + resolver.registerContentObserver(Settings.System.getUriFor( + SETTING_EXPANDED_DESKTOP_MODE), 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 (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); + Settings.System.putInt(mContext.getContentResolver(), + SETTING_EXPANDED_DESKTOP_MODE, expandedDesktopMode); + } + } + }; + + private static void updateSettings() { + if (mContext == null || mPhoneWindowManager == null) return; + + try { + final int expandedDesktopMode = Settings.System.getInt(mContext.getContentResolver(), + SETTING_EXPANDED_DESKTOP_MODE, GravityBoxSettings.ED_DISABLED); + final boolean expandedDesktop = Settings.System.getInt(mContext.getContentResolver(), + SETTING_EXPANDED_DESKTOP_STATE, 0) == 1; + if (expandedDesktopMode == GravityBoxSettings.ED_DISABLED && expandedDesktop) { + Settings.System.putInt(mContext.getContentResolver(), + SETTING_EXPANDED_DESKTOP_STATE, 0); + return; + } + + boolean updateDisplayMetrics = false; + if (mExpandedDesktop != expandedDesktop) { + mExpandedDesktop = expandedDesktop; + updateDisplayMetrics = true; + } + if (mExpandedDesktopMode != expandedDesktopMode) { + mExpandedDesktopMode = expandedDesktopMode; + 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] = + mContext.getResources().getDimensionPixelSize(resHeightId); + navigationBarHeightForRotation[landscapeRotation] = + navigationBarHeightForRotation[seascapeRotation] = + mContext.getResources().getDimensionPixelSize(resHeightLandscapeId); + + navigationBarWidthForRotation[portraitRotation] = + navigationBarWidthForRotation[upsideDownRotation] = + navigationBarWidthForRotation[landscapeRotation] = + navigationBarWidthForRotation[seascapeRotation] = + mContext.getResources().getDimensionPixelSize(resWidthId); + } + + 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); + + 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 ? "applyPostLayoutPolicyLw" : "animatingWindowLw", + CLASS_POLICY_WINDOW_STATE, WindowManager.LayoutParams.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final Object topFullscreenOpaqueWindowState = + XposedHelpers.getObjectField(param.thisObject, "mTopFullscreenOpaqueWindowState"); + if (topFullscreenOpaqueWindowState == null) return; + + final WindowManager.LayoutParams lp = (WindowManager.LayoutParams) + XposedHelpers.callMethod(topFullscreenOpaqueWindowState, "getAttrs"); + + if (expandedDesktopHidesStatusbar()) { + if (XposedHelpers.getAdditionalInstanceField( + topFullscreenOpaqueWindowState, "wasFullscreen") == null) { + final Boolean wasFullscreen = + (lp.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0; + XposedHelpers.setAdditionalInstanceField( + topFullscreenOpaqueWindowState, "wasFullscreen", wasFullscreen); + + if (DEBUG) { + final Object session = XposedHelpers.getObjectField( + topFullscreenOpaqueWindowState, "mSession"); + final String sessionInfo = session == null ? null : + (String) XposedHelpers.getObjectField(session, "mStringName"); + log("WindowState.wasFullscreen set for " + sessionInfo + " to " + wasFullscreen); + } + } + lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; + } else { + final Boolean wasFullscreen = (Boolean) XposedHelpers.getAdditionalInstanceField( + topFullscreenOpaqueWindowState, "wasFullscreen"); + if (wasFullscreen != null) { + if (!wasFullscreen) { + lp.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; + if (DEBUG) { + final Object session = XposedHelpers.getObjectField( + topFullscreenOpaqueWindowState, "mSession"); + final String sessionInfo = session == null ? null : + (String) XposedHelpers.getObjectField(session, "mStringName"); + log("FULL_SCREEN flag cleared for " + sessionInfo); + } + } + XposedHelpers.removeAdditionalInstanceField(topFullscreenOpaqueWindowState, "wasFullscreen"); + } + } + } + }); + + 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.set(pf); + } + 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); + 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) 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); + + 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/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java index 835df5208b..9cb4f089b8 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModRebootMenu.java @@ -14,8 +14,10 @@ import android.content.DialogInterface; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.os.Handler; import android.os.IBinder; import android.os.PowerManager; +import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -47,10 +49,14 @@ public class ModRebootMenu { private static Drawable mRebootSoftIcon; private static Drawable mRecoveryIcon; private static Drawable mBootloaderIcon; + private static Drawable mExpandedDesktopIcon; private static List mRebootItemList; private static String mRebootConfirmStr; private static String mRebootConfirmRecoveryStr; private static String mRebootConfirmBootloaderStr; + private static String mExpandedDesktopStr; + private static String mExpandedDesktopOnStr; + private static String mExpandedDesktopOffStr; private static Unhook mRebootActionHook; private static void log(String message) { @@ -80,11 +86,15 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mRebootSoftStr = gbRes.getString(rebootSoftStrId); mRecoveryStr = gbRes.getString(recoveryStrId); mBootloaderStr = gbRes.getString(bootloaderStrId); + mExpandedDesktopStr = gbRes.getString(R.string.action_expanded_desktop_title); + mExpandedDesktopOnStr = gbRes.getString(R.string.action_expanded_desktop_on); + mExpandedDesktopOffStr = gbRes.getString(R.string.action_expanded_desktop_off); mRebootIcon = gbRes.getDrawable(R.drawable.ic_lock_reboot); mRebootSoftIcon = gbRes.getDrawable(R.drawable.ic_lock_reboot_soft); mRecoveryIcon = gbRes.getDrawable(R.drawable.ic_lock_recovery); mBootloaderIcon = gbRes.getDrawable(R.drawable.ic_lock_bootloader); + mExpandedDesktopIcon = gbRes.getDrawable(R.drawable.ic_lock_expanded_desktop); mRebootItemList = new ArrayList(); mRebootItemList.add(new BasicIconListItem(mRebootStr, null, mRebootIcon, null)); @@ -121,73 +131,80 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (mContext == null) return; prefs.reload(); - if (!prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { - return; - } @SuppressWarnings("unchecked") List mItems = (List) XposedHelpers.getObjectField(param.thisObject, "mItems"); - - // try to find out if reboot action item already exists in the list of GlobalActions items - // strategy: - // 1) check if Action has mIconResId field or mMessageResId field - // 2) check if the name of the corresponding resource contains "reboot" or "restart" substring - log("Searching for existing reboot action item..."); - Object rebootActionItem = null; - Resources res = mContext.getResources(); - for (Object o : mItems) { - // search for drawable - try { - Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); - String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - log("Drawable resName = " + resName); - if (resName.contains("reboot") || resName.contains("restart")) { - rebootActionItem = o; - break; + BaseAdapter mAdapter = (BaseAdapter) XposedHelpers.getObjectField(param.thisObject, "mAdapter"); + + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { + // try to find out if reboot action item already exists in the list of GlobalActions items + // strategy: + // 1) check if Action has mIconResId field or mMessageResId field + // 2) check if the name of the corresponding resource contains "reboot" or "restart" substring + log("Searching for existing reboot action item..."); + Object rebootActionItem = null; + Resources res = mContext.getResources(); + for (Object o : mItems) { + // search for drawable + try { + Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); + String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); + log("Drawable resName = " + resName); + if (resName.contains("reboot") || resName.contains("restart")) { + rebootActionItem = o; + break; + } + } catch (NoSuchFieldError nfe) { + // continue + } catch (Resources.NotFoundException resnfe) { + // continue + } catch (IllegalArgumentException iae) { + // continue } - } catch (NoSuchFieldError nfe) { - // continue - } catch (Resources.NotFoundException resnfe) { - // continue - } catch (IllegalArgumentException iae) { - // continue - } - - // search for text - try { - Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); - String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - log("Text resName = " + resName); - if (resName.contains("reboot") || resName.contains("restart")) { - rebootActionItem = o; - break; + + // search for text + try { + Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); + String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); + log("Text resName = " + resName); + if (resName.contains("reboot") || resName.contains("restart")) { + rebootActionItem = o; + break; + } + } catch (NoSuchFieldError nfe) { + // continue + } catch (Resources.NotFoundException resnfe) { + // continue + } catch (IllegalArgumentException iae) { + // continue } - } catch (NoSuchFieldError nfe) { - // continue - } catch (Resources.NotFoundException resnfe) { - // continue - } catch (IllegalArgumentException iae) { - // continue + } + + if (rebootActionItem != null) { + log("Existing Reboot action item found! Replacing onPress()"); + mRebootActionHook = XposedHelpers.findAndHookMethod(rebootActionItem.getClass(), + "onPress", new XC_MethodReplacement () { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + showDialog(); + return null; + } + }); + } else { + log("Existing Reboot action item NOT found! Adding new RebootAction item"); + Object action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + new RebootAction()); + // add to the second position + mItems.add(1, action); + mAdapter.notifyDataSetChanged(); } } - if (rebootActionItem != null) { - log("Existing Reboot action item found! Replacing onPress()"); - mRebootActionHook = XposedHelpers.findAndHookMethod(rebootActionItem.getClass(), - "onPress", new XC_MethodReplacement () { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - showDialog(); - return null; - } - }); - } else { - log("Existing Reboot action item NOT found! Adding new RebootAction item"); - Object action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, - new RebootAction()); - // add to the second position - mItems.add(1, action); - BaseAdapter mAdapter = (BaseAdapter) XposedHelpers.getObjectField(param.thisObject, "mAdapter"); + // Add Expanded Desktop action if enabled + if (isExpandedDesktopEnabled(mContext)) { + Object action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + new ExpandedDesktopAction()); + mItems.add(mItems.size() - 1, action); mAdapter.notifyDataSetChanged(); } } @@ -331,4 +348,84 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl } } + + private static boolean isExpandedDesktopEnabled(Context context) { + return (Settings.System.getInt(mContext.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_MODE, 0) != 0); + } + + private static boolean isExpandedDesktopOn(Context context) { + return (Settings.System.getInt(context.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, 0) == 1); + } + + private static class ExpandedDesktopAction implements InvocationHandler { + private Context mContext; + private TextView mStatus; + private Handler mHandler; + + public ExpandedDesktopAction() { + } + + private void updateStatus() { + mStatus.setText(isExpandedDesktopOn(mContext) ? + mExpandedDesktopOnStr : mExpandedDesktopOffStr); + } + + private void toggleStatus() { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Settings.System.putInt(mContext.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, + isExpandedDesktopOn(mContext) ? 0 : 1); + updateStatus(); + } + }, 200); + }; + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + String methodName = method.getName(); + + if (methodName.equals("create")) { + mContext = (Context) args[0]; + mHandler = new Handler(); + + Resources res = mContext.getResources(); + LayoutInflater li = (LayoutInflater) args[3]; + int layoutId = res.getIdentifier( + "global_actions_item", "layout", "android"); + View v = li.inflate(layoutId, (ViewGroup) args[2], false); + + ImageView icon = (ImageView) v.findViewById(res.getIdentifier( + "icon", "id", "android")); + icon.setImageDrawable(mExpandedDesktopIcon); + + TextView messageView = (TextView) v.findViewById(res.getIdentifier( + "message", "id", "android")); + messageView.setText(mExpandedDesktopStr); + + mStatus = (TextView) v.findViewById(res.getIdentifier( + "status", "id", "android")); + mStatus.setVisibility(View.VISIBLE); + updateStatus(); + + return v; + } else if (methodName.equals("onPress")) { + toggleStatus(); + return null; + } else if (methodName.equals("onLongPress")) { + return false; + } else if (methodName.equals("showDuringKeyguard")) { + return true; + } else if (methodName.equals("showBeforeProvisioning")) { + return true; + } else if (methodName.equals("isEnabled")) { + return true; + } else { + return null; + } + } + } } \ No newline at end of file From 5c4c439160cf864122c850df3c8c68804ac4d8b5 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 13:51:30 +0200 Subject: [PATCH 093/710] Remove obsolete "Hide navigation bar" feature when Pie enabled Expanded desktop can now be used to achieve this. --- res/xml/gravitybox.xml | 6 ------ .../ceco/gm2/gravitybox/GravityBoxSettings.java | 14 -------------- .../ceco/gm2/gravitybox/SystemWideResources.java | 5 ----- 3 files changed, 25 deletions(-) diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 1f506c988a..5253230ccc 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -291,12 +291,6 @@ interval="10" android:defaultValue="1000" /> - - Date: Sat, 14 Sep 2013 15:01:21 +0200 Subject: [PATCH 094/710] ModBatteryStyle: Improved compatibility with custom roms and 3rd party battery mods --- .../ceco/gm2/gravitybox/ModBatteryStyle.java | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java index d77a1b0370..f0f9cf30d2 100644 --- a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java +++ b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java @@ -76,6 +76,8 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { percText.setVisibility(View.GONE); vg.addView(percText); XposedBridge.log("ModBatteryStyle: Battery percent text injected"); + } else { + percText.setTag("percentage"); } ModStatusbarColor.setPercentage(percText); @@ -94,6 +96,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); circleBattery.setLayoutParams(lParams); circleBattery.setPadding(4, 0, 0, 0); + circleBattery.setVisibility(View.GONE); ModStatusbarColor.setCircleBattery(circleBattery); vg.addView(circleBattery); XposedBridge.log("ModBatteryStyle: CmCircleBattery injected"); @@ -101,7 +104,10 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { // find battery ImageView battery = (ImageView) vg.findViewById( liparam.res.getIdentifier("battery", "id", PACKAGE_NAME)); - ModStatusbarColor.setBattery(battery); + if (battery != null) { + battery.setTag("stock_battery"); + ModStatusbarColor.setBattery(battery); + } } }); @@ -135,12 +141,18 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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" + // add percent text only in case there is no label with "percentage" tag present @SuppressWarnings("unchecked") ArrayList mLabelViews = (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mLabelViews"); - if (mLabelViews.isEmpty()) { + boolean percentTextExists = false; + for (TextView tv : mLabelViews) { + if ("percentage".equals(tv.getTag())) { + percentTextExists = true; + break; + } + } + if (!percentTextExists) { XposedHelpers.callMethod(mBatteryController, "addLabelView", percText); XposedBridge.log("ModBatteryStyle: BatteryController.addLabelView(percText)"); } @@ -187,21 +199,19 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { private static void updateBatteryStyle() { if (mBatteryController == null) return; - @SuppressWarnings("unchecked") - ArrayList mIconViews = - (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mIconViews"); - @SuppressWarnings("unchecked") - ArrayList mLabelViews = - (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mLabelViews"); - - if (!mIconViews.isEmpty()) { - mIconViews.get(0).setVisibility( - (mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_STOCK) ? - View.VISIBLE : View.GONE); - - if (mIconViews.size() >= 2) { - ImageView iv = mIconViews.get(1); - if (iv instanceof CmCircleBattery) { + try { + @SuppressWarnings("unchecked") + ArrayList mIconViews = + (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mIconViews"); + @SuppressWarnings("unchecked") + ArrayList mLabelViews = + (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mLabelViews"); + + for (ImageView iv : mIconViews) { + if ("stock_battery".equals(iv.getTag())) { + iv.setVisibility((mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_STOCK) ? + View.VISIBLE : View.GONE); + } else if ("circle_battery".equals(iv.getTag())) { iv.setVisibility((mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE || mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE_PERCENT) ? View.VISIBLE : View.GONE); @@ -209,11 +219,15 @@ private static void updateBatteryStyle() { mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE_PERCENT); } } - } - - if (!mLabelViews.isEmpty()) { - mLabelViews.get(0).setVisibility( - (mBatteryPercentText ? View.VISIBLE : View.GONE)); + + for (TextView tv : mLabelViews) { + if ("percentage".equals(tv.getTag())) { + tv.setVisibility( + (mBatteryPercentText ? View.VISIBLE : View.GONE)); + } + } + } catch (Throwable t) { + XposedBridge.log(t); } } } \ No newline at end of file From 0fcb90d3f87d2c331a711e6164813978244ea777 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 16:26:48 +0200 Subject: [PATCH 095/710] Added QuickSettings Expanded Desktop Tile --- .../ic_qs_expanded_desktop_off.png | Bin 0 -> 3460 bytes .../ic_qs_expanded_desktop_on.png | Bin 0 -> 3872 bytes .../ic_qs_expanded_desktop_off.png | Bin 0 -> 3645 bytes .../ic_qs_expanded_desktop_on.png | Bin 0 -> 3692 bytes .../quick_settings_tile_expanded_desktop.xml | 23 +++++ res/values/arrays.xml | 4 + res/values/strings.xml | 4 + .../ceco/gm2/gravitybox/ModQuickSettings.java | 8 +- .../quicksettings/AQuickSettingsTile.java | 4 + .../quicksettings/ExpandedDesktopTile.java | 97 ++++++++++++++++++ 10 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 res/drawable-hdpi/ic_qs_expanded_desktop_off.png create mode 100644 res/drawable-hdpi/ic_qs_expanded_desktop_on.png create mode 100644 res/drawable-xhdpi/ic_qs_expanded_desktop_off.png create mode 100644 res/drawable-xhdpi/ic_qs_expanded_desktop_on.png create mode 100644 res/layout/quick_settings_tile_expanded_desktop.xml create mode 100644 src/com/ceco/gm2/gravitybox/quicksettings/ExpandedDesktopTile.java 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 0000000000000000000000000000000000000000..20a38774c29cfedcfe4712334a641d3c37ae1fcd GIT binary patch literal 3460 zcmV-~4SVv5P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00087NklgulznstKF@O?4O+@woBs7FD z1uz9r&FAwb3BclyJOBVr02%-n02P3Sh)xd{x&Y9=$Ql2<=yX}Kt|UPG*4u%r&I8(h zHA7tioQSAW3N3m535#vta9^vlCPYLv3+!v{!&<-%!)RIw;IDRth^X#H&Xf~tO=Lqv zp9UeH46bP>Nfc@xE#3jqNB}Ov$@U)c5yW2D{UQO7+VVR)qBrW40N#b&t07Hj4B+U2 z;IT)Z%Va`D*Q1M~XeYiY?Q&@hqZ;ubq5=T=qEIRy47w5)@i|RWfPIf?i6MmIn}lPl z0IDcd?l^_JAQa-4{LD>XaLEB&<2cVYZiY~buM&CUssT8ql9U2snkhfV+F;OuNLC2R zDCD%`Y<3PItN|RnkxUYW`odXmC4MX|GNpql47+z^2?$YL6hXMee=kS-v1Zc{!pbmi zWzFJU%_blC?dJA@*Qvw{U_gN1aN@xLItlHIlazGa8o-x#Kj8vMWaEPbBFe_@P0?r| z@sL1dN(mRl=m)!A8%yFt$|v}{gQXM?A*^$M%dNm7^)?kHah=&DsY~(Bsx34Clh`CI z^}MkZ|AvT6ZlVDwBa_&9#2X=Yk;$n{DBh54z2XfJ+a66SfI*K{gb*+R@cH~h&xEWH zDQ%<7@;y|%17a)zkS3H5*G}pl;zQWIlmN_xlWjHiPfvE<3cJsSG$C>Qqbx1lCbUrM zFhLl^C$+srlS;#9jr&VJi!W3F{y=%j#~SM-Kw^T5J6~GSLtV47^H!NqIY$1P^$y_f mRN@&gx{KF8d%OUA?cV@!Zok0iwtrFp0000KP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000C_NklCH0M?f3UC52CcN5BkF)Zh1jW`8^xpdZ)-WPx7&-7hR3 z1Fa&4i@ehd{eS=U-uT61Xjc zZ4LwNy0ZGc8+ZonPw~Xtf#bk>51kodbbiFsK*_^k88`r3OhMqHbjuz(C1G?DxB=WZ z8hZ?k1Lqs?`}4B#*f{^bFggj$>Lazti3Y(3Nt`gweI$%d0*i_?mI(75FxUhFgR+$* zRbgAS5U3ao_5*(a!wrBRmW_VH+=_+33t-Mj0H6mrqtNRsL(=Ur&aVjDi#P&RO?u)1 zBnzAcc6jLQkWSV^=ZUaYlX9UYZB%uc2fh!7uaNWtzZ>0YSaW-0=1gnNFpec_GIuNR z+71IJfg=ffgvFgKZd1})C$)AZgvmr;PHDrTK&ZT|9d{k)L6ygHsiAGN;{^SS0VEt|ChzR|ICY!)@Z;#9rW4jN7~u0sw!d)SGO=+AF6LD+JyL0$&0nDfC99`@a$x z0w#bzft-h4PC64QQ}Lz{sHeo6br>}P>@n!=(cBj4`ljMdArO@kcL+=_;mM!X+%&1U znZO`0nj$4`1m?!*8#M87?QuDyei2E-?1&Xz@%L&V{4}mV7 zoc#=p>E2F5B~=8z1};U6UD8<5P}$WFZ^wk8U6{-S1_CZ|8aN7^GE`FI3As&NDjsyF zQ(E(Mz~u(41X@CcM`Plo1>9+$Y*`3og)xyp#$fO#SDor9 zQ?ivL84H1KYHb~h91DclMr2I3EV4-$odmW4Ta3mwYWEy#5d0b0vd9);bQ0*pe%M;i ze}0WgJK|(ix*Z-mJ>hU3u8FrM?6ehXjka);Zy^PN1>gt#ntZ*&=p?Y6T7$0wJfzmr zDJfn*1Rn6ZPt|Cf^%`$>HZ5(|HeqxUxJ#{}eMjJL>fSW38{N;}Qgv9>S|zRTY;?a7 inpXbVV}(Ft^4|bigAom;Kg|390000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AMNklA)S>_YQNU1FnLD z3VaVI-}!vfBCS?78KW7-GjWXgep>B6AldKtxaN`K%Ets?0&wNy#`MR!uJ-^s0F6F+ z06PG!QmP%ZpsK2J06BmKfEj>7A6Z$J$?5+mrYKO?^-lm9F;4@a1@NgqTcyu05&Js2Ts-jxDQ=@0MO^S*XIlwy$^uh7{m)h*!cix$0A-3f>Dz(3M5H_ zs;W3e!d(pU2B-L)0nn&5^>rE!&MNlc%+YW%LC!XKtg7lg;_ANxc$6~#ApoDu>x=>+ zKs>2M+5)0L2o%q@fY6*@1cHEgQj0YT=*cD8MQf$h(*?ytDU|?#Zxnzb=5_$?0IXwM z0z>>-Ut2ez!3#iRN^yfXyHUVt+Mm+K$0fThDl`}FWK01w3X4{(1Ff`o7c za~T3)My(vPf%!_5z^@Q!w4PYfECfJdGvCnet!Gok8G>OOky~Ks&d}-8Vx4YMJjW0p zYFz-{3_he&O5NJZ;px^GG5O+>;+fmQTMOj_@=J;rhLE2dfM^3#00IlZd<^1+Ak5EY z0dZQ_;Sg9Bz$s(j&d|f)%u#p&(2tyR##W*U;*j2Qew+JP02e?O3xY?Xt9t(sDz2*Ma32#L39x)F4MhgzY*-xnq%9bf1R6NMyzMvMK1$gj-kyTpwpz0KkN z%8VC)>}WMx06*~idHXK*)8HOpc7(UjVR&iExg5TxG2I!O089X`d;A&zlx8%ULh(O2 P00000NkvXXu0mjf9GAAa literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..47d8cfe0eba24b522b461d1dee40e04dd3c3a9a3 GIT binary patch literal 3692 zcmV-y4wLbTP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000A*Nkl~Ygw`Ublm6_i596%0W4&W9*phi+dtv!~Tb0>2FAq=x=a#}cst-%?-Ci+8I{}ym!Go}}7QlUgyWchZUX>}a0|mhDLd1uJu%iHIE=YVR2!omu zQ!JpSLaNZssw0T|y8wJJ8yO1% zSG-kAXb*@5K_Z^*0gbTHp&&@bTeT#%j1Y4s(Crn#@{Hn*Gk{Mx+zx!cQ=(#f0#*F0 zYFq2jKmt(fi=3*=>Z;6^ks*-9S7o-W%4}${REGfYDZb}cu^_O-_u8dH5CJ$0i5Eh6 zwtW9A5pRHSkN|i$iSHQ&LJQ!{^8FiOt#2J%dl0N4c_Mu-&`XKAT-P^HDgbO9@&BiI zJtao9kV#RSCs3k9SJWq&R-*ziLEwbQCI~^r#{i&1kmLt+2*Jez=A2*%2;G1u$q#f8 z9sxYXXlN_|2-x5{W|C!mG&TYl0gM1f0Fmq&_J@_eRyYEviv+L+@LjFx3!(U}Dr@~! z0Q7^RQ~*H_iWV^-Od^Vh0D>tZ3=UxuSv&`VD;y3AVd9AOi`iyh2*pz%_~Zh-A^5c4 zwvIw5IlNQ_HYR(7|3(Na1l8s({@=wy0&v^ixgiL%&7PCGesTm*uY~dzstqRb zsnWm(Q1som4}mG(C!SwQAZX&@8h2bzhVA+{| z<^+y-^sZSD#)O532EQ&a+wA87W*M${Zg(JSv5f)wnZ<{Mke?brDDj~numDUiM0^Mc z(^GjsEb&qZEDzvBa4#pwVQ}gwNC4E9bB;;lf8RifGZW+#58whwBSP>Elt|sc1VFL| zhyg(=-l%C}34(AT5JHGIYPtzH0CurLjlTybLJoY=0~19^0JReP1M!c{bU=q(I*0#} z84`fBcQ+dVzm&jM-!5~;LsL6|c4&$m4qt + + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 9fcda1355a..ca5be15e48 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -76,6 +76,7 @@ @string/qs_tile_sleep @string/qs_tile_quickrecord @string/qs_tile_quickapp + @string/qs_tile_expanded_desktop @string/qs_tile_gravitybox @@ -100,6 +101,7 @@ sleep_tileview quickrecord_tileview quickapp_tileview + expanded_tileview gravitybox_tileview @@ -123,6 +125,7 @@ @string/qs_tile_sleep @string/qs_tile_quickrecord @string/qs_tile_quickapp + @string/qs_tile_expanded_desktop @string/qs_tile_gravitybox @@ -146,6 +149,7 @@ sleep_tileview quickrecord_tileview quickapp_tileview + expanded_tileview gravitybox_tileview diff --git a/res/values/strings.xml b/res/values/strings.xml index af642d262b..9837b985ea 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -73,6 +73,9 @@ Recorded Long Press To Record Touch to stop recording + Disabled + Normal + Expanded Statusbar QuickSettings tiles @@ -98,6 +101,7 @@ Quick Record Settings Volume + Expanded desktop Color Picker diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index 7dcdf67ac1..ae7897723c 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -13,6 +13,7 @@ import com.ceco.gm2.gravitybox.Utils.MethodState; import com.ceco.gm2.gravitybox.quicksettings.AQuickSettingsTile; +import com.ceco.gm2.gravitybox.quicksettings.ExpandedDesktopTile; import com.ceco.gm2.gravitybox.quicksettings.GpsTile; import com.ceco.gm2.gravitybox.quicksettings.NetworkModeTile; import com.ceco.gm2.gravitybox.quicksettings.QuickAppTile; @@ -111,7 +112,8 @@ public class ModQuickSettings { R.id.sleep_tileview, R.id.quickapp_tileview, R.id.quickrecord_tileview, - R.id.volume_tileview + R.id.volume_tileview, + R.id.expanded_tileview )); if (!Utils.isMtkDevice()) { mCustomGbTileKeys.add(R.id.gps_tileview); @@ -521,6 +523,10 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { qAppTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(qAppTile); + ExpandedDesktopTile edTile = new ExpandedDesktopTile(mContext, mGbContext, mStatusBar, mPanelBar); + edTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(edTile); + GravityBoxTile gbTile = new GravityBoxTile(mContext, mGbContext, mStatusBar, mPanelBar); gbTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(gbTile); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/AQuickSettingsTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/AQuickSettingsTile.java index a3a18be16b..2ebcb39a08 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/AQuickSettingsTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/AQuickSettingsTile.java @@ -73,6 +73,10 @@ protected void startActivity(String action){ protected void startActivity(Intent intent) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); mContext.startActivity(intent); + collapsePanels(); + } + + protected void collapsePanels() { XposedHelpers.callMethod(mStatusBar, "animateCollapsePanels"); } } \ No newline at end of file diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/ExpandedDesktopTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/ExpandedDesktopTile.java new file mode 100644 index 0000000000..a8de4f9180 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/quicksettings/ExpandedDesktopTile.java @@ -0,0 +1,97 @@ +package com.ceco.gm2.gravitybox.quicksettings; + +import com.ceco.gm2.gravitybox.GravityBoxSettings; +import com.ceco.gm2.gravitybox.ModExpandedDesktop; +import com.ceco.gm2.gravitybox.R; + +import android.content.ContentResolver; +import android.content.Context; +import android.database.ContentObserver; +import android.os.Handler; +import android.provider.Settings; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +public class ExpandedDesktopTile extends AQuickSettingsTile { + + private TextView mTextView; + private int mMode; + private boolean mExpanded; + private Handler mHandler; + private SettingsObserver mSettingsObserver; + + public ExpandedDesktopTile(Context context, Context gbContext, Object statusBar, Object panelBar) { + super(context, gbContext, statusBar, panelBar); + + mOnClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mMode != GravityBoxSettings.ED_DISABLED) { + collapsePanels(); + // give panels chance to collapse before changing expanded desktop state + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Settings.System.putInt(mGbContext.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, + (mExpanded ? 0 : 1)); + } + }, 300); + } + } + }; + } + + class SettingsObserver extends ContentObserver { + public SettingsObserver(Handler handler) { + super(handler); + } + + public void observe() { + ContentResolver cr = mContext.getContentResolver(); + cr.registerContentObserver(Settings.System.getUriFor( + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_MODE) , false, this); + cr.registerContentObserver(Settings.System.getUriFor( + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE), false, this); + } + + @Override + public void onChange(boolean selfChange) { + updateResources(); + } + } + + @Override + protected void onTileCreate() { + LayoutInflater inflater = LayoutInflater.from(mGbContext); + inflater.inflate(R.layout.quick_settings_tile_expanded_desktop, mTile); + mTextView = (TextView) mTile.findViewById(R.id.expanded_tileview); + + mHandler = new Handler(); + mSettingsObserver = new SettingsObserver(mHandler); + mSettingsObserver.observe(); + } + + @Override + protected synchronized void updateTile() { + mMode = Settings.System.getInt(mContext.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_MODE, 0); + mExpanded = (Settings.System.getInt(mContext.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, 0) == 1) + && (mMode > 0); + + if (mExpanded) { + mLabel = mGbContext.getString(R.string.quick_settings_expanded_desktop_expanded); + mDrawableId = R.drawable.ic_qs_expanded_desktop_on; + } else { + mLabel = (mMode == GravityBoxSettings.ED_DISABLED) ? + mGbContext.getString(R.string.quick_settings_expanded_desktop_disabled) : + mGbContext.getString(R.string.quick_settings_expanded_desktop_normal); + mDrawableId = R.drawable.ic_qs_expanded_desktop_off; + } + + mTextView.setText(mLabel); + mTextView.setCompoundDrawablesWithIntrinsicBounds(0, mDrawableId, 0, 0); + } +} \ No newline at end of file From bdf3d0c041bf84cbe2cfe29fded665230e1db620 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 16:32:05 +0200 Subject: [PATCH 096/710] Enable animateScreenLights only for devices running 4.2+ animateScreenLights is needed for CRT effect which is not currently available for 4.1 devices, anyway... This fixes some weird display on/off issues on these devices. --- src/com/ceco/gm2/gravitybox/SystemWideResources.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/SystemWideResources.java b/src/com/ceco/gm2/gravitybox/SystemWideResources.java index 9e654f70cf..f7cd2f0dc6 100644 --- a/src/com/ceco/gm2/gravitybox/SystemWideResources.java +++ b/src/com/ceco/gm2/gravitybox/SystemWideResources.java @@ -2,6 +2,7 @@ import android.content.res.XModuleResources; import android.content.res.XResources; +import android.os.Build; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; @@ -11,7 +12,9 @@ public static void initResources(final XSharedPreferences prefs) { try { XModuleResources modRes = XModuleResources.createInstance(GravityBox.MODULE_PATH, null); - XResources.setSystemWideReplacement("android", "bool", "config_animateScreenLights", true); + if (Build.VERSION.SDK_INT > 16) { + XResources.setSystemWideReplacement("android", "bool", "config_animateScreenLights", true); + } boolean holoBgDither = prefs.getBoolean(GravityBoxSettings.PREF_KEY_HOLO_BG_DITHER, false); if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_HOLO_BG_SOLID_BLACK, false)) { From d858f76c36b98647f52efbeaca2562d217f45259 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 17:36:38 +0200 Subject: [PATCH 097/710] AppPickerPreference: allow custom summary when no app selected --- .../gravitybox/preference/AppPickerPreference.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java index a4c81e73c3..e3faaf7f7e 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java @@ -31,7 +31,7 @@ import android.widget.ProgressBar; public class AppPickerPreference extends DialogPreference implements OnItemClickListener { - private static final String SEPARATOR = "#C3C0#"; + public static final String SEPARATOR = "#C3C0#"; private Context mContext; private ListView mListView; @@ -39,6 +39,7 @@ public class AppPickerPreference extends DialogPreference implements OnItemClick private EditText mSearch; private ProgressBar mProgressBar; private AsyncTask mAsyncTask; + private String mDefaultSummaryText; private enum AppIconLoadingState { NOT_LOADED, @@ -50,8 +51,9 @@ public AppPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; - setDialogLayoutResource(R.layout.app_picker_preference); + mDefaultSummaryText = (String) getSummary(); + setDialogLayoutResource(R.layout.app_picker_preference); setPositiveButtonText(null); } @@ -106,10 +108,10 @@ protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { if (restoreValue) { String value = getPersistedString(null); String appName = getAppNameFromValue(value); - setSummary(appName == null ? mContext.getString(R.string.app_picker_none) : appName); + setSummary(appName == null ? mDefaultSummaryText : appName); } else { setValue(null); - setSummary(mContext.getString(R.string.app_picker_none)); + setSummary(mDefaultSummaryText); } } @@ -173,7 +175,7 @@ private void setValue(String value){ public void onItemClick(AdapterView parent, View view, int position, long id) { AppItem item = (AppItem) parent.getItemAtPosition(position); setValue(item.getValue()); - setSummary(item.getAppName()); + setSummary(item.getValue() == null ? mDefaultSummaryText : item.getAppName()); getDialog().dismiss(); } From 95c0e25ef7a764ed8f21d5fe0d1532954ed1256c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 17:43:32 +0200 Subject: [PATCH 098/710] Allow linking of notification panel clock to any specified app --- res/values-cs/strings.xml | 4 +- res/values-sk/strings.xml | 4 +- res/values/strings.xml | 4 +- res/xml/gravitybox.xml | 7 ++- .../gm2/gravitybox/GravityBoxSettings.java | 4 +- .../ceco/gm2/gravitybox/ModCenterClock.java | 53 +++++++++++++------ 6 files changed, 47 insertions(+), 29 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 509c399f0a..3d090f9a6b 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -464,8 +464,8 @@ Aplikace nebyla nalezena! - Vazba na aplikaci Hodiny - Naváže hodiny notifikačního panelu na aplikaci Hodiny namísto nastavení data a času + 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… diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 6f0ac1f9d3..b190bb5034 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -461,8 +461,8 @@ Aplikácia nebola nájdená! - Väzba na aplikáciu Hodiny - Naviaže hodiny notifikačného panelu na aplikáciu Hodiny namiesto nastavenia dátumu a času + 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… diff --git a/res/values/strings.xml b/res/values/strings.xml index 9837b985ea..c3a566c6dd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -473,8 +473,8 @@ Custom app not found! - Link to DeskClock - Links notification panel clock to DeskClock app instead of Date&Time settings + Notification panel clock app + Links notification panel clock to a specified app instead of Date&Time settings Waiting for response from GravityBox system framework… diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 5253230ccc..2e90634fb1 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -323,11 +323,10 @@ android:title="@string/pref_clock_hide_title" android:defaultValue="false" /> - + android:summary="@string/pref_clock_link_summary" /> 16 ? @@ -157,7 +161,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { mClockExpanded.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - launchDeskClock(); + launchClockApp(); } }); } @@ -296,15 +300,16 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { Intent.class, boolean.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (!mClockLink) return; + if (mClockLink == null) return; Intent i = (Intent) param.args[0]; - if (i == null || i.getAction() == null) return; - - if (i.getAction().equals(Intent.ACTION_QUICK_CLOCK)) { - i.setAction(Intent.ACTION_MAIN); - i.addCategory(Intent.CATEGORY_LAUNCHER); - i.setPackage("com.android.deskclock"); + if (i != null && Intent.ACTION_QUICK_CLOCK.equals(i.getAction())) { + final ComponentName cn = getComponentNameFromClockLink(); + if (cn != null) { + i = new Intent(); + i.setComponent(cn); + param.args[0] = i; + } } } }); @@ -383,21 +388,35 @@ private static void setClockPosition(boolean center) { mClockCentered = center; } - private static void launchDeskClock() { - if (mContext == null || !mClockLink) return; + private static ComponentName getComponentNameFromClockLink() { + if (mClockLink == null) return null; try { - Intent i = new Intent(Intent.ACTION_MAIN); - i.addCategory(Intent.CATEGORY_LAUNCHER); - i.setPackage("com.android.deskclock"); + String[] splitValue = mClockLink.split(AppPickerPreference.SEPARATOR); + ComponentName cn = new ComponentName(splitValue[0], splitValue[1]); + return cn; + } catch (Exception e) { + log("Error getting ComponentName from clock link: " + e.getMessage()); + return null; + } + } + + private static void launchClockApp() { + if (mContext == null || mClockLink == null) return; + + try { + Intent i = new Intent(); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + i.setComponent(getComponentNameFromClockLink()); mContext.startActivity(i); if (mPhoneStatusBar != null) { XposedHelpers.callMethod(mPhoneStatusBar, Build.VERSION.SDK_INT > 16 ? "animateCollapsePanels" : "animateCollapse"); } + } catch (ActivityNotFoundException e) { + log("Error launching assigned app for clock: " + e.getMessage()); } catch (Throwable t) { - log(t.getMessage()); + XposedBridge.log(t); } } } \ No newline at end of file From 82cf63792d099dd1a4ffb1fb5c5c59a002a5d572 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 17:54:08 +0200 Subject: [PATCH 099/710] Reset Expanded Desktop state at startup --- src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java index e3dc6229cb..f795e4c35f 100644 --- a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java +++ b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java @@ -409,15 +409,18 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { try { mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); mPhoneWindowManager = param.thisObject; - + + Settings.System.putInt(mContext.getContentResolver(), + SETTING_EXPANDED_DESKTOP_STATE, 0); + IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_EXPANDED_DESKTOP_MODE_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); From 48d598ba43a06a9bd4af106ee35da4d7f65af096 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 14 Sep 2013 18:15:48 +0200 Subject: [PATCH 100/710] Additional custom app for Hardware key actions --- res/values-cs/strings.xml | 6 ++++-- res/values-sk/strings.xml | 6 ++++-- res/values/arrays.xml | 2 ++ res/values/strings.xml | 6 ++++-- res/xml/gravitybox.xml | 5 +++++ src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 2 ++ src/com/ceco/gm2/gravitybox/ModHwKeys.java | 11 +++++++---- 7 files changed, 28 insertions(+), 10 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 3d090f9a6b..ef4f75dd9d 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -458,8 +458,10 @@ Dlouhé podržení Domů - Spustit aplikaci - Nastavit aplikaci ke spuštění + 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! diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index b190bb5034..a8525eb45f 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -455,8 +455,10 @@ Dlhé podržanie Domov - Spustiť aplikáciu - Nastaviť aplikáciu na spustenie + 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á! diff --git a/res/values/arrays.xml b/res/values/arrays.xml index ca5be15e48..8d3e9c7dda 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -174,6 +174,7 @@ @string/hwkey_action_sleep @string/hwkey_action_recent_apps @string/hwkey_action_custom_app + @string/hwkey_action_custom_app2 @@ -185,6 +186,7 @@ 5 6 7 + 8 diff --git a/res/values/strings.xml b/res/values/strings.xml index c3a566c6dd..6e676c0c21 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -467,8 +467,10 @@ Home key long-press action - Launch custom app - Set custom app + Launch custom app 1 + Set custom app 1 + Launch custom app 2 + Set custom app 2 No custom app assigned! Custom app not found! diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 2e90634fb1..aba58c62ae 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -591,6 +591,11 @@ android:title="@string/pref_hwkey_custom_app_title" android:summary="@string/app_picker_none" /> + + Date: Sun, 15 Sep 2013 11:15:22 +0200 Subject: [PATCH 101/710] Expanded Desktop improvements - better approach for hiding status bar - don't reset expanded desktop state at startup - update metrics after status bar view is made for it to scale properly - minor 4.3 specific compatibility fix --- .../gm2/gravitybox/ModExpandedDesktop.java | 88 ++++++++----------- .../gm2/gravitybox/ModStatusbarColor.java | 5 ++ 2 files changed, 43 insertions(+), 50 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java index f795e4c35f..031727a51c 100644 --- a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java +++ b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java @@ -38,6 +38,7 @@ public class ModExpandedDesktop { private static boolean mExpandedDesktop; private static int mExpandedDesktopMode; private static Unhook mNavbarShowLwHook; + private static Unhook mStatusbarShowLwHook; public static final String SETTING_EXPANDED_DESKTOP_STATE = "expanded_desktop_state"; public static final String SETTING_EXPANDED_DESKTOP_MODE = "expanded_desktop_mode"; @@ -71,17 +72,24 @@ public void onChange(boolean selfChange) { 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); Settings.System.putInt(mContext.getContentResolver(), SETTING_EXPANDED_DESKTOP_MODE, expandedDesktopMode); + } else if (intent.getAction().equals(ModStatusbarColor.ACTION_PHONE_STATUSBAR_VIEW_MADE)) { + updateSettings(true); } } }; private static void updateSettings() { + updateSettings(false); + } + + private static void updateSettings(boolean forceUpdateDisplayMetrics) { if (mContext == null || mPhoneWindowManager == null) return; try { @@ -95,7 +103,7 @@ private static void updateSettings() { return; } - boolean updateDisplayMetrics = false; + boolean updateDisplayMetrics = false | forceUpdateDisplayMetrics; if (mExpandedDesktop != expandedDesktop) { mExpandedDesktop = expandedDesktop; updateDisplayMetrics = true; @@ -172,51 +180,31 @@ public static void initZygote(final XSharedPreferences prefs) { CLASS_LOCAL_POWER_MANAGER, phoneWindowManagerInitHook); } - XposedHelpers.findAndHookMethod(classPhoneWindowManager, - Build.VERSION.SDK_INT > 16 ? "applyPostLayoutPolicyLw" : "animatingWindowLw", - CLASS_POLICY_WINDOW_STATE, WindowManager.LayoutParams.class, new XC_MethodHook() { + XposedHelpers.findAndHookMethod(classPhoneWindowManager, + Build.VERSION.SDK_INT > 16 ? + "finishPostLayoutPolicyLw" : "finishAnimationLw", new XC_MethodHook() { @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - final Object topFullscreenOpaqueWindowState = - XposedHelpers.getObjectField(param.thisObject, "mTopFullscreenOpaqueWindowState"); - if (topFullscreenOpaqueWindowState == null) return; - - final WindowManager.LayoutParams lp = (WindowManager.LayoutParams) - XposedHelpers.callMethod(topFullscreenOpaqueWindowState, "getAttrs"); - - if (expandedDesktopHidesStatusbar()) { - if (XposedHelpers.getAdditionalInstanceField( - topFullscreenOpaqueWindowState, "wasFullscreen") == null) { - final Boolean wasFullscreen = - (lp.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0; - XposedHelpers.setAdditionalInstanceField( - topFullscreenOpaqueWindowState, "wasFullscreen", wasFullscreen); - - if (DEBUG) { - final Object session = XposedHelpers.getObjectField( - topFullscreenOpaqueWindowState, "mSession"); - final String sessionInfo = session == null ? null : - (String) XposedHelpers.getObjectField(session, "mStringName"); - log("WindowState.wasFullscreen set for " + sessionInfo + " to " + wasFullscreen); - } - } - lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; - } else { - final Boolean wasFullscreen = (Boolean) XposedHelpers.getAdditionalInstanceField( - topFullscreenOpaqueWindowState, "wasFullscreen"); - if (wasFullscreen != null) { - if (!wasFullscreen) { - lp.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; - if (DEBUG) { - final Object session = XposedHelpers.getObjectField( - topFullscreenOpaqueWindowState, "mSession"); - final String sessionInfo = session == null ? null : - (String) XposedHelpers.getObjectField(session, "mStringName"); - log("FULL_SCREEN flag cleared for " + sessionInfo); + 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); + } } - } - XposedHelpers.removeAdditionalInstanceField(topFullscreenOpaqueWindowState, "wasFullscreen"); - } + }); + } + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + if (mStatusbarShowLwHook != null) { + mStatusbarShowLwHook.unhook(); + mStatusbarShowLwHook = null; } } }); @@ -284,7 +272,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenHeight"); } if (expandedDesktopHidesStatusbar()) { - cf.set(pf); + cf.top = pf.top; } shouldRecomputeFrame = true; } @@ -410,11 +398,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); mPhoneWindowManager = param.thisObject; - Settings.System.putInt(mContext.getContentResolver(), - SETTING_EXPANDED_DESKTOP_STATE, 0); - IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED); + intentFilter.addAction(ModStatusbarColor.ACTION_PHONE_STATUSBAR_VIEW_MADE); mContext.registerReceiver(mBroadcastReceiver, intentFilter); mSettingsObserver = new SettingsObserver( @@ -655,8 +641,10 @@ private static ApplicationDisplayMetrics updateApplicationDisplayMetricsLocked( XposedHelpers.callMethod(displayManagerService, "setDisplayInfoOverrideFromWindowManager", XposedHelpers.callMethod(displayContent, "getDisplayId"), displayInfo); - Object animator = XposedHelpers.getObjectField(windowManager, "mAnimator"); - XposedHelpers.callMethod(animator, "setDisplayDimensions", m.dw, m.dh, m.appWidth, m.appHeight); + 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()); diff --git a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java index fd747b2b96..b47fcb7768 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java @@ -39,6 +39,8 @@ public class ModStatusbarColor { private static final String CLASS_BATTERY_CONTROLLER = "com.android.systemui.statusbar.policy.BatteryController"; private static final String CLASS_NOTIF_PANEL_VIEW = "com.android.systemui.statusbar.phone.NotificationPanelView"; + public static final String ACTION_PHONE_STATUSBAR_VIEW_MADE = "gravitybox.intent.action.PHONE_STATUSBAR_VIEW_MADE"; + private static View mPanelBar; private static StatusBarIconManager mIconManager; private static Object mSignalClusterView; @@ -241,6 +243,9 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { int bgColor = prefs.getInt(GravityBoxSettings.PREF_KEY_STATUSBAR_BGCOLOR, Color.BLACK); setStatusbarBgColor(bgColor); applyIconColors(); + + Intent i = new Intent(ACTION_PHONE_STATUSBAR_VIEW_MADE); + context.sendBroadcast(i); } }); From 231b28742249a98b0556f68805a0dbde709d02ff Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 15 Sep 2013 19:15:38 +0200 Subject: [PATCH 102/710] Renamed ModRebootMenu to ModPowerMenu --- src/com/ceco/gm2/gravitybox/GravityBox.java | 4 ++-- .../gm2/gravitybox/{ModRebootMenu.java => ModPowerMenu.java} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/com/ceco/gm2/gravitybox/{ModRebootMenu.java => ModPowerMenu.java} (97%) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index 5cd90c514d..8e3d67ad99 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -156,8 +156,8 @@ 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)) { diff --git a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java similarity index 97% rename from src/com/ceco/gm2/gravitybox/ModRebootMenu.java rename to src/com/ceco/gm2/gravitybox/ModPowerMenu.java index 9cb4f089b8..1d8502ace5 100644 --- a/src/com/ceco/gm2/gravitybox/ModRebootMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -34,7 +34,7 @@ import com.ceco.gm2.gravitybox.adapters.*; -public class ModRebootMenu { +public class ModPowerMenu { private static final String TAG = "ModRebootMenu"; public static final String PACKAGE_NAME = "android"; public static final String CLASS_GLOBAL_ACTIONS = "com.android.internal.policy.impl.GlobalActions"; From 646fe0e3fb15a67964794b2037db2ec94b6df9fd Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 15 Sep 2013 20:01:38 +0200 Subject: [PATCH 103/710] Added Screenshot action to power menu --- res/drawable-hdpi/ic_lock_screenshot.png | Bin 0 -> 1326 bytes res/drawable-xhdpi/ic_lock_screenshot.png | Bin 0 -> 1437 bytes res/values/strings.xml | 3 + src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 165 +++++++++++++++++- 4 files changed, 159 insertions(+), 9 deletions(-) create mode 100644 res/drawable-hdpi/ic_lock_screenshot.png create mode 100644 res/drawable-xhdpi/ic_lock_screenshot.png diff --git a/res/drawable-hdpi/ic_lock_screenshot.png b/res/drawable-hdpi/ic_lock_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef76f77333551445c5fed8a3c4e95d81a11027b GIT binary patch literal 1326 zcmV+}1=0G6P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ-kV!;ARCwC#m%(v^Fc3wbGQLM8s05_~ z(}A4|Ob2lXp@TRT5Le*1g3y7T3QQ_6sbF)k!hjn6)@$!GkJ5G%*WD)m~+);8D^_)%=?x>nJ(bX5F`vLtlzg z7hVD@QC|Q9qOW%UYjNNVm55DhdQ>?O2a@s$fPEjizKGc(uxgw2stMq8?1pncHh^_` ze~Uod2Ots+yarac0L=UKU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ-|4BqaRCwC#SnYL!FciJ%aR5e0CulY( z8^{Kw8`ud-C$Jl6C$LUnJApcZZU7tH{xEa6vcL-m3?IYr3@7UY$H308k>q1C)E_8IS{MsP7>baP!#+@0f3^01(q7ba=I_bEZGpz!#^8-MZPVQZiR_W*gz)Zh9F*rD{ zK<auVY<9l>k5wyDsiFT zD*g0=to&^0fv}>kkyfX4C`eS*?`9|d$&QqfH$hV1RurY1k?2Sl_{6-LS6KVhggY9^ zn2ALfI?#l9t&2_+;q)g&>A?>v8>CFhY=9k r)oM7X3?2xlExpanded desktop is ON Expanded desktop is OFF + + Screenshot + diff --git a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java index 1d8502ace5..78ac433578 100644 --- a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -10,13 +10,20 @@ import android.app.AlertDialog; +import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.content.ServiceConnection; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.IBinder; +import android.os.Message; +import android.os.Messenger; import android.os.PowerManager; +import android.os.RemoteException; +import android.os.UserHandle; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; @@ -41,6 +48,7 @@ public class ModPowerMenu { public static final String CLASS_ACTION = "com.android.internal.policy.impl.GlobalActions.Action"; private static Context mContext; + private static Handler mHandler; private static String mRebootStr; private static String mRebootSoftStr; private static String mRecoveryStr; @@ -50,6 +58,7 @@ public class ModPowerMenu { private static Drawable mRecoveryIcon; private static Drawable mBootloaderIcon; private static Drawable mExpandedDesktopIcon; + private static Drawable mScreenshotIcon; private static List mRebootItemList; private static String mRebootConfirmStr; private static String mRebootConfirmRecoveryStr; @@ -57,6 +66,7 @@ public class ModPowerMenu { private static String mExpandedDesktopStr; private static String mExpandedDesktopOnStr; private static String mExpandedDesktopOffStr; + private static String mScreenshotStr; private static Unhook mRebootActionHook; private static void log(String message) { @@ -73,6 +83,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mContext = (Context) param.args[0]; + mHandler = (Handler) XposedHelpers.getObjectField(param.thisObject, "mHandler"); Context gbContext = mContext.createPackageContext( GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY); Resources res = mContext.getResources(); @@ -89,12 +100,14 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mExpandedDesktopStr = gbRes.getString(R.string.action_expanded_desktop_title); mExpandedDesktopOnStr = gbRes.getString(R.string.action_expanded_desktop_on); mExpandedDesktopOffStr = gbRes.getString(R.string.action_expanded_desktop_off); + mScreenshotStr = gbRes.getString(R.string.screenshot); mRebootIcon = gbRes.getDrawable(R.drawable.ic_lock_reboot); mRebootSoftIcon = gbRes.getDrawable(R.drawable.ic_lock_reboot_soft); mRecoveryIcon = gbRes.getDrawable(R.drawable.ic_lock_recovery); mBootloaderIcon = gbRes.getDrawable(R.drawable.ic_lock_bootloader); mExpandedDesktopIcon = gbRes.getDrawable(R.drawable.ic_lock_expanded_desktop); + mScreenshotIcon = gbRes.getDrawable(R.drawable.ic_lock_screenshot); mRebootItemList = new ArrayList(); mRebootItemList.add(new BasicIconListItem(mRebootStr, null, mRebootIcon, null)); @@ -135,6 +148,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @SuppressWarnings("unchecked") List mItems = (List) XposedHelpers.getObjectField(param.thisObject, "mItems"); BaseAdapter mAdapter = (BaseAdapter) XposedHelpers.getObjectField(param.thisObject, "mAdapter"); + int index = 1; + Object action; if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { // try to find out if reboot action item already exists in the list of GlobalActions items @@ -186,27 +201,32 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { "onPress", new XC_MethodReplacement () { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - showDialog(); + showRebootDialog(); return null; } }); } else { log("Existing Reboot action item NOT found! Adding new RebootAction item"); - Object action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new RebootAction()); // add to the second position - mItems.add(1, action); - mAdapter.notifyDataSetChanged(); + mItems.add(index++, action); } } + // Add screenshot + action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + new ScreenshotAction(mHandler)); + mItems.add(index++, action); + // Add Expanded Desktop action if enabled if (isExpandedDesktopEnabled(mContext)) { - Object action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new ExpandedDesktopAction()); - mItems.add(mItems.size() - 1, action); - mAdapter.notifyDataSetChanged(); + mItems.add(index++, action); } + + mAdapter.notifyDataSetChanged(); } }); } catch (Throwable t) { @@ -214,7 +234,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } } - private static void showDialog() { + private static void showRebootDialog() { if (mContext == null) { log("mContext is null - aborting"); return; @@ -331,7 +351,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl return v; } else if (methodName.equals("onPress")) { - showDialog(); + showRebootDialog(); return null; } else if (methodName.equals("onLongPress")) { handleReboot(mContext, mRebootStr, 0); @@ -428,4 +448,131 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl } } } + + private static class ScreenshotAction implements InvocationHandler { + private Context mContext; + private Handler mHandler; + + public ScreenshotAction(Handler handler) { + mHandler = handler; + } + + final Object mScreenshotLock = new Object(); + ServiceConnection mScreenshotConnection = null; + + final Runnable mScreenshotTimeout = new Runnable() { + @Override public void run() { + synchronized (mScreenshotLock) { + if (mScreenshotConnection != null) { + mContext.unbindService(mScreenshotConnection); + mScreenshotConnection = null; + } + } + } + }; + + private void takeScreenshot() { + if (mContext == null || mHandler == null) return; + + try { + synchronized (mScreenshotLock) { + if (mScreenshotConnection != null) { + return; + } + ComponentName cn = new ComponentName("com.android.systemui", + "com.android.systemui.screenshot.TakeScreenshotService"); + Intent intent = new Intent(); + intent.setComponent(cn); + ServiceConnection conn = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + synchronized (mScreenshotLock) { + if (mScreenshotConnection != this) { + return; + } + Messenger messenger = new Messenger(service); + Message msg = Message.obtain(null, 1); + final ServiceConnection myConn = this; + Handler h = new Handler(mHandler.getLooper()) { + @Override + public void handleMessage(Message msg) { + synchronized (mScreenshotLock) { + if (mScreenshotConnection == myConn) { + mContext.unbindService(mScreenshotConnection); + mScreenshotConnection = null; + mHandler.removeCallbacks(mScreenshotTimeout); + } + } + } + }; + msg.replyTo = new Messenger(h); + msg.arg1 = msg.arg2 = 0; + + /* wait for the dialog box to close */ + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + } + + /* take the screenshot */ + try { + messenger.send(msg); + } catch (RemoteException e) { + } + } + } + @Override + public void onServiceDisconnected(ComponentName name) {} + }; + if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) { + mScreenshotConnection = conn; + mHandler.postDelayed(mScreenshotTimeout, 10000); + } + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + String methodName = method.getName(); + + if (methodName.equals("create")) { + mContext = (Context) args[0]; + Resources res = mContext.getResources(); + LayoutInflater li = (LayoutInflater) args[3]; + int layoutId = res.getIdentifier( + "global_actions_item", "layout", "android"); + View v = li.inflate(layoutId, (ViewGroup) args[2], false); + + ImageView icon = (ImageView) v.findViewById(res.getIdentifier( + "icon", "id", "android")); + icon.setImageDrawable(mScreenshotIcon); + + TextView messageView = (TextView) v.findViewById(res.getIdentifier( + "message", "id", "android")); + messageView.setText(mScreenshotStr); + + TextView statusView = (TextView) v.findViewById(res.getIdentifier( + "status", "id", "android")); + statusView.setVisibility(View.GONE); + + return v; + } else if (methodName.equals("onPress")) { + takeScreenshot(); + return null; + } else if (methodName.equals("onLongPress")) { + return true; + } else if (methodName.equals("showDuringKeyguard")) { + return true; + } else if (methodName.equals("showBeforeProvisioning")) { + return true; + } else if (methodName.equals("isEnabled")) { + return true; + } else { + return null; + } + } + } } \ No newline at end of file From ce85860dc726ee56c0462986a928c6e4a96349a9 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 15 Sep 2013 20:20:19 +0200 Subject: [PATCH 104/710] ModPowerMenu cleanup --- src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 226 +++++++++--------- 1 file changed, 115 insertions(+), 111 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java index 78ac433578..dad950feba 100644 --- a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -23,7 +23,6 @@ import android.os.Messenger; import android.os.PowerManager; import android.os.RemoteException; -import android.os.UserHandle; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; @@ -46,6 +45,7 @@ public class ModPowerMenu { public static final String PACKAGE_NAME = "android"; public static final String CLASS_GLOBAL_ACTIONS = "com.android.internal.policy.impl.GlobalActions"; public static final String CLASS_ACTION = "com.android.internal.policy.impl.GlobalActions.Action"; + private static final boolean DEBUG = false; private static Context mContext; private static Handler mHandler; @@ -124,7 +124,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mRebootConfirmBootloaderStr = String.format(gbRes.getString(R.string.reboot_confirm_bootloader), gbRes.getString(Utils.isTablet() ? R.string.device_tablet : R.string.device_phone)); - log("GlobalActions constructed, resources set."); + if (DEBUG) log("GlobalActions constructed, resources set."); } }); @@ -133,7 +133,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { if (mRebootActionHook != null) { - log("Unhooking previous hook of reboot action item"); + if (DEBUG) log("Unhooking previous hook of reboot action item"); mRebootActionHook.unhook(); mRebootActionHook = null; } @@ -151,12 +151,13 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { int index = 1; Object action; + // Add/hook reboot action if enabled if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { // try to find out if reboot action item already exists in the list of GlobalActions items // strategy: // 1) check if Action has mIconResId field or mMessageResId field // 2) check if the name of the corresponding resource contains "reboot" or "restart" substring - log("Searching for existing reboot action item..."); + if (DEBUG) log("Searching for existing reboot action item..."); Object rebootActionItem = null; Resources res = mContext.getResources(); for (Object o : mItems) { @@ -164,7 +165,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { try { Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - log("Drawable resName = " + resName); + if (DEBUG) log("Drawable resName = " + resName); if (resName.contains("reboot") || resName.contains("restart")) { rebootActionItem = o; break; @@ -181,7 +182,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { try { Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - log("Text resName = " + resName); + if (DEBUG) log("Text resName = " + resName); if (resName.contains("reboot") || resName.contains("restart")) { rebootActionItem = o; break; @@ -196,17 +197,17 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } if (rebootActionItem != null) { - log("Existing Reboot action item found! Replacing onPress()"); + if (DEBUG) log("Existing Reboot action item found! Replacing onPress()"); mRebootActionHook = XposedHelpers.findAndHookMethod(rebootActionItem.getClass(), "onPress", new XC_MethodReplacement () { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - showRebootDialog(); + RebootAction.showRebootDialog(mContext); return null; } }); } else { - log("Existing Reboot action item NOT found! Adding new RebootAction item"); + if (DEBUG) log("Existing Reboot action item NOT found! Adding new RebootAction item"); action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new RebootAction()); // add to the second position @@ -214,13 +215,13 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } } - // Add screenshot + // Add screenshot action action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new ScreenshotAction(mHandler)); mItems.add(index++, action); // Add Expanded Desktop action if enabled - if (isExpandedDesktopEnabled(mContext)) { + if (ExpandedDesktopAction.isExpandedDesktopEnabled(mContext)) { action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new ExpandedDesktopAction()); mItems.add(index++, action); @@ -234,95 +235,95 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } } - private static void showRebootDialog() { - if (mContext == null) { - log("mContext is null - aborting"); - return; - } - - try { - log("about to build reboot dialog"); + private static class RebootAction implements InvocationHandler { + private Context mContext; - AlertDialog.Builder builder = new AlertDialog.Builder(mContext) - .setTitle(mRebootStr) - .setAdapter(new IconListAdapter(mContext, mRebootItemList), new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - log("onClick() item = " + which); - handleReboot(mContext, mRebootStr, which); - } - }) - .setNegativeButton(android.R.string.no, - new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - AlertDialog dialog = builder.create(); - dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); - dialog.show(); - } catch (Throwable t) { - XposedBridge.log(t); + public RebootAction() { } - } - private static void handleReboot(Context context, String caption, final int mode) { - try { - final PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); - String message = mRebootConfirmStr; - if (mode == 2) { - message = mRebootConfirmRecoveryStr; - } else if (mode == 3) { - message = mRebootConfirmBootloaderStr; + public static void showRebootDialog(final Context context) { + if (context == null) { + if (DEBUG) log("Context is null - aborting"); + return; } - AlertDialog.Builder builder = new AlertDialog.Builder(mContext) - .setTitle(caption) - .setMessage(message) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + try { + if (DEBUG) log("about to build reboot dialog"); - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - if (mode == 0) { - pm.reboot(null); - } else if (mode == 1) { - 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 ipm = XposedHelpers.callStaticMethod(classIpm, "asInterface", b); - XposedHelpers.callMethod(ipm, "crash", "Hot reboot"); - } else if (mode == 2) { - pm.reboot("recovery"); - } else if (mode == 3) { - pm.reboot("bootloader"); + AlertDialog.Builder builder = new AlertDialog.Builder(context) + .setTitle(mRebootStr) + .setAdapter(new IconListAdapter(context, mRebootItemList), new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + if (DEBUG) log("onClick() item = " + which); + handleReboot(context, mRebootStr, which); } - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - AlertDialog dialog = builder.create(); - dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); - dialog.show(); - } catch (Throwable t) { - XposedBridge.log(t); + }) + .setNegativeButton(android.R.string.no, + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + AlertDialog dialog = builder.create(); + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); + dialog.show(); + } catch (Throwable t) { + XposedBridge.log(t); + } } - } - private static class RebootAction implements InvocationHandler { - private Context mContext; + private static void handleReboot(Context context, String caption, final int mode) { + try { + final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + String message = mRebootConfirmStr; + if (mode == 2) { + message = mRebootConfirmRecoveryStr; + } else if (mode == 3) { + message = mRebootConfirmBootloaderStr; + } - public RebootAction() { + AlertDialog.Builder builder = new AlertDialog.Builder(context) + .setTitle(caption) + .setMessage(message) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + if (mode == 0) { + pm.reboot(null); + } else if (mode == 1) { + 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 ipm = XposedHelpers.callStaticMethod(classIpm, "asInterface", b); + XposedHelpers.callMethod(ipm, "crash", "Hot reboot"); + } else if (mode == 2) { + pm.reboot("recovery"); + } else if (mode == 3) { + pm.reboot("bootloader"); + } + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + AlertDialog dialog = builder.create(); + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); + dialog.show(); + } catch (Throwable t) { + XposedBridge.log(t); + } } @Override @@ -351,7 +352,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl return v; } else if (methodName.equals("onPress")) { - showRebootDialog(); + showRebootDialog(mContext); return null; } else if (methodName.equals("onLongPress")) { handleReboot(mContext, mRebootStr, 0); @@ -366,17 +367,6 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl return null; } } - - } - - private static boolean isExpandedDesktopEnabled(Context context) { - return (Settings.System.getInt(mContext.getContentResolver(), - ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_MODE, 0) != 0); - } - - private static boolean isExpandedDesktopOn(Context context) { - return (Settings.System.getInt(context.getContentResolver(), - ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, 0) == 1); } private static class ExpandedDesktopAction implements InvocationHandler { @@ -387,21 +377,35 @@ private static class ExpandedDesktopAction implements InvocationHandler { public ExpandedDesktopAction() { } + public static boolean isExpandedDesktopEnabled(Context context) { + return (Settings.System.getInt(context.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_MODE, 0) != 0); + } + + public static boolean isExpandedDesktopOn(Context context) { + return (Settings.System.getInt(context.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, 0) == 1); + } + private void updateStatus() { mStatus.setText(isExpandedDesktopOn(mContext) ? mExpandedDesktopOnStr : mExpandedDesktopOffStr); } private void toggleStatus() { - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - Settings.System.putInt(mContext.getContentResolver(), - ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, - isExpandedDesktopOn(mContext) ? 0 : 1); - updateStatus(); - } - }, 200); + try { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Settings.System.putInt(mContext.getContentResolver(), + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, + isExpandedDesktopOn(mContext) ? 0 : 1); + updateStatus(); + } + }, 200); + } catch (Throwable t) { + XposedBridge.log(t); + } }; @Override From 52c84814d6f20c6c232ef09939fe9762ba4ae9a6 Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Mon, 16 Sep 2013 09:52:19 +0300 Subject: [PATCH 105/710] Updated Russian translation --- res/values-ru/strings.xml | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index b13cf6ec46..8c31bf8739 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -72,7 +72,10 @@ Запись… Записано Удержите для записи - Косниться чтобы остановить запись + Коснитесь чтобы остановить запись + Отключено + Нормальный + Расширенный Иконки быстрых настроек в статусбаре @@ -98,6 +101,7 @@ Быстрая запись Настройки Звук + Расширенный рабочий стол Выбор цвета @@ -463,14 +467,16 @@ Действие по долгому нажатию Home - Запустить приложение - Выбрать приложение + Запустить приложение 1 + Выбрать приложение 1 + Запустить приложение 2 + Выбрать приложение 2 Приложение не выбрано! Приложение не найдено! - Связать с DeskClock - Связывает часы на статусбаре с приложение DeskClock вместо настроек Даты и времени + Приложение-часы для панели уведомлений + Связывает часы на статусбаре с выбранным приложением вместо настроек Даты и времени Ожидание отклика от системного фреймворка GravityBox… @@ -480,6 +486,17 @@ Национальный роуминг Подключаться к службам передачи данных в национальном роуминге + + Расширенный рабочий стол + Отключено + Спрятать статусбар + Спрятать панель навигации + Прятать все + Расширенный рабочий стол + Расшренный рабочий стол ВКЛЮЧЕН + Расшренный рабочий стол ВЫКЛЮЧЕН + + + Снимок экрана + - - From 55d0ff05102301751840531d234a988374c2a0ee Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 14:46:13 +0200 Subject: [PATCH 106/710] HW Key Actions: added action to show menu (mimics MENU key) --- res/values/arrays.xml | 2 ++ res/values/strings.xml | 3 +++ .../gm2/gravitybox/GravityBoxSettings.java | 1 + src/com/ceco/gm2/gravitybox/ModHwKeys.java | 27 +++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 8d3e9c7dda..816c6c2fb5 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -175,6 +175,7 @@ @string/hwkey_action_recent_apps @string/hwkey_action_custom_app @string/hwkey_action_custom_app2 + @string/hwkey_action_menu @@ -187,6 +188,7 @@ 6 7 8 + 9 diff --git a/res/values/strings.xml b/res/values/strings.xml index 24725e044b..53172740f1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -499,4 +499,7 @@ Screenshot + + Show menu + diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index eef7f08c3b..cd3b5c44d0 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -186,6 +186,7 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece 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_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"; diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index 949584817c..06524c6117 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -13,6 +13,7 @@ import android.content.pm.ResolveInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; +import android.hardware.input.InputManager; import android.os.Build; import android.os.Handler; import android.os.PowerManager; @@ -419,6 +420,8 @@ private static void performAction(HwKeyTrigger keyTrigger) { } else if (action == GravityBoxSettings.HWKEY_ACTION_CUSTOM_APP || action == GravityBoxSettings.HWKEY_ACTION_CUSTOM_APP2) { launchCustomApp(action); + } else if (action == GravityBoxSettings.HWKEY_ACTION_MENU) { + injectMenuKey(); } } @@ -594,4 +597,28 @@ public void run() { } ); } + + private static void injectMenuKey() { + 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, + KeyEvent.KEYCODE_MENU, 0), 0); + XposedHelpers.callMethod(inputManager, "injectInputEvent", + new KeyEvent(eventTime - 50, eventTime - 25, KeyEvent.ACTION_UP, + KeyEvent.KEYCODE_MENU, 0), 0); + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }); + } } \ No newline at end of file From 41cb80dc460f1b5d297c2b814ed1b27b9aa52305 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 15:01:04 +0200 Subject: [PATCH 107/710] HW Key Actions: added action for toggling Expanded Desktop --- res/values/arrays.xml | 2 ++ res/values/strings.xml | 4 +++ .../gm2/gravitybox/GravityBoxSettings.java | 1 + src/com/ceco/gm2/gravitybox/ModHwKeys.java | 33 +++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 816c6c2fb5..62b22ebc4e 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -176,6 +176,7 @@ @string/hwkey_action_custom_app @string/hwkey_action_custom_app2 @string/hwkey_action_menu + @string/hwkey_action_expanded_desktop @@ -189,6 +190,7 @@ 7 8 9 + 10 diff --git a/res/values/strings.xml b/res/values/strings.xml index 53172740f1..1771824862 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -502,4 +502,8 @@ Show menu + + Toggle expanded desktop + Expanded desktop mode is disabled! + diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index cd3b5c44d0..c4df88c7d7 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -187,6 +187,7 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece 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_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"; diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index 06524c6117..a1b6192435 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -7,6 +7,7 @@ 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; @@ -19,6 +20,7 @@ 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; @@ -54,6 +56,7 @@ public class ModHwKeys { 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; @@ -317,6 +320,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_LONGPRESS_CHANGED); @@ -422,6 +426,8 @@ private static void performAction(HwKeyTrigger keyTrigger) { launchCustomApp(action); } else if (action == GravityBoxSettings.HWKEY_ACTION_MENU) { injectMenuKey(); + } else if (action == GravityBoxSettings.HWKEY_ACTION_EXPANDED_DESKTOP) { + toggleExpandedDesktop(); } } @@ -621,4 +627,31 @@ public void run() { } }); } + + 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 = Settings.System.getInt(resolver, + ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_MODE, 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); + } + } + }); + } } \ No newline at end of file From 185bc1a410666dc0219cad62b383e439bb9517d9 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 15:04:49 +0200 Subject: [PATCH 108/710] Fixed Czech translations --- res/values-cs/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index ef4f75dd9d..b1850d93a7 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -5,7 +5,8 @@ Styl indikátoru baterie Základní - Kruhový s procenty + Kruhový bez procent + Kruhový s procenty Procentuální text stavu baterie Žádný From fb1b09a15cd4c70602fac9a0b6cc85b6e838b5f9 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 15:24:39 +0200 Subject: [PATCH 109/710] Added hasNavigationBar to GB Settings SystemProperties --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 4 ++++ src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index c4df88c7d7..5ff089cf5a 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -316,6 +316,7 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece private static final class SystemProperties { public boolean hasGeminiSupport; public boolean isTablet; + public boolean hasNavigationBar; public SystemProperties(Bundle data) { if (data.containsKey("hasGeminiSupport")) { @@ -324,6 +325,9 @@ public SystemProperties(Bundle data) { if (data.containsKey("isTablet")) { isTablet = data.getBoolean("isTablet"); } + if (data.containsKey("hasNavigationBar")) { + hasNavigationBar = data.getBoolean("hasNavigationBar"); + } } } diff --git a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java index b30c4d53e3..abe1b9d725 100644 --- a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java +++ b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.res.Resources; import android.os.Bundle; import android.os.ResultReceiver; import de.robv.android.xposed.XC_MethodHook; @@ -40,10 +41,14 @@ public void onReceive(Context context, Intent intent) { log("Broadcast received: " + intent.toString()); if (intent.getAction().equals(ACTION_GET_SYSTEM_PROPERTIES) && intent.hasExtra("receiver")) { + final Resources res = context.getResources(); ResultReceiver receiver = intent.getParcelableExtra("receiver"); Bundle data = new Bundle(); data.putBoolean("hasGeminiSupport", Utils.hasGeminiSupport()); data.putBoolean("isTablet", Utils.isTablet()); + data.putBoolean("hasNavigationBar", res.getBoolean( + res.getIdentifier("config_showNavigationBar", + "bool", "android"))); receiver.send(RESULT_SYSTEM_PROPERTIES, data); } } From 76d9bec6a59143da67a4ef6c1f096d495d51d8f0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 16:19:38 +0200 Subject: [PATCH 110/710] Navigation bar tweaks - master switch for overriding system defaults - option to enable/disable navigation bar --- res/values/strings.xml | 8 ++++++++ res/xml/gravitybox.xml | 18 ++++++++++++++++++ .../gm2/gravitybox/GravityBoxSettings.java | 18 +++++++++++++++++- .../gm2/gravitybox/SystemWideResources.java | 10 ++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1771824862..b422022f1c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -506,4 +506,12 @@ 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 + Enable navigation bar + Requires reboot + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index aba58c62ae..d3afbf2e06 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -363,6 +363,24 @@ + + + + + + + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -310,7 +313,8 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece PREF_KEY_HOLO_BG_SOLID_BLACK, PREF_KEY_HOLO_BG_DITHER, PREF_KEY_SCREEN_DIM_LEVEL, - PREF_KEY_BRIGHTNESS_MASTER_SWITCH + PREF_KEY_BRIGHTNESS_MASTER_SWITCH, + PREF_KEY_NAVBAR_ENABLE )); private static final class SystemProperties { @@ -493,6 +497,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private PreferenceScreen mPrefCatMedia; private CheckBoxPreference mPrefSafeMediaVolume; private ListPreference mPrefExpandedDesktop; + private CheckBoxPreference mPrefNavbarEnable; @SuppressWarnings("deprecation") @Override @@ -612,6 +617,8 @@ public void onCreate(Bundle savedInstanceState) { mPrefExpandedDesktop = (ListPreference) findPreference(PREF_KEY_EXPANDED_DESKTOP); + mPrefNavbarEnable = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_ENABLE); + // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); @@ -688,6 +695,10 @@ private void setDefaultValues() { e.commit(); mQuickSettings.setValues(defVal); } + + final boolean value = mPrefs.getBoolean(PREF_KEY_NAVBAR_ENABLE, sSystemProperties.hasNavigationBar); + mPrefs.edit().putBoolean(PREF_KEY_NAVBAR_ENABLE, value).commit(); + mPrefNavbarEnable.setChecked(value); } private void updatePreferences(String key) { @@ -820,6 +831,11 @@ private void updatePreferences(String key) { if (key == null || key.equals(PREF_KEY_EXPANDED_DESKTOP)) { mPrefExpandedDesktop.setSummary(mPrefExpandedDesktop.getEntry()); } + + if (key == null || key.equals(PREF_KEY_NAVBAR_OVERRIDE)) { + final boolean override = mPrefs.getBoolean(PREF_KEY_NAVBAR_OVERRIDE, false); + mPrefNavbarEnable.setEnabled(override); + } } @Override diff --git a/src/com/ceco/gm2/gravitybox/SystemWideResources.java b/src/com/ceco/gm2/gravitybox/SystemWideResources.java index f7cd2f0dc6..4f733cfdae 100644 --- a/src/com/ceco/gm2/gravitybox/SystemWideResources.java +++ b/src/com/ceco/gm2/gravitybox/SystemWideResources.java @@ -1,5 +1,6 @@ package com.ceco.gm2.gravitybox; +import android.content.res.Resources; import android.content.res.XModuleResources; import android.content.res.XResources; import android.os.Build; @@ -10,6 +11,8 @@ public class SystemWideResources { public static void initResources(final XSharedPreferences prefs) { try { + Resources systemRes = XResources.getSystem(); + XModuleResources modRes = XModuleResources.createInstance(GravityBox.MODULE_PATH, null); if (Build.VERSION.SDK_INT > 16) { @@ -28,6 +31,13 @@ public static void initResources(final XSharedPreferences prefs) { XResources.setSystemWideReplacement( "android", "drawable", "background_holo_light", modRes.fwd(R.drawable.background_holo_light)); } + + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_OVERRIDE, false)) { + XResources.setSystemWideReplacement("android", "bool", "config_showNavigationBar", + prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_ENABLE, + systemRes.getBoolean(systemRes.getIdentifier( + "config_showNavigationBar", "bool", "android")))); + } } catch (Throwable t) { XposedBridge.log(t); } From c40086f61214c26e0f48fb49e6beaf9bff545690 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Mon, 16 Sep 2013 18:14:51 +0200 Subject: [PATCH 111/710] Updated French translation --- res/values-fr/strings.xml | 44 ++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index c2fcc0ed1f..acaea5755a 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -73,6 +73,9 @@ Enregistré Appui long pour enregistrer Touchez pour stopper l\'enregistrement + Désactivé + Normal + Étendu Touches des paramètres rapides @@ -98,6 +101,7 @@ Enregistrement rapide Réglages Volume + Bureau étendu Sélecteur de couleur @@ -463,21 +467,51 @@ Appui long touche Home - Lancer l\'appli personnalisée - Définir l\'appli personnalisée + 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 ! - Lien vers Horloge - Crée un lien du panneau de notification vers l\'appli Horloge au lieu des paramètres Date et Heure + 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. Sortie + 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 de statuT + 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 + Activer la barre de navigation + Nécessite un redémarrage + From f16eccbfacc272f7139e3c8251a6f63037e39608 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 18:19:00 +0200 Subject: [PATCH 112/710] Navigation bar tweaks - option to set navbar height (for portrait orientation) - option to set navbar width (for landscape orientation) --- res/values/strings.xml | 6 +++- res/xml/gravitybox.xml | 22 +++++++++++++ .../gm2/gravitybox/GravityBoxSettings.java | 21 +++++++++++- .../gm2/gravitybox/ModExpandedDesktop.java | 33 +++++++++++++++++-- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index b422022f1c..9e3c6fe9a2 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -510,8 +510,12 @@ Navigation bar tweaks Contains various navigation bar related tweaks Override system defaults - Master switch for navigation bar tweaks + Master switch for navigation bar tweaks (requires reboot) Enable navigation bar Requires reboot + Navigation bar height + Applies to portrait orientation + Navigation bar width + Applies to landscape orientation diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index d3afbf2e06..1d71244f67 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -379,6 +379,28 @@ android:title="@string/pref_navbar_enable_title" android:summary="@string/pref_navbar_enable_summary" /> + + + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, @@ -314,6 +319,7 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece PREF_KEY_HOLO_BG_DITHER, PREF_KEY_SCREEN_DIM_LEVEL, PREF_KEY_BRIGHTNESS_MASTER_SWITCH, + PREF_KEY_NAVBAR_OVERRIDE, PREF_KEY_NAVBAR_ENABLE )); @@ -498,6 +504,8 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private CheckBoxPreference mPrefSafeMediaVolume; private ListPreference mPrefExpandedDesktop; private CheckBoxPreference mPrefNavbarEnable; + private SeekBarPreference mPrefNavbarHeight; + private SeekBarPreference mPrefNavbarWidth; @SuppressWarnings("deprecation") @Override @@ -618,6 +626,8 @@ public void onCreate(Bundle savedInstanceState) { mPrefExpandedDesktop = (ListPreference) findPreference(PREF_KEY_EXPANDED_DESKTOP); mPrefNavbarEnable = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_ENABLE); + mPrefNavbarHeight = (SeekBarPreference) findPreference(PREF_KEY_NAVBAR_HEIGHT); + mPrefNavbarWidth = (SeekBarPreference) findPreference(PREF_KEY_NAVBAR_WIDTH); // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { @@ -832,9 +842,12 @@ private void updatePreferences(String key) { mPrefExpandedDesktop.setSummary(mPrefExpandedDesktop.getEntry()); } - if (key == null || key.equals(PREF_KEY_NAVBAR_OVERRIDE)) { + 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); + mPrefNavbarHeight.setEnabled(override && mPrefNavbarEnable.isChecked()); + mPrefNavbarWidth.setEnabled(override && mPrefNavbarEnable.isChecked()); } } @@ -1031,6 +1044,12 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 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_WIDTH)) { + intent.setAction(ACTION_PREF_NAVBAR_CHANGED); + intent.putExtra(EXTRA_NAVBAR_WIDTH, prefs.getInt(PREF_KEY_NAVBAR_WIDTH, 100)); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java index 031727a51c..1325abe905 100644 --- a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java +++ b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java @@ -39,6 +39,9 @@ public class ModExpandedDesktop { private static int mExpandedDesktopMode; private static Unhook mNavbarShowLwHook; private static Unhook mStatusbarShowLwHook; + private static boolean mNavbarOverride; + private static float mNavbarHeightScaleFactor = 1; + private static float mNavbarWidthScaleFactor = 1; public static final String SETTING_EXPANDED_DESKTOP_STATE = "expanded_desktop_state"; public static final String SETTING_EXPANDED_DESKTOP_MODE = "expanded_desktop_mode"; @@ -81,6 +84,16 @@ public void onReceive(Context context, Intent intent) { SETTING_EXPANDED_DESKTOP_MODE, expandedDesktopMode); } 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_WIDTH)) { + mNavbarWidthScaleFactor = + (float)intent.getIntExtra(GravityBoxSettings.EXTRA_NAVBAR_WIDTH, 100) / 100f; + } + updateSettings(true); } } }; @@ -143,16 +156,19 @@ private static void updateSettings(boolean forceUpdateDisplayMetrics) { navigationBarHeightForRotation[portraitRotation] = navigationBarHeightForRotation[upsideDownRotation] = - mContext.getResources().getDimensionPixelSize(resHeightId); + (int) (mContext.getResources().getDimensionPixelSize(resHeightId) + * mNavbarHeightScaleFactor); navigationBarHeightForRotation[landscapeRotation] = navigationBarHeightForRotation[seascapeRotation] = - mContext.getResources().getDimensionPixelSize(resHeightLandscapeId); + (int) (mContext.getResources().getDimensionPixelSize(resHeightLandscapeId) + * mNavbarHeightScaleFactor); navigationBarWidthForRotation[portraitRotation] = navigationBarWidthForRotation[upsideDownRotation] = navigationBarWidthForRotation[landscapeRotation] = navigationBarWidthForRotation[seascapeRotation] = - mContext.getResources().getDimensionPixelSize(resWidthId); + (int) (mContext.getResources().getDimensionPixelSize(resWidthId) + * mNavbarWidthScaleFactor); } XposedHelpers.setObjectField(mPhoneWindowManager, "mNavigationBarWidthForRotation", navigationBarWidthForRotation); @@ -171,6 +187,14 @@ 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; + mNavbarWidthScaleFactor = + (float) prefs.getInt(GravityBoxSettings.PREF_KEY_NAVBAR_WIDTH, 100) / 100f; + } + if (Build.VERSION.SDK_INT > 16) { XposedHelpers.findAndHookMethod(classPhoneWindowManager, "init", Context.class, CLASS_IWINDOW_MANAGER, CLASS_WINDOW_MANAGER_FUNCS, phoneWindowManagerInitHook); @@ -401,6 +425,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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( From 13ff8c423f5afb56435433e2bb22f1e3af1a36e0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 18:31:19 +0200 Subject: [PATCH 113/710] Shift index correctly according to existence of stock reboot action --- src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 89 ++++++++++--------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java index dad950feba..7d46ed7363 100644 --- a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -151,51 +151,51 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { int index = 1; Object action; - // Add/hook reboot action if enabled - if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { - // try to find out if reboot action item already exists in the list of GlobalActions items - // strategy: - // 1) check if Action has mIconResId field or mMessageResId field - // 2) check if the name of the corresponding resource contains "reboot" or "restart" substring - if (DEBUG) log("Searching for existing reboot action item..."); - Object rebootActionItem = null; - Resources res = mContext.getResources(); - for (Object o : mItems) { - // search for drawable - try { - Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); - String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - if (DEBUG) log("Drawable resName = " + resName); - if (resName.contains("reboot") || resName.contains("restart")) { - rebootActionItem = o; - break; - } - } catch (NoSuchFieldError nfe) { - // continue - } catch (Resources.NotFoundException resnfe) { - // continue - } catch (IllegalArgumentException iae) { - // continue + // try to find out if reboot action item already exists in the list of GlobalActions items + // strategy: + // 1) check if Action has mIconResId field or mMessageResId field + // 2) check if the name of the corresponding resource contains "reboot" or "restart" substring + if (DEBUG) log("Searching for existing reboot action item..."); + Object rebootActionItem = null; + Resources res = mContext.getResources(); + for (Object o : mItems) { + // search for drawable + try { + Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); + String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); + if (DEBUG) log("Drawable resName = " + resName); + if (resName.contains("reboot") || resName.contains("restart")) { + rebootActionItem = o; + break; } - - // search for text - try { - Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); - String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - if (DEBUG) log("Text resName = " + resName); - if (resName.contains("reboot") || resName.contains("restart")) { - rebootActionItem = o; - break; - } - } catch (NoSuchFieldError nfe) { - // continue - } catch (Resources.NotFoundException resnfe) { - // continue - } catch (IllegalArgumentException iae) { - // continue + } catch (NoSuchFieldError nfe) { + // continue + } catch (Resources.NotFoundException resnfe) { + // continue + } catch (IllegalArgumentException iae) { + // continue + } + + // search for text + try { + Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); + String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); + if (DEBUG) log("Text resName = " + resName); + if (resName.contains("reboot") || resName.contains("restart")) { + rebootActionItem = o; + break; } + } catch (NoSuchFieldError nfe) { + // continue + } catch (Resources.NotFoundException resnfe) { + // continue + } catch (IllegalArgumentException iae) { + // continue } - + } + + // Add/hook reboot action if enabled + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { if (rebootActionItem != null) { if (DEBUG) log("Existing Reboot action item found! Replacing onPress()"); mRebootActionHook = XposedHelpers.findAndHookMethod(rebootActionItem.getClass(), @@ -211,8 +211,11 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new RebootAction()); // add to the second position - mItems.add(index++, action); + mItems.add(index, action); } + index++; + } else if (rebootActionItem != null) { + index++; } // Add screenshot action From 1d5dd0c300e597d1b4c18c63aa99b9392f4499a3 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 16 Sep 2013 19:31:33 +0200 Subject: [PATCH 114/710] Navigation bar: option to always show menu key --- res/values/strings.xml | 1 + res/xml/gravitybox.xml | 5 ++ src/com/ceco/gm2/gravitybox/GravityBox.java | 5 ++ .../gm2/gravitybox/GravityBoxSettings.java | 8 ++ .../ceco/gm2/gravitybox/ModNavigationBar.java | 81 +++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 src/com/ceco/gm2/gravitybox/ModNavigationBar.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 9e3c6fe9a2..e2adf91b0b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -517,5 +517,6 @@ Applies to portrait orientation Navigation bar width Applies to landscape orientation + Always show menu key diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 1d71244f67..3107ac032b 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -401,6 +401,11 @@ monitorBoxUnit="%" android:defaultValue="100" /> + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, @@ -506,6 +508,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private CheckBoxPreference mPrefNavbarEnable; private SeekBarPreference mPrefNavbarHeight; private SeekBarPreference mPrefNavbarWidth; + private CheckBoxPreference mPrefNavbarMenukey; @SuppressWarnings("deprecation") @Override @@ -628,6 +631,7 @@ public void onCreate(Bundle savedInstanceState) { mPrefNavbarEnable = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_ENABLE); mPrefNavbarHeight = (SeekBarPreference) findPreference(PREF_KEY_NAVBAR_HEIGHT); mPrefNavbarWidth = (SeekBarPreference) findPreference(PREF_KEY_NAVBAR_WIDTH); + mPrefNavbarMenukey = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_MENUKEY); // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { @@ -848,6 +852,7 @@ private void updatePreferences(String key) { mPrefNavbarEnable.setEnabled(override); mPrefNavbarHeight.setEnabled(override && mPrefNavbarEnable.isChecked()); mPrefNavbarWidth.setEnabled(override && mPrefNavbarEnable.isChecked()); + mPrefNavbarMenukey.setEnabled(override && mPrefNavbarEnable.isChecked()); } } @@ -1050,6 +1055,9 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { } 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)); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/ModNavigationBar.java b/src/com/ceco/gm2/gravitybox/ModNavigationBar.java new file mode 100644 index 0000000000..79f0cd493d --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/ModNavigationBar.java @@ -0,0 +1,81 @@ +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.XSharedPreferences; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; + +public class ModNavigationBar { + public static final String PACKAGE_NAME = "com.android.systemui"; + private static final String TAG = "GB:ModNavigationBar"; + private static final boolean DEBUG = false; + + private static final String CLASS_NAVBAR_VIEW = "com.android.systemui.statusbar.phone.NavigationBarView"; + + private static boolean mAlwaysShowMenukey; + private static Object mNavigationBarView; + + 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(GravityBoxSettings.ACTION_PREF_NAVBAR_CHANGED)) { + if (intent.hasExtra(GravityBoxSettings.EXTRA_NAVBAR_MENUKEY)) { + mAlwaysShowMenukey = intent.getBooleanExtra( + GravityBoxSettings.EXTRA_NAVBAR_MENUKEY, false); + if (DEBUG) log("mAlwaysShowMenukey = " + mAlwaysShowMenukey); + if (mNavigationBarView != null) { + try { + final boolean showMenu = XposedHelpers.getBooleanField( + mNavigationBarView, "mShowMenu"); + XposedHelpers.callMethod(mNavigationBarView, + "setMenuVisibility", showMenu, true); + } catch (Throwable t) { + XposedBridge.log(t); + } + } + } + } + } + }; + + public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { + try { + final Class navbarViewClass = XposedHelpers.findClass(CLASS_NAVBAR_VIEW, classLoader); + + mAlwaysShowMenukey = prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_MENUKEY, false); + + XposedBridge.hookAllConstructors(navbarViewClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + Context context = (Context) param.args[0]; + if (context == null) return; + + mNavigationBarView = param.thisObject; + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(GravityBoxSettings.ACTION_PREF_NAVBAR_CHANGED); + context.registerReceiver(mBroadcastReceiver, intentFilter); + if (DEBUG) log("NavigationBarView constructed; Broadcast receiver registered"); + } + }); + + XposedHelpers.findAndHookMethod(navbarViewClass, "setMenuVisibility", + boolean.class, boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + param.args[0] = (Boolean) param.args[0] || mAlwaysShowMenukey; + } + }); + } catch(Throwable t) { + XposedBridge.log(t); + } + } +} From c757022c814e1202e83a307fe2b7d7910d4daf2a Mon Sep 17 00:00:00 2001 From: ch-vox Date: Mon, 16 Sep 2013 19:51:23 +0200 Subject: [PATCH 115/710] Updated French translation here we go ! --- res/values-fr/strings.xml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index acaea5755a..c527eac71f 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -510,8 +510,13 @@ 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 + Interrupteur général pour les modifications de la barre de navigation (redémarrage nécessaire) Activer la barre de navigation - Nécessite un redémarrage + Redémarrage nécessaire + Hauteur barre de navigation + Valable pour l\'orientation portrait + Largeur barre de navigation + Valable pour l\'orientation paysage + Toujours afficher la touche menu From 6298eb72607a92d0253bed64157280faea6140be Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Tue, 17 Sep 2013 15:50:25 +0300 Subject: [PATCH 116/710] Updated Russian translation --- res/values-ru/strings.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 8c31bf8739..9c2e5ba972 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -499,4 +499,24 @@ Снимок экрана - + + Показать меню + + + Включить расширенный рабочий стол + Расширенный рабочий стол отключен! + + + Настройки панели навигации + Содержит различные настройки панели навигации + Переписать настройки по умолчанию + Позволяет включить все твики панели навигации (Необходима перезагрузка) + Включить панель навигации + Необходима перезагрузка + Высота панели навигации + Применимо к портретной ориентации + Ширина панели навигации + Применимо к ландшафтной ориентации + Всегда показывать кнопку меню + + \ No newline at end of file From ea078e453f95910f3c98e45c523b2713d2688c2d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 17 Sep 2013 18:21:55 +0200 Subject: [PATCH 117/710] Potential fix for S4 Google Edition Volume panel - adds slider group ViewGroup if missing - handle exception in reorderSliders to prevent phone from crashing --- .../ceco/gm2/gravitybox/ModVolumePanel.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index fc682cdc0e..dd55d010c1 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -7,7 +7,9 @@ import android.content.Intent; import android.content.IntentFilter; import android.view.View; +import android.view.ViewGroup; import android.view.View.OnClickListener; +import android.widget.LinearLayout; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; @@ -82,6 +84,39 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } }); + XposedHelpers.findAndHookMethod(classVolumePanel, "reorderSliders", int.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final Object streamControls = XposedHelpers.getObjectField(param.thisObject, "mStreamControls"); + if (streamControls == null) { + XposedHelpers.callMethod(param.thisObject, "createSliders"); + } + + final Object sliderGroup = XposedHelpers.getObjectField(param.thisObject, "mSliderGroup"); + if (sliderGroup == null) { + final Context context = (Context) XposedHelpers.getObjectField( + param.thisObject, "mContext"); + LinearLayout sg = new LinearLayout(context); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + 0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f); + sg.setLayoutParams(lp); + sg.setOrientation(LinearLayout.VERTICAL); + ViewGroup vg = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, "mPanel"); + vg.addView(sg, 0); + ((ViewGroup)vg.getParent()).requestLayout(); + ((ViewGroup)vg.getParent()).invalidate(); + XposedHelpers.setObjectField(param.thisObject, "mSliderGroup", sg); + } + } + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + if (param.hasThrowable()) { + XposedBridge.log(param.getThrowable()); + param.setThrowable(null); + } + } + }); + XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() { @Override From 4466c4613a11c2da9c818360e2ce8a702a19d680 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 17 Sep 2013 18:39:57 +0200 Subject: [PATCH 118/710] Updated Slovak translations --- res/values-sk/strings.xml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index a8525eb45f..2a86088ff3 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -72,6 +72,9 @@ Zaznamenané Podržte pre záznam Dotykom zastavíte záznam + Vypnuté + Normálna plocha + Rozšírená plocha Dlaždice QuickSettings panelu @@ -95,6 +98,8 @@ GravityBox Uspať Rýchly záznam zvuku + Hlasitosť + Rozšírená plocha Výber farby @@ -474,4 +479,37 @@ 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 orientáciu na výšku + Šírka navigačnej lišty + Pre orientáciu na šírku + Vždy zobraziť menu tlačidlo + From de7f1b13126e1abf7603e5038a2853c235b55bce Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 17 Sep 2013 18:49:39 +0200 Subject: [PATCH 119/710] Updatec Czech translations --- res/values-cs/strings.xml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index b1850d93a7..afb8069a3e 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -76,6 +76,9 @@ Zaznamenáno Podržte pro záznam Dotykem zastavíte záznam + Vypnuto + Normální plocha + Rozšířená plocha Dlaždice QuickSettings panelu @@ -99,6 +102,8 @@ GravityBox Uspát Rychlý záznam zvuku + Hlasitost + Rozšířená plocha Výběr barvy @@ -478,4 +483,37 @@ 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 orientaci na výšku + Šířka navigační lišty + Pro orientaci na šířku + Vždy zobrazit menu tlačítko + From 7ad99687e864bd220fe06576d8b5b67754f0b237 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 17 Sep 2013 19:04:40 +0200 Subject: [PATCH 120/710] Updated Indonesian translations (thanks to awaaas) --- res/values-in/strings.xml | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 2f8aaa665c..726a1be9ab 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -73,6 +73,9 @@ Direkam Tahan untuk merekam Sentuh untuk berhenti merekam + Dimatikan + Normal + Diperluas Kotak-kotak QuickSettings Statusbar @@ -97,6 +100,8 @@ Matikan layar Rekam Cepat Setting + Volume + Perluasan Desktop Pilihan Warna @@ -133,6 +138,7 @@ %s anda akan reboot %s anda akan reboot ke recovery + %s anda akan reboot ke bootloader Animasi layar mati CRT @@ -463,6 +469,8 @@ Jalankan aplikasi kustom Tetapkan aplikasi kustom + Jalankan aplikasi kustom2 + Tetapkan aplikasi kustom 2 Tidak ada aplikasi kustom yang ditetapkan! Aplikasi kustom tidak ditemukan! @@ -478,4 +486,37 @@ 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 + Lebar navigation bar + Berlaku untuk orientasi lanskap/tidur + Selalu tampilkan tombol menu + From ba4a1636c7167b1f9a1cf3df0b1a9e06f183b573 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 17 Sep 2013 19:10:01 +0200 Subject: [PATCH 121/710] Updated Chinese translations (thanks to jwchen119) --- res/values-zh-rCN/strings.xml | 522 ++++++++++++++++++++++++++++++++++ res/values-zh-rTW/strings.xml | 69 ++++- 2 files changed, 576 insertions(+), 15 deletions(-) create mode 100644 res/values-zh-rCN/strings.xml diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..f9d4630f3b --- /dev/null +++ b/res/values-zh-rCN/strings.xml @@ -0,0 +1,522 @@ + + + + GravityBox + + 电量指示图桉样式 + 原厂电量指示图桉 + 圆形电量图示(不包含百分比) + 圆形电量图示(包含百分比) + 电量百分比文字 + + + 音量键跳过曲目 + 当萤幕关闭时,长按音量键以跳过曲目 + + 低电量警告 + 弹出视窗以及音效 + 仅弹出视窗 + 仅音效 + 关闭 + + 重新启动以后才会套用更动 + + 自动隐藏讯号强度图示 + 隐藏指定 SIM 卡槽的讯号强度图示(若该卡槽未插入 SIM 卡时)、停用「SIM 卡未插入」提醒 + 自动隐藏 SIM 卡槽 1 + 自动隐藏 SIM 卡槽 2 + 关闭提醒 + 「SIM 卡未插入」提醒已停用 + + 进阶重新启动选单 + 启用有重新启动至 Recovery 选项的进阶重新启动选单 + Recovery + Bootloader + + 音量键游标控制 + 在文字输入区域内,以音量键控制游标位置 + 停用 + 音量增/减钮控制游标向左/向右 + 音量增/减钮控制游标向右/向左 + + 清除全部最近使用的应用程式 + + 修正「日期与时间设定」错误 + 当您进入日期与时间设定时发生错误时,启用这个选项(需要重新启动) + + 修正通话的来电显示 + 若您来电画面上显示的联络人与您的通讯录不合,启用这个选项(需要重新启动) + 为了让更动生效,您应该在重新启动后删除并重新添加所有联络人!(请于 设定>应用程式>全部 分页中找寻「联络人」应用程式并且选择清除资料) + + 修正简讯的来电显示 + 如果来自同一个人的简讯被分成不同的会话串,启用这个选项(需要重新启动) + 为了让更动生效,您应该在重新启动后,于「讯息」应用程式内删除全部被拆散的会话串! + + 修正「行事曆」应用程式 + 若您週期性地遇到萤幕自动开启时,启用这个选项(需要重新启动) + + 重要 + + 全萤幕的来电者相片 + 在来电画面内显示来电者的全萤幕相片 + + + 同步处理开启 + 同步处理关闭 + Wi-Fi AP 开启 + Wi-Fi AP 关闭 + 手电筒开启 + 手电筒关闭 + 按下以关闭 + 播放中… + 录音中… + 已录音 + 长按以录音 + 按下以停止录音 + 关闭 + 正常 + 开启 + + + 状态列快速设定磁贴 + 可以设定状态列的快速设定内,各个磁贴选项的显示或隐藏 + 拥有者 + 飞航模式 + 电池状态 + Wi-Fi + 蓝牙 + GPS + 资料连结 + 网路模式 + 资料用量 + 情境模式 + 亮度 + 休眠 + 自动旋转 + 同步功能 + Wi-Fi 存取点 + 手电筒 + GravityBox + 关闭萤幕 + 快速录音 + 设定 + 音量 + 全萤幕功能 + + + 颜色选择器 + 在颜色上按下以套用 + + + 状态列背景颜色 + 可在此设定状态列的背景颜色与透明度 + + + 修正语音设定 + 解锁位在语言与输入设定内的「文字转语音输出」设定(需要重新启动) + + + 进阶的开发人员选项 + 解锁进阶的开发人员选项(需要重新启动) + + + 状态列调校 + 包含各种状态列的调校选项 + 杂项 + 包含所有不属于特定类别的调校选项 + 通用修正 + 包含 MTK6589 通用的修正。请只在有需要时使用。 + + + 关于 + 由 C3C076@XDA 编写。点选此处以拜访官方的讨论串。 + Xposed 框架 + 由 rovo89@XDA 编写。点选此处以拜访官方的讨论串。 + 捐助 + 若您觉得这个 app 好用的话,请贊助我!也请考虑捐助给编写出优秀的 Xposed 框架的 rovo89。 + + + 您的 %s 将重新启动 + 您的 %s 将重新启动至 Recovery + 您的 %s 将重新启动至 Bootloader + + + CRT 萤幕关闭特效 + 当萤幕关闭时,使用旧式 CRT 萤幕关闭时的特效 + + + 工程模式 + 启动「工程模式」应用程式 + + + 双 SIM 卡铃声 + 启动可以设定各个 SIM 卡的铃声与通知音效的应用程式 + + + 锁定画面调校 + 包含各种锁定画面的调校选项 + 锁定画面背景 + 背景样式 + 预设桌布 + 纯色 + 自订图桉 + 设定自订颜色 + 可以为锁定画面设定自订的背景颜色 + 设定自订影像 + 可以为锁定画面设定自订的背景影像 + 背景已更改 + 背景未更改 + 其他 + 最大化小工具 + 若启用这个选项,锁定画面的小工具预设都会被最大化 + + + 电源调校 + 包含各种电源相关的调校选项 + + + 停用 LED 闪烁 + 停掉当低电量且未充电时会出现的扰人 LED 闪烁 + + + 显示调校 + 包含各种显示相关的调校选项 + + + 最低亮度层级 + 可以设定最低的亮度层级。在手动设定亮度时适用。(需要重新启动) + 设定值的范围:10 – 80 + + + 自动亮度层级 + 可以设置环境的亮度层级与相对应的 LCD 背光值 + 层级 + 最大照度(lux) + 亮度(10 – 255) + 指定的值不被接受 + 不建议将亮度设为 10 以下 + 亮度无法大于 255 + 值无法低于 0 + 较低层级的值无法大于较高层级的值 + 较高层级的值无法小于较低层级的值 + 已设定%s 的值 + 已储存新的自动亮度组态 + 「没有」储存新的自动亮度组态 + + + 启用锁定画面旋转 + 警告:若 AOSP 的锁定萤幕曾被厂商修改,某些装置的解锁环目标可能遭到互换 + + + 启用选单键 + 令选单键在锁定画面可以用来快速地解锁装置(需要重新启动) + + + 修正讯息的唤醒锁 + 避免在收到新讯息时唤醒萤幕(需要重新启动) + + + 时钟置中 + + + 媒体调校 + 包含各种媒体与声音系统的调校选项 + + + 更多音乐音量的调整段数 + 为音乐串流添加更多的音量调整段数(需要重新启动) + + + 安全的耳机媒体音量 + 启用或停用安全的耳机媒体音量功能 + + + 停用充电 LED 灯号 + 停用当充电时会亮起的 LED 灯号 + + + 实体按键动作 + 可在此为实体按键设定自订的动作 + 选单键长按动作 + 选单键双击动作 + 返回键长按动作 + 预设 + 搜寻 + 语音搜寻 + 切换至上一个应用程式 + 结束正在使用的应用程式 + 使装置休眠 + 结束应用程式的长按延迟 + 适用于「结束正在使用的应用程式」动作。定义按键需要按下持续多久才会触发动作 + 双击速度 + 适用于选单键的双击动作。定义按键需要在多少时间内连续按两下才会触发动作 + 应用程式已结束 + 无应用程式可结束 + 找不到上一个应用程式 + + + 电话调校 + 包含各种通话的调校选项 + + + 响铃时的手机翻转动作 + 可定义在响铃时,翻转使得萤幕向下时执行的动作 + + 铃声静音 + 拒接电话 + + + 停用接通时的震动 + 停用在通话接通时所触发的震动 + + + 软重启 + + + 纯黑色背景 + 在预设的 Holo 系统内建佈景主题内使用纯黑色的背景,而不是黑-灰色的渐层(需要重新启动) + + + 每列磁贴数 + 定义快速设定内每列有几个磁贴。磁贴会根据您的设定自动缩放。适用于竖屏。 + + + 显示目前是一週的哪一天 + + + 可扩展音量面板 + 启用此选项使您可以调整不同串流的音量 + + + 将铃声音量与通知音量连结 + 当启用时,铃声音量与通知音量将可以分别调整 + + + 自动切换快速选单 + 当没有通知时,下拉状态列自动切换成快速设定选单 + + + 快速设定选单下拉位置 + 选择下拉状态列边缘启用快速选单的位置 + 关闭 + 右边 + 左边 + + + 关闭音量键唤醒萤幕 + 佳域 G3s 和 G4 的实体音量键会唤醒萤幕 + + + 状态列颜色 + + + 开启更改状态列图示颜色 + + + 状态列图示颜色 + 设定状态列图示和时钟的颜色 + + + 资料传输颜色 + 设定传输资料时的颜色 + + + 管理快速设定选单 + + + 通知列样式 + + + 通知列背景 + 预设背景 + 纯色 + 自订图桉 + 设定背景颜色 + 设定直向图片 + 设定横向图片 + 背景透明度 + 背景模式 + 叠加 + 衬底 + + + 隐藏漫游指示 + 当隐藏时,漫游指示器上的 R 会消失,请小心使用 + + + 充电中 (%d%%) + 电量已满 + %d%% remaining + + + 没有服务 + 飞航模式启用 + 仅能拨打紧急电话 + + + Pie Controls + 启用 Pie Controls + 显示搜寻按键 + 导航键大小 + 触发位置 + 萤幕左边缘 + 萤幕下边缘 + 萤幕右边缘 + 萤幕上边缘 + + + 背光灯行为模式 + 预设 + 关闭背光灯 + 当萤幕唤醒时背光灯永远打开 + 背光灯通知效果 + 这个设定是实验性的!当收到通知时背光灯会闪烁提醒。建议当您的装置没有 LED 通知灯时才开启,此功能可能会消耗部分电量 + + + 隐藏海苔条 + 当 Pie Controls 启用时隐藏海苔条(需要重新启动) + + + 优化 Holo 背景 + 取代原本不完美渐层的预设 Holo 黑-灰色背景(需要重新启动) + + + 关闭实体按键 + 当 Pie Controls 启用时将会关闭选单键、返回键与 HOME 键功能,但是实体按键功能仍可使用(如果您的装置有实体按键) + + + 使用 Holo 黑色背景主题 + 将 GravityBox 的 Holo 白色背景主题换成 Holo 黑色背景主题 + + + 关闭 + 左上角 + 右上角 + 左下角 + 右下角 + + + Adjust top margin + + + 关闭漫游警告 + 关闭当漫游时传送讯息或拨打电话的警告 + + + 搜寻 + (无) + + + 快速应用程式选单 + 快速应用程式选单设定 + 主要应用程式 + 长按应用程式槽 1 + 长按应用程式槽 2 + 长按应用程式槽 3 + 长按应用程式槽 4 + + + 开启 GPS + 关闭 GPS + + + 总是显示选单按键 + + + 铃声模式 + + + 时钟设定 + + + 隐藏 AM/PM + + + 隐藏时钟 + + + 触发位置大小 + + + 透明度调整 + 启动器下的状态列透明度 + 锁定画面时的状态列透明度 + 启动器下的海苔条透明度 + 锁定画面时的海苔条透明度 + + + 隐藏闹钟图示 + + + Screen dim level + Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + + + 手机 + 平板 + + + 亮度设定 + 启用亮度设定 + 这个功能只能在您的手机支援标准的 Android 亮度调整才启用。如果您遇到任何亮度问题请关闭此选项(需要重新启动) + + + 显示最近使用的应用程式 + + + 长按 HOME 键动作 + + + 执行自订的应用程式 1 + 设定自订应用程式 1 + 执行自订的应用程式 2 + 设定自订应用程式 2 + 没有指定应用程式! + 未找到自订应用程式! + + + 与「时钟」应用程式做连结 + 启用此功能后状态列的时间将与应用程式「时钟」做连结而非原本「日期与时间设定」 + + + 等待 GravityBox 系统框架的回应… + GravityBoy 系统框架无反应。离开中 + + + National data roaming + Connect to data services when nationally roaming + + + 全萤幕模式 + 关闭 + 隐藏状态列 + 隐藏海苔条 + 隐藏状态列与海苔条 + 全萤幕功能 + 全萤幕功能现在为开启状态 + 全萤幕功能现在为关闭状态 + + + 萤幕截图 + + + 显示选单 + + + 切换全萤幕功能 + 全萤幕模式已关闭! + + + 海苔条调教 + 包含各种关于海苔条的调教 + 复盖系统预设值 + 新增海苔条调教的主控键(需要重新启动) + 启用海苔条功能 + 需要重新启动 + 海苔条高度 + 应用于当萤幕呈现直立方向 + 海苔条宽度 + 应用于当萤幕呈现横放方向 + 永远显示选单键 + + \ No newline at end of file diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 1c2b0e302d..7880fa73b1 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -46,7 +46,7 @@ 修正通話的來電顯示 若您來電畫面上顯示的聯絡人與您的通訊錄不合,啟用這個選項(需要重新啟動) - 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. + 為了讓更動生效,您應該在重新啟動後刪除並重新添加所有聯絡人!(請於 設定>應用程式>全部 分頁中找尋「聯絡人」應用程式並且選擇清除資料) 修正簡訊的來電顯示 如果來自同一個人的簡訊被分成不同的會話串,啟用這個選項(需要重新啟動) @@ -73,6 +73,9 @@ 已錄音 長按以錄音 按下以停止錄音 + 關閉 + 正常 + 開啟 狀態列快速設定磁貼 @@ -98,6 +101,7 @@ 快速錄音 設定 音量 + 全螢幕功能 顏色選擇器 @@ -134,7 +138,7 @@ 您的 %s 將重新啟動 您的 %s 將重新啟動至 Recovery - 您的 %s 將重新啟動至 Bootloader. + 您的 %s 將重新啟動至 Bootloader CRT 螢幕關閉特效 @@ -280,12 +284,12 @@ 顯示目前是一週的哪一天 - 可擴展的音量面板 + 可擴展音量面板 啟用此選項使您可以調整不同串流的音量 將鈴聲音量與通知音量連結 - 當關閉時,鈴聲音量與通知音量將可以分別調整 + 當啟用時,鈴聲音量與通知音量將可以分別調整 自動切換快速選單 @@ -328,8 +332,8 @@ 純色 自訂圖案 設定背景顏色 - 設定肖像圖片 - 設定風景圖片 + 設定直向圖片 + 設定橫向圖片 背景透明度 背景模式 疊加 @@ -366,7 +370,7 @@ 關閉背光燈 當螢幕喚醒時背光燈永遠打開 背光燈通知效果 - 這個設定是實驗性的!當收到通知時背光燈會閃爍提醒。當您的裝置沒有 LED 通知燈時才開啟,此功能可能會消耗部分電量 + 這個設定是實驗性的!當收到通知時背光燈會閃爍提醒。建議當您的裝置沒有 LED 通知燈時才開啟,此功能可能會消耗部分電量 隱藏海苔條 @@ -381,7 +385,7 @@ 當 Pie Controls 啟用時將會關閉選單鍵、返回鍵與 HOME 鍵功能,但是實體按鍵功能仍可使用(如果您的裝置有實體按鍵) - 使用 Holo 黑色主題 + 使用 Holo 黑色背景主題 將 GravityBox 的 Holo 白色背景主題換成 Holo 黑色背景主題 @@ -404,7 +408,7 @@ 快速應用程式選單 - QuickApp tile settings + 快速應用程式選單設定 主要應用程式 長按應用程式槽 1 長按應用程式槽 2 @@ -434,7 +438,7 @@ 觸發位置大小 - 管理透明度調整 + 透明度調整 啟動器下的狀態列透明度 鎖定畫面時的狀態列透明度 啟動器下的海苔條透明度 @@ -454,22 +458,24 @@ 亮度設定 啟用亮度設定 - 這個功能只能在您的手機支援標準的 Android 亮度調整。如果您遇到任何亮度問題請關閉此選項(需要重新啟動) + 這個功能只能在您的手機支援標準的 Android 亮度調整才啟用。如果您遇到任何亮度問題請關閉此選項(需要重新啟動) 顯示最近使用的應用程式 - 長按 HOME 鍵行為 + 長按 HOME 鍵動作 - 執行自訂的應用程式 - 設定自訂應用程式 + 執行自訂的應用程式 1 + 設定自訂應用程式 1 + 執行自訂的應用程式 2 + 設定自訂應用程式 2 沒有指定應用程式! 未找到自訂應用程式! - 與應用程式時鐘做連結 + 與「時鐘」應用程式做連結 啟用此功能後狀態列的時間將與應用程式「時鐘」做連結而非原本「日期與時間設定」 @@ -479,5 +485,38 @@ National data roaming Connect to data services when nationally roaming + + + 全螢幕模式 + 關閉 + 隱藏狀態列 + 隱藏海苔條 + 隱藏狀態列與海苔條 + 全螢幕功能 + 全螢幕功能現在為開啟狀態 + 全螢幕功能現在為關閉狀態 + + + 螢幕截圖 + + + 顯示選單 + + + 切換全螢幕功能 + 全螢幕模式已關閉! + + + 海苔條調教 + 包含各種關於海苔條的調教 + 覆蓋系統預設值 + 新增海苔條調教的主控鍵(需要重新啟動) + 啟用海苔條功能 + 需要重新啟動 + 海苔條高度 + 應用於當螢幕呈現直立方向 + 海苔條寬度 + 應用於當螢幕呈現橫放方向 + 永遠顯示選單鍵 \ No newline at end of file From 630b8a3df94539f78299c7d9da359d7dc9d0f94a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 17 Sep 2013 19:13:22 +0200 Subject: [PATCH 122/710] Version 2.4.0 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d66ca53e8e..5d06995f99 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="28" + android:versionName="2.4.0" > Date: Tue, 17 Sep 2013 20:58:55 +0200 Subject: [PATCH 123/710] Updated French translation minor typo correction --- res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index c527eac71f..a12b04d324 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -489,7 +489,7 @@ Mode bureau étendu Désactivé - Masquer la barre de statuT + Masquer la barre de statut Masquer la barre de navigation Masquer les deux Bureau étendu From 18395027a3556b4c9d0c55ac01d6a58c634c83c9 Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Tue, 17 Sep 2013 21:08:28 +0200 Subject: [PATCH 124/710] Updated German Translation Changes in overall visible areas --- res/values-de/strings.xml | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 056e0a0aeb..d4c10295cb 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -96,6 +96,7 @@ Schlafmodus Aufnahme Einstellungen + Erweiterter Desktop Color Picker @@ -130,8 +131,8 @@ 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 + %s wird neu gestartet. + %s startet in die Recovery. CRT screen off effect @@ -263,7 +264,7 @@ Disables vibration that is triggered when call is connected - Soft reboot + Sanfter Neustart Solid black background @@ -342,9 +343,9 @@ %d%% remaining - No service - Airplane mode on - Emergency calls only + Kein Netz + Flugmodus + Nur Notrufe Pie controls @@ -444,4 +445,14 @@ Screen dim level Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + + Expanded desktop mode + Disabled + Hide statusbar + Hide navigation bar + Hide both + Erweiterter Desktop + Erweiterter Desktop ist AN + Erweiterter Desktop ist AUS + From 659e8ffad24a9a2a9dfa723d6b36e15f08214316 Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Tue, 17 Sep 2013 21:12:27 +0200 Subject: [PATCH 125/710] Updated German Translation Add missing strings --- res/values-de/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index d4c10295cb..573359eb62 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -445,6 +445,10 @@ Screen dim level Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + + Telefon + Tablet + Expanded desktop mode Disabled From 4c5aef53a8b150c3e96ba20993e60a5ccc9eb65d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 18 Sep 2013 14:25:27 +0200 Subject: [PATCH 126/710] Expanded desktop: use more exclusive system setting names to avoid conflicts with potential existing ones --- src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java index 1325abe905..fa1a788141 100644 --- a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java +++ b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java @@ -43,8 +43,8 @@ public class ModExpandedDesktop { private static float mNavbarHeightScaleFactor = 1; private static float mNavbarWidthScaleFactor = 1; - public static final String SETTING_EXPANDED_DESKTOP_STATE = "expanded_desktop_state"; - public static final String SETTING_EXPANDED_DESKTOP_MODE = "expanded_desktop_mode"; + public static final String SETTING_EXPANDED_DESKTOP_STATE = "gravitybox_expanded_desktop_state"; + public static final String SETTING_EXPANDED_DESKTOP_MODE = "gravitybox_expanded_desktop_mode"; private static final int SEND_NEW_CONFIGURATION = 18; private static void log(String message) { From 59b46fa9be6ca4112e745cded7827c9d9ddb2302 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 07:26:49 +0200 Subject: [PATCH 127/710] Minor button backlight options improvemenets --- src/com/ceco/gm2/gravitybox/ModDisplay.java | 27 ++++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java index 6a27f1eca6..ce5cd52542 100644 --- a/src/com/ceco/gm2/gravitybox/ModDisplay.java +++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java @@ -81,24 +81,33 @@ public void onReceive(Context context, Intent intent) { } } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON) || intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { - updateButtonBacklight(); + 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; - int color = 0; - if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON) - && (mPm != null && mPm.isScreenOn())) { - color = 0xff6e6e6e; + 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; } - 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); + 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); + } } private static boolean mPendingNotif = false; From 6b12ab1f72b1e302dfd0452960444fed6b99fc62 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 07:30:00 +0200 Subject: [PATCH 128/710] Updated Hungarian translations (thanks to benjoe1) --- res/values-hu/strings.xml | 83 ++++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 22 deletions(-) diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index cbefa7f818..606919723e 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -1,4 +1,4 @@ - + GravityBox @@ -73,20 +73,23 @@ Felvéve Nyomja hosszan a felvételhez Nyomja meg a felvétel leállításához - + Letiltva + Normál + Kiterjesztett + Statusbar Gyorsbeállítások csempéi Mutatja vagy elrejti a Gyorsbeállítások csempéket a statusbar-on Felhasználói profil - Repülő mód + Repülő üzemmód Akkumlátor státusz Wi-Fi Bluetooth GPS Mobil adat - Hálózat mód + Hálózati üzemmód Adat használat - Hang profilok + Audió profilok Fényerő Képernyő időtúllépés Automatikus forgatás @@ -98,7 +101,8 @@ Gyors Felvétel Beállítások Hangerő - + Kiterjesztett asztal + Szín választó Nyomjon a színre a beállításhoz @@ -141,12 +145,12 @@ Animáció engedélyezése, ami a régi CRT kikapcsolási effektet szimulálja a képernyő kikapcsolásakor - Tervező mód - Elindítja a Tervező mód programot + Tervező üzemmód + Elindítja a Tervező üzemmód programot Dual SIM Ringer - Elindítja a programot, ami lehetővé teszi csengőhangok és figyelmeztető hangok beállítást külön, mindkét SIM-hez + 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 @@ -331,7 +335,7 @@ 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 mód + Háttér üzemmód Átfedés Alsó réteg -Underlay- @@ -346,7 +350,7 @@ Nincs szolgáltatás - Airplane mód bekapcsolva + Airplane üzemmód bekapcsolva Csak segélyhívás @@ -361,7 +365,7 @@ Felső képernyőszél - Gomb háttérvilágítás mód + 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 @@ -369,8 +373,8 @@ 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. - Navigation bar elrejtése - Elrejti a Navigation bar-t, ha a Pie Vezérlők engedélyezve vannak -azon eszközöknek, amelyben van navigation bar- (újraindítás szükséges) + 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 @@ -382,7 +386,7 @@ Holo Sötét téma használata - Átkapcsolja a GB UI-t, hogy a Holo sötét témát használja a Holo világos helyett + Á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 @@ -419,7 +423,7 @@ Mindig mutassa a menü gombot - Csengés mód + Csengés üzemmód Óra beállítások @@ -463,14 +467,16 @@ Home gomb hosszú érintés művelete - Egyéni alkalmazás indítása - Egyéni alkalmazás beállítása + 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! - Egyéni alkalmazás nem található! + Az egyéni alkalmazás nem található! - Átirányítás DeskClock-ra - Az értesítési panel órájának megérintésével a DeskClock alkalmazás megnyitása a Dátum&Idő beállításai helyett + É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… @@ -478,6 +484,39 @@ Hazai adat roaming (MVNO) - Csatlakozás adat szolgálatáshoz hazai roaming esetén + Csatlakozás adat szolgáltatáshoz hazai roaming esetén + + Kiterjesztett asztal üzemmód + Letiltva + Statusbar 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 + Álló tájolás módra vonatkozik + Navigációs sáv szélessége + Fekvő tájolás módra vonatkozik + Menü gomb állandó megjelenítése + From d2553d701c7bde1ff5702098b01765fa82f6e056 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 07:31:56 +0200 Subject: [PATCH 129/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index a0cf0c4326..33d977ccad 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -56,6 +56,9 @@ Nagrano Przytrzymaj aby nagrać Dotknij aby zatrzymać + Wyłączony + Normalny + Rozszerzony Kafelki Szybkich Ustawień Pozwala wyświetlić lub ukryć Kafelki Szybkich Ustawień na pasku statusu Profil użytkownika @@ -79,6 +82,7 @@ Dyktafon Ustawienia Głośność + Rozszerzony pulpit Wybór koloru Naciśnij na kolor aby ustawić Kolor tła paska statusu @@ -298,8 +302,10 @@ 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ż najnowsze aplikacje Akcja długiego naciśnięcia HOME - Uruchom własną aplikację - Ustaw własną aplikację + 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 @@ -308,4 +314,27 @@ 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 + Szerokość paska nawigacji + Dotyczy orientacji poziomej + Zawsze pokazuj klawisz menu From c7a501d6e1ee2470bc4d98f722d3107e5232a4fa Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 08:38:42 +0200 Subject: [PATCH 130/710] Revert "Potential fix for S4 Google Edition Volume panel - adds slider group ViewGroup if missing - handle exception in reorderSliders to prevent phone from crashing" This reverts commit ea078e453f95910f3c98e45c523b2713d2688c2d. --- .../ceco/gm2/gravitybox/ModVolumePanel.java | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index dd55d010c1..fc682cdc0e 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -7,9 +7,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.view.View; -import android.view.ViewGroup; import android.view.View.OnClickListener; -import android.widget.LinearLayout; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; @@ -84,39 +82,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } }); - XposedHelpers.findAndHookMethod(classVolumePanel, "reorderSliders", int.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - final Object streamControls = XposedHelpers.getObjectField(param.thisObject, "mStreamControls"); - if (streamControls == null) { - XposedHelpers.callMethod(param.thisObject, "createSliders"); - } - - final Object sliderGroup = XposedHelpers.getObjectField(param.thisObject, "mSliderGroup"); - if (sliderGroup == null) { - final Context context = (Context) XposedHelpers.getObjectField( - param.thisObject, "mContext"); - LinearLayout sg = new LinearLayout(context); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - 0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f); - sg.setLayoutParams(lp); - sg.setOrientation(LinearLayout.VERTICAL); - ViewGroup vg = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, "mPanel"); - vg.addView(sg, 0); - ((ViewGroup)vg.getParent()).requestLayout(); - ((ViewGroup)vg.getParent()).invalidate(); - XposedHelpers.setObjectField(param.thisObject, "mSliderGroup", sg); - } - } - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - if (param.hasThrowable()) { - XposedBridge.log(param.getThrowable()); - param.setThrowable(null); - } - } - }); - XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() { @Override From 63554a90bf6346e9cfd594be602f276e59a3164c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 09:01:44 +0200 Subject: [PATCH 131/710] Expandable volume panel: better handling of mVoiceCapable property --- .../ceco/gm2/gravitybox/ModVolumePanel.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index fc682cdc0e..4220ed0270 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -18,6 +18,7 @@ public class ModVolumePanel { public static final String PACKAGE_NAME = "android"; private static final String CLASS_VOLUME_PANEL = "android.view.VolumePanel"; private static final String CLASS_AUDIO_SERVICE = "android.media.AudioService"; + private static final boolean DEBUG = false; private static int STREAM_RING = 2; private static int STREAM_NOTIFICATION = 5; @@ -75,6 +76,25 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } }); + XposedHelpers.findAndHookMethod(classVolumePanel, "createSliders", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + final boolean voiceCapableOrig = XposedHelpers.getBooleanField(param.thisObject, "mVoiceCapable"); + if (DEBUG) log("createSliders: original mVoiceCapable = " + voiceCapableOrig); + XposedHelpers.setAdditionalInstanceField(param.thisObject, "mGbVoiceCapableOrig", voiceCapableOrig); + XposedHelpers.setBooleanField(param.thisObject, "mVoiceCapable", false); + } + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + final Boolean voiceCapableOrig = (Boolean)XposedHelpers.getAdditionalInstanceField( + param.thisObject, "mGbVoiceCapableOrig"); + if (voiceCapableOrig != null) { + if (DEBUG) log("createSliders: restoring original mVoiceCapable"); + XposedHelpers.setBooleanField(param.thisObject, "mVoiceCapable", voiceCapableOrig); + } + } + }); + XposedHelpers.findAndHookMethod(classVolumePanel, "expand", new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @@ -110,8 +130,6 @@ private static void updateVolumePanelMode(boolean expandable) { mDivider.setVisibility(expandable ? View.VISIBLE : View.GONE); XposedHelpers.setBooleanField(mVolumePanel, "mShowCombinedVolumes", expandable); - XposedHelpers.setBooleanField(mVolumePanel, "mVoiceCapable", false); - XposedHelpers.setObjectField(mVolumePanel, "mStreamControls", null); log("VolumePanel mode changed to: " + ((expandable) ? "EXPANDABLE" : "SIMPLE")); } From f4c95c5aed77742d379f54e7fe5754ded3a57f86 Mon Sep 17 00:00:00 2001 From: pitone02 Date: Thu, 19 Sep 2013 09:47:39 +0200 Subject: [PATCH 132/710] Update strings.xml --- res/values-it/strings.xml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 95a9d1f822..c60b758338 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -478,5 +478,40 @@ 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ù + + + Toggle 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 + Master switch for navigation bar tweaks (requires reboot) + Enable navigation bar + Requires reboot + Navigation bar height + Applies to portrait orientation + Navigation bar width + Applies to landscape orientation + Always show menu key + + From ea53a5ad6b3a979e668cefee4c6b750f21f331f0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 12:56:50 +0200 Subject: [PATCH 133/710] Real fix for S4 Google Edition Expandable Volume Panel - Samsung engineers forgot to initialize volTitle TextView before using it... --- .../ceco/gm2/gravitybox/ModVolumePanel.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index 4220ed0270..78cb3aa946 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -1,5 +1,6 @@ package com.ceco.gm2.gravitybox; +import java.lang.reflect.Field; import java.util.Map; import android.content.BroadcastReceiver; @@ -8,6 +9,7 @@ import android.content.IntentFilter; import android.view.View; import android.view.View.OnClickListener; +import android.widget.TextView; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; @@ -17,6 +19,7 @@ public class ModVolumePanel { private static final String TAG = "ModVolumePanel"; public static final String PACKAGE_NAME = "android"; private static final String CLASS_VOLUME_PANEL = "android.view.VolumePanel"; + private static final String CLASS_STREAM_CONTROL = "android.view.VolumePanel$StreamControl"; private static final String CLASS_AUDIO_SERVICE = "android.media.AudioService"; private static final boolean DEBUG = false; @@ -50,6 +53,7 @@ public void onReceive(Context context, Intent intent) { public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { try { final Class classVolumePanel = XposedHelpers.findClass(CLASS_VOLUME_PANEL, classLoader); + final Class classStreamControl = XposedHelpers.findClass(CLASS_STREAM_CONTROL, classLoader); final Class classAudioService = XposedHelpers.findClass(CLASS_AUDIO_SERVICE, classLoader); XposedBridge.hookAllConstructors(classVolumePanel, new XC_MethodHook() { @@ -102,6 +106,25 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } }); + try { + final Field fldVolTitle = XposedHelpers.findField(classStreamControl, "volTitle"); + if (DEBUG) log("Hooking StreamControl constructor for volTitle field initialization"); + XposedBridge.hookAllConstructors(classStreamControl, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + Context context = (Context) XposedHelpers.getObjectField( + XposedHelpers.getSurroundingThis(param.thisObject), "mContext"); + if (context != null) { + TextView tv = new TextView(context); + fldVolTitle.set(param.thisObject, tv); + if (DEBUG) log("StreamControl: volTitle field initialized"); + } + } + }); + } catch(Throwable t) { + if (DEBUG) log("StreamControl: exception while initializing volTitle field: " + t.getMessage()); + } + XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() { @Override @@ -130,6 +153,7 @@ private static void updateVolumePanelMode(boolean expandable) { mDivider.setVisibility(expandable ? View.VISIBLE : View.GONE); XposedHelpers.setBooleanField(mVolumePanel, "mShowCombinedVolumes", expandable); + XposedHelpers.setObjectField(mVolumePanel, "mStreamControls", null); log("VolumePanel mode changed to: " + ((expandable) ? "EXPANDABLE" : "SIMPLE")); } From 1ee9824f3aece7c55e1d92f67fb0916c701f511e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 13:17:36 +0200 Subject: [PATCH 134/710] ModVolumePanel: mute log messages --- src/com/ceco/gm2/gravitybox/ModVolumePanel.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index 78cb3aa946..ec23cfe1fa 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -16,7 +16,7 @@ import de.robv.android.xposed.XposedHelpers; public class ModVolumePanel { - private static final String TAG = "ModVolumePanel"; + private static final String TAG = "GB:ModVolumePanel"; public static final String PACKAGE_NAME = "android"; private static final String CLASS_VOLUME_PANEL = "android.view.VolumePanel"; private static final String CLASS_STREAM_CONTROL = "android.view.VolumePanel$StreamControl"; @@ -43,7 +43,7 @@ public void onReceive(Context context, Intent intent) { updateVolumePanelMode(expandable); } else if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_LINK_VOLUMES_CHANGED)) { mVolumesLinked = intent.getBooleanExtra(GravityBoxSettings.EXTRA_LINKED, true); - log("mVolumesLinked set to: " + mVolumesLinked); + if (DEBUG) log("mVolumesLinked set to: " + mVolumesLinked); updateStreamVolumeAlias(); } } @@ -62,7 +62,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mVolumePanel = param.thisObject; Context context = (Context) XposedHelpers.getObjectField(mVolumePanel, "mContext"); - log("VolumePanel constructed; mVolumePanel set"); + if (DEBUG) log("VolumePanel constructed; mVolumePanel set"); boolean expandable = prefs.getBoolean( GravityBoxSettings.PREF_KEY_VOLUME_PANEL_EXPANDABLE, true); @@ -131,7 +131,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mAudioService = param.thisObject; mVolumesLinked = prefs.getBoolean(GravityBoxSettings.PREF_KEY_LINK_VOLUMES, true); - log("AudioService constructed: mAudioService set"); + if (DEBUG) log("AudioService constructed: mAudioService set"); updateStreamVolumeAlias(); } }); @@ -154,7 +154,7 @@ private static void updateVolumePanelMode(boolean expandable) { XposedHelpers.setBooleanField(mVolumePanel, "mShowCombinedVolumes", expandable); XposedHelpers.setObjectField(mVolumePanel, "mStreamControls", null); - log("VolumePanel mode changed to: " + ((expandable) ? "EXPANDABLE" : "SIMPLE")); + if (DEBUG) log("VolumePanel mode changed to: " + ((expandable) ? "EXPANDABLE" : "SIMPLE")); } private static void hideNotificationSliderIfLinked() { @@ -170,7 +170,7 @@ private static void hideNotificationSliderIfLinked() { View v = (View) XposedHelpers.getObjectField(o, "group"); if (v != null) { v.setVisibility(View.GONE); - log("Notification volume slider hidden"); + if (DEBUG) log("Notification volume slider hidden"); break; } } @@ -183,7 +183,7 @@ private static void updateStreamVolumeAlias() { int[] streamVolumeAlias = (int[]) XposedHelpers.getObjectField(mAudioService, "mStreamVolumeAlias"); streamVolumeAlias[STREAM_NOTIFICATION] = mVolumesLinked ? STREAM_RING : STREAM_NOTIFICATION; XposedHelpers.setObjectField(mAudioService, "mStreamVolumeAlias", streamVolumeAlias); - log("AudioService mStreamVolumeAlias updated, STREAM_NOTIFICATION set to: " + + if (DEBUG) log("AudioService mStreamVolumeAlias updated, STREAM_NOTIFICATION set to: " + streamVolumeAlias[STREAM_NOTIFICATION]); } } \ No newline at end of file From 18703240089f50c6816d3fb3f3d203758ebeda7e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 17:07:57 +0200 Subject: [PATCH 135/710] Disable more music volume steps option for S4 GE --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 8 ++++++++ src/com/ceco/gm2/gravitybox/ModAudio.java | 3 ++- src/com/ceco/gm2/gravitybox/Utils.java | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 19dd90c063..cf6131704c 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -509,6 +509,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private SeekBarPreference mPrefNavbarHeight; private SeekBarPreference mPrefNavbarWidth; private CheckBoxPreference mPrefNavbarMenukey; + private CheckBoxPreference mPrefMusicVolumeSteps; @SuppressWarnings("deprecation") @Override @@ -625,6 +626,7 @@ public void onCreate(Bundle savedInstanceState) { mPrefCrtOff = (CheckBoxPreference) findPreference(PREF_KEY_CRT_OFF_EFFECT); mPrefCatMedia = (PreferenceScreen) findPreference(PREF_CAT_KEY_MEDIA); mPrefSafeMediaVolume = (CheckBoxPreference) findPreference(PREF_KEY_SAFE_MEDIA_VOLUME); + mPrefMusicVolumeSteps = (CheckBoxPreference) findPreference(PREF_KEY_MUSIC_VOLUME_STEPS); mPrefExpandedDesktop = (ListPreference) findPreference(PREF_KEY_EXPANDED_DESKTOP); @@ -676,6 +678,12 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatMedia.removePreference(mPrefSafeMediaVolume); } + // Remove more music volume steps option if necessary + if (!Utils.shouldAllowMoreVolumeSteps()) { + mPrefs.edit().putBoolean(PREF_KEY_MUSIC_VOLUME_STEPS, false).commit(); + mPrefCatMedia.removePreference(mPrefMusicVolumeSteps); + } + setDefaultValues(); } diff --git a/src/com/ceco/gm2/gravitybox/ModAudio.java b/src/com/ceco/gm2/gravitybox/ModAudio.java index 4c28e1c7ed..835054d11e 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudio.java +++ b/src/com/ceco/gm2/gravitybox/ModAudio.java @@ -43,7 +43,8 @@ public static void initZygote(final XSharedPreferences prefs) { try { final Class classAudioService = XposedHelpers.findClass(CLASS_AUDIO_SERVICE, null); - if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_MUSIC_VOLUME_STEPS, false)) { + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_MUSIC_VOLUME_STEPS, false) + && Utils.shouldAllowMoreVolumeSteps()) { initMusicStream(); } diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 8e78a784dd..33bf7267ab 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -92,7 +92,12 @@ public static String getDeviceCharacteristics() { mDeviceCharacteristics = SystemProp.get("ro.build.characteristics"); return mDeviceCharacteristics; } - + + public static boolean shouldAllowMoreVolumeSteps() { + return !("GT-I9505G".equals(Build.MODEL) && + !isMtkDevice()); + } + static class SystemProp extends Utils { private SystemProp() { From 3f0b51c9ae3f48b953846e6c5b3e86da8a1a54c6 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 17:19:32 +0200 Subject: [PATCH 136/710] Make Screenshot in power menu optional --- res/values/strings.xml | 3 +++ res/xml/gravitybox.xml | 5 +++++ src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 1 + src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 10 ++++++---- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index e2adf91b0b..7598cacde6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -519,4 +519,7 @@ Applies to landscape orientation Always show menu key + + Screenshot in power menu + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 3107ac032b..6e18a0f2b0 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -419,6 +419,11 @@ android:summary="@string/poweroff_advanced_summary" android:defaultValue="false" /> + + [] { actionClass }, - new ScreenshotAction(mHandler)); - mItems.add(index++, action); + // Add screenshot action if enabled + if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWERMENU_SCREENSHOT, false)) { + action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + new ScreenshotAction(mHandler)); + mItems.add(index++, action); + } // Add Expanded Desktop action if enabled if (ExpandedDesktopAction.isExpandedDesktopEnabled(mContext)) { From 149004893fac1fc6be6f2c87cbf745bddec7f8b3 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 17:26:02 +0200 Subject: [PATCH 137/710] Updated Slovak translations --- res/values-sk/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 2a86088ff3..02a07a4268 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -512,4 +512,7 @@ Pre orientáciu na šírku Vždy zobraziť menu tlačidlo + + Screenshot v menu napájania + From 28b3895e8ecbc1948e46ec189a76e304bd3061ca Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 17:26:58 +0200 Subject: [PATCH 138/710] Updated Czech translations --- res/values-cs/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index afb8069a3e..133b61e5e1 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -516,4 +516,7 @@ Pro orientaci na šířku Vždy zobrazit menu tlačítko + + Screenshot v menu napájení + From 89a378100f49577b9d83d8b278641e55e7a5d7b5 Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Thu, 19 Sep 2013 18:26:59 +0300 Subject: [PATCH 139/710] Updated string for 4.2.1 --- res/values-ru/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 9c2e5ba972..416733c6a0 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -461,7 +461,7 @@ Включить только в случае, если устройство использует стандартный механизм Android для регулировки яркости. Оставьте выключенным, если есть проблемы, как-то связанные с яркостью. (Необходима перезагрузка) - Показать недвание приложения + Показать недавние приложения Действие по долгому нажатию Home @@ -519,4 +519,7 @@ Применимо к ландшафтной ориентации Всегда показывать кнопку меню + + Скриншот в меню выключения + \ No newline at end of file From 3086e530ca8820fcc6823b9c5d472e4305eb1c54 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 19 Sep 2013 17:40:41 +0200 Subject: [PATCH 140/710] Version 2.4.1 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 5d06995f99..aab26c89a0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="29" + android:versionName="2.4.1" > Date: Thu, 19 Sep 2013 18:14:31 +0200 Subject: [PATCH 141/710] Darker blue Use darker blue, if colors are as expected --- src/com/ceco/gm2/gravitybox/CmCircleBattery.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/CmCircleBattery.java b/src/com/ceco/gm2/gravitybox/CmCircleBattery.java index dba5d7ebab..0d04176cb7 100644 --- a/src/com/ceco/gm2/gravitybox/CmCircleBattery.java +++ b/src/com/ceco/gm2/gravitybox/CmCircleBattery.java @@ -158,10 +158,13 @@ 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)); + int statusbarBlue = android.R.color.holo_blue_dark; + if (statusbarBlue == 17170451) + statusbarBlue = 0xFF2789AF; //not sure about the colorcode + mPaintFont.setColor(res.getColor(statusbarBlue)); + mPaintSystem.setColor(res.getColor(statusbarBlue)); // could not find the darker definition anywhere in resources - // do not want to use static 0x404040 color value. would break theming. + // if holo_blue_dark is as expected change to the fitting color, otherwise stay the same mPaintGray.setColor(res.getColor(android.R.color.darker_gray)); mPaintRed.setColor(res.getColor(android.R.color.holo_red_light)); From 7e13d2bf910e58c336419badc6d4b0fdfec50ef7 Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Thu, 19 Sep 2013 18:40:39 +0200 Subject: [PATCH 142/710] Adding strings to German translation --- res/values-de/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 573359eb62..670e225f93 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -72,6 +72,9 @@ Aufgenommen Lange drücken zum Aufnehmen Drücken, um Aufnahme zu stoppen + Deaktiviert + Normal + Erweitert Statusbar QuickSettings tiles @@ -133,6 +136,7 @@ %s wird neu gestartet. %s startet in die Recovery. + %s startet in den Bootloader. CRT screen off effect From ff432fb4286e95baff13dbcffbce6a8c96b151cf Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Thu, 19 Sep 2013 18:49:59 +0200 Subject: [PATCH 143/710] Undo color change --- src/com/ceco/gm2/gravitybox/CmCircleBattery.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/CmCircleBattery.java b/src/com/ceco/gm2/gravitybox/CmCircleBattery.java index 0d04176cb7..dba5d7ebab 100644 --- a/src/com/ceco/gm2/gravitybox/CmCircleBattery.java +++ b/src/com/ceco/gm2/gravitybox/CmCircleBattery.java @@ -158,13 +158,10 @@ public CmCircleBattery(Context context, AttributeSet attrs, int defStyle) { mPaintSystem = new Paint(mPaintFont); mPaintRed = new Paint(mPaintFont); - int statusbarBlue = android.R.color.holo_blue_dark; - if (statusbarBlue == 17170451) - statusbarBlue = 0xFF2789AF; //not sure about the colorcode - mPaintFont.setColor(res.getColor(statusbarBlue)); - mPaintSystem.setColor(res.getColor(statusbarBlue)); + mPaintFont.setColor(res.getColor(android.R.color.holo_blue_dark)); + mPaintSystem.setColor(res.getColor(android.R.color.holo_blue_dark)); // could not find the darker definition anywhere in resources - // if holo_blue_dark is as expected change to the fitting color, otherwise stay the same + // do not want to use static 0x404040 color value. would break theming. mPaintGray.setColor(res.getColor(android.R.color.darker_gray)); mPaintRed.setColor(res.getColor(android.R.color.holo_red_light)); From e9782d2f955f840f520e247ed7429ed3fb221e12 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 20 Sep 2013 07:18:50 +0200 Subject: [PATCH 144/710] Yet another Samsung bug in expandable volume panel workaround --- .../ceco/gm2/gravitybox/ModVolumePanel.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java index ec23cfe1fa..c37e13dcb3 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumePanel.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumePanel.java @@ -8,9 +8,11 @@ import android.content.Intent; import android.content.IntentFilter; import android.view.View; +import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.TextView; import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XC_MethodHook.Unhook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; @@ -21,6 +23,7 @@ public class ModVolumePanel { private static final String CLASS_VOLUME_PANEL = "android.view.VolumePanel"; private static final String CLASS_STREAM_CONTROL = "android.view.VolumePanel$StreamControl"; private static final String CLASS_AUDIO_SERVICE = "android.media.AudioService"; + private static final String CLASS_VIEW_GROUP = "android.view.ViewGroup"; private static final boolean DEBUG = false; private static int STREAM_RING = 2; @@ -29,6 +32,7 @@ public class ModVolumePanel { private static Object mVolumePanel; private static Object mAudioService; private static boolean mVolumesLinked; + private static Unhook mViewGroupAddViewHook; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -55,6 +59,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL final Class classVolumePanel = XposedHelpers.findClass(CLASS_VOLUME_PANEL, classLoader); final Class classStreamControl = XposedHelpers.findClass(CLASS_STREAM_CONTROL, classLoader); final Class classAudioService = XposedHelpers.findClass(CLASS_AUDIO_SERVICE, classLoader); + final Class classViewGroup = XposedHelpers.findClass(CLASS_VIEW_GROUP, classLoader); XposedBridge.hookAllConstructors(classVolumePanel, new XC_MethodHook() { @@ -125,6 +130,37 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (DEBUG) log("StreamControl: exception while initializing volTitle field: " + t.getMessage()); } + // Samsung bug workaround + XposedHelpers.findAndHookMethod(classVolumePanel, "addOtherVolumes", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + if (DEBUG) log("addOtherVolumes: hooking ViewGroup.addViewInner"); + + mViewGroupAddViewHook = XposedHelpers.findAndHookMethod(classViewGroup, "addViewInner", + View.class, int.class, ViewGroup.LayoutParams.class, + boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param2) throws Throwable { + if (DEBUG) log("ViewGroup.addViewInner called from VolumePanel.addOtherVolumes()"); + View child = (View) param2.args[0]; + if (child.getParent() != null) { + if (DEBUG) log("Ignoring addView for child: " + child.toString()); + param2.setResult(null); + return; + } + } + }); + } + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + if (mViewGroupAddViewHook != null) { + if (DEBUG) log("addOtherVolumes: unhooking ViewGroup.addViewInner"); + mViewGroupAddViewHook.unhook(); + mViewGroupAddViewHook = null; + } + } + }); + XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() { @Override From 1d54eff6d520d8b3d3b4e9804153c4db9e514354 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Fri, 20 Sep 2013 07:41:32 +0200 Subject: [PATCH 145/710] Updated French translation --- res/values-fr/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index a12b04d324..f75a487bc0 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -519,4 +519,7 @@ Valable pour l\'orientation paysage Toujours afficher la touche menu + + Capture d\'écran dans le menu d\'extinction + From 27b580b706a3b653df672c625d493b69fd62c6df Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 20 Sep 2013 07:43:50 +0200 Subject: [PATCH 146/710] StatusbarIconManager: better handling of default system colors - avoided hardcoded value - uses standard holo_blue_dark as defined in the system resources --- src/com/ceco/gm2/gravitybox/ModBatteryStyle.java | 3 ++- src/com/ceco/gm2/gravitybox/ModStatusbarColor.java | 6 +++--- src/com/ceco/gm2/gravitybox/StatusBarIconManager.java | 7 +++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java index f0f9cf30d2..fe4abbf250 100644 --- a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java +++ b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java @@ -72,7 +72,8 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { percText.setLayoutParams(lParams); percText.setPadding(4, 0, 0, 0); percText.setTextSize(1, 16); - percText.setTextColor(StatusBarIconManager.DEFAULT_ICON_COLOR); + percText.setTextColor(vg.getContext().getResources().getColor( + android.R.color.holo_blue_dark)); percText.setVisibility(View.GONE); vg.addView(percText); XposedBridge.log("ModBatteryStyle: Battery percent text injected"); diff --git a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java index b47fcb7768..6018c537e8 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusbarColor.java @@ -100,7 +100,7 @@ public void onReceive(Context context, Intent intent) { setStatusbarBgColor(bgColor); } else if (intent.hasExtra(GravityBoxSettings.EXTRA_SB_ICON_COLOR)) { int iconColor = intent.getIntExtra( - GravityBoxSettings.EXTRA_SB_ICON_COLOR, StatusBarIconManager.DEFAULT_ICON_COLOR); + GravityBoxSettings.EXTRA_SB_ICON_COLOR, mIconManager.getDefaultIconColor()); mIconManager.setIconColor(iconColor); applyIconColors(); } else if (intent.hasExtra(GravityBoxSettings.EXTRA_SB_DATA_ACTIVITY_COLOR)) { @@ -197,7 +197,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL mIconColorEnabled = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE, false); mIconManager.setIconColor( prefs.getInt(GravityBoxSettings.PREF_KEY_STATUSBAR_ICON_COLOR, - StatusBarIconManager.DEFAULT_ICON_COLOR)); + mIconManager.getDefaultIconColor())); mIconManager.setDataActivityColor( prefs.getInt(GravityBoxSettings.PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR, StatusBarIconManager.DEFAULT_DATA_ACTIVITY_COLOR)); @@ -523,7 +523,7 @@ private static void applyIconColors() { } final int iconColor = mIconColorEnabled ? - mIconManager.getIconColor() : StatusBarIconManager.DEFAULT_ICON_COLOR; + mIconManager.getIconColor() : mIconManager.getDefaultIconColor(); if (mClock != null) { if (mClockDefaultColor == null) { diff --git a/src/com/ceco/gm2/gravitybox/StatusBarIconManager.java b/src/com/ceco/gm2/gravitybox/StatusBarIconManager.java index 051d34aadd..7dfb9b7795 100644 --- a/src/com/ceco/gm2/gravitybox/StatusBarIconManager.java +++ b/src/com/ceco/gm2/gravitybox/StatusBarIconManager.java @@ -15,7 +15,6 @@ public class StatusBarIconManager { private static final String TAG = "StatusBarIconStore"; private static final boolean DEBUG = false; - public static final int DEFAULT_ICON_COLOR = 0xff33b5e5; public static final int DEFAULT_DATA_ACTIVITY_COLOR = Color.WHITE; private Resources mResources; @@ -32,7 +31,7 @@ private static void log(String message) { public StatusBarIconManager(Resources res) { mResources = res; - mIconColor = DEFAULT_ICON_COLOR; + mIconColor = getDefaultIconColor(); mDataActivityColor = DEFAULT_DATA_ACTIVITY_COLOR; Map tmpMap = new HashMap(); @@ -92,6 +91,10 @@ public StatusBarIconManager(Resources res) { mIconCache = new HashMap>(); } + public int getDefaultIconColor() { + return mResources.getColor(android.R.color.holo_blue_dark); + } + public int getIconColor() { return mIconColor; } From d48a5c2d72655d2ed9ed2a0b44009d0679130c3f Mon Sep 17 00:00:00 2001 From: pitone02 Date: Fri, 20 Sep 2013 10:39:59 +0200 Subject: [PATCH 147/710] Update strings.xml Updated italian translation 2.4.1 --- res/values-it/strings.xml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index c60b758338..4a692ec779 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -22,7 +22,7 @@ Le modifiche saranno applicate dopo il riavvio - Auto-nascondi icone segnalazione + Notifica Sim assente Nascondi 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 1 Nascondi automaticamente lo slot SIM 2 @@ -496,21 +496,21 @@ Mostra menù - Toggle expanded desktop + 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 - Master switch for navigation bar tweaks (requires reboot) - Enable navigation bar - Requires reboot - Navigation bar height - Applies to portrait orientation - Navigation bar width - Applies to landscape orientation - Always show menu key + 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 From adee769085e87e898bb513935c0bb282921526f0 Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Fri, 20 Sep 2013 11:23:15 +0200 Subject: [PATCH 148/710] Updated German Translation --- res/values-de/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 670e225f93..62d705d09b 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -342,9 +342,9 @@ When disabled, R indicator will not be visible while roaming. Use with caution. - Charging (%d%%) - Charged - %d%% remaining + Lädt (%d%%) + Aufgeladen + %d%% verbleibend Kein Netz From 4827b9eca36df90636994c1c6484e7577719da67 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 20 Sep 2013 14:22:15 +0200 Subject: [PATCH 149/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 33d977ccad..86a59c99fb 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -337,4 +337,5 @@ Szerokość paska nawigacji Dotyczy orientacji poziomej Zawsze pokazuj klawisz menu + Zrzut ekranu w menu zasilania From 3c5b532cc9524a6086bb77738a36a857a683450a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 20 Sep 2013 14:31:26 +0200 Subject: [PATCH 150/710] Version 2.4.2 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index aab26c89a0..0d6b1ee1eb 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="30" + android:versionName="2.4.2" > Date: Fri, 20 Sep 2013 17:58:05 -0600 Subject: [PATCH 151/710] Added alternate way of sending media key presses that allows volume key skip track to work with Google Play Music. This is the same function that the lockscreen uses to react to media key presses but is called via reflection. See the handleMediaKeyEvent function in: https://android.googlesource.com/platform/frameworks/base.git/+/android-4.1.1_r1.1/policy/src/com/android/internal/policy/impl/KeyguardViewBase.java --- .../gm2/gravitybox/ModVolumeKeySkipTrack.java | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java b/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java index 691713c62c..801135c7c8 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java @@ -120,10 +120,44 @@ private static void sendMediaButtonEvent(Object phoneWindowManager, int code) { Intent keyIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent keyEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, code, 0); keyIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - mContext.sendOrderedBroadcast(keyIntent, null); + dispatchMediaButtonEvent(keyEvent); + keyEvent = KeyEvent.changeAction(keyEvent, KeyEvent.ACTION_UP); keyIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - mContext.sendOrderedBroadcast(keyIntent, null); + dispatchMediaButtonEvent(keyEvent); + } + + /* + * Attempt to execute the following with reflection. + * + * [Code] + * IAudioService audioService = IAudioService.Stub.asInterface(b); + * audioService.dispatchMediaKeyEvent(keyEvent); + * This seems to work correctly with Google Play Music on 4.3 + * And from looking at the AOSP source they started doing it this way + * in 4.1.1 + * + * See: https://android.googlesource.com/platform/frameworks/base.git/+/android-4.1.1_r1.1/policy/src/com/android/internal/policy/impl/KeyguardViewBase.java + */ + private static void dispatchMediaButtonEvent(KeyEvent keyEvent) { + try { + IBinder iBinder = (IBinder) Class.forName("android.os.ServiceManager") + .getDeclaredMethod("checkService", String.class) + .invoke(null, Context.AUDIO_SERVICE); + XposedBridge.log("ModVolumeKeySkipTrack: Got Binder"); + + // get audioService from IAudioService.Stub.asInterface(IBinder) + Object audioService = Class.forName("android.media.IAudioService$Stub") + .getDeclaredMethod("asInterface",IBinder.class) + .invoke(null,iBinder); + + // Dispatch keyEvent using IAudioService.dispatchMediaKeyEvent(KeyEvent) + Class.forName("android.media.IAudioService") + .getDeclaredMethod("dispatchMediaKeyEvent",KeyEvent.class) + .invoke(audioService, keyEvent); + } catch (Exception e1) { + e1.printStackTrace(); + } } private static void handleVolumeLongPress(Object phoneWindowManager, int keycode) { @@ -149,4 +183,4 @@ private static void updatePreference(final XSharedPreferences prefs) { allowSkipTrack = prefs.getBoolean(GravityBoxSettings.PREF_KEY_VOL_MUSIC_CONTROLS, false); XposedBridge.log("ModVolumeKeySkipTrack: allowSkipTrack = " + allowSkipTrack); } -} \ No newline at end of file +} From 02054f6cd76c3b0efb58e1c83527b2f55eab88c5 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 21 Sep 2013 12:25:07 +0200 Subject: [PATCH 152/710] Lockscreen targets --- res/values/strings.xml | 7 + res/xml/gravitybox.xml | 47 +++++ .../gm2/gravitybox/GravityBoxSettings.java | 30 +++ .../ceco/gm2/gravitybox/ModLockscreen.java | 195 +++++++++++++++++- 4 files changed, 272 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7598cacde6..0905e53e90 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -522,4 +522,11 @@ Screenshot in power menu + + Lockscreen targets + Enable lockscreen targets + Master switch for lockscreen targets + Target application %s + Unlock ring bottom offset + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 6e18a0f2b0..6bdbb2aa24 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -6,6 +6,53 @@ android:title="@string/pref_cat_lockscreen_title" android:summary="@string/pref_cat_lockscreen_summary"> + + + + + + + + + + + + + + + + + + diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 2a09e795ee..5ec4dd2289 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -8,6 +8,7 @@ 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; @@ -307,6 +308,13 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece public static final String EXTRA_NAVBAR_WIDTH = "navbarWidth"; public static final String EXTRA_NAVBAR_MENUKEY = "navbarMenukey"; + public static final String PREF_KEY_LOCKSCREEN_TARGETS_ENABLE = "pref_lockscreen_targets_enable"; + public static final String PREF_KEY_LOCKSCREEN_TARGETS_APP[] = new String[] { + "pref_lockscreen_targets_app0", "pref_lockscreen_targets_app1", "pref_lockscreen_targets_app2", + "pref_lockscreen_targets_app3", "pref_lockscreen_targets_app4" + }; + public static final String PREF_KEY_LOCKSCREEN_TARGETS_BOTTOM_OFFSET = "pref_lockscreen_targets_bottom_offset"; + private static final List rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -511,6 +519,8 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private SeekBarPreference mPrefNavbarWidth; private CheckBoxPreference mPrefNavbarMenukey; private CheckBoxPreference mPrefMusicVolumeSteps; + private AppPickerPreference[] mPrefLockscreenTargetsApp; + private SeekBarPreference mPrefLockscreenTargetsBottomOffset; @SuppressWarnings("deprecation") @Override @@ -636,6 +646,18 @@ public void onCreate(Bundle savedInstanceState) { mPrefNavbarWidth = (SeekBarPreference) findPreference(PREF_KEY_NAVBAR_WIDTH); mPrefNavbarMenukey = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_MENUKEY); + 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_targets_app_title), (i+1)); + mPrefLockscreenTargetsApp[i].setTitle(title); + mPrefLockscreenTargetsApp[i].setDialogTitle(title); + } + mPrefLockscreenTargetsBottomOffset = (SeekBarPreference) findPreference( + PREF_KEY_LOCKSCREEN_TARGETS_BOTTOM_OFFSET); + // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); @@ -863,6 +885,14 @@ private void updatePreferences(String key) { mPrefNavbarWidth.setEnabled(override && mPrefNavbarEnable.isChecked()); mPrefNavbarMenukey.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); + } + mPrefLockscreenTargetsBottomOffset.setEnabled(enabled); + } } @Override diff --git a/src/com/ceco/gm2/gravitybox/ModLockscreen.java b/src/com/ceco/gm2/gravitybox/ModLockscreen.java index ab0f94e949..23106ef511 100644 --- a/src/com/ceco/gm2/gravitybox/ModLockscreen.java +++ b/src/com/ceco/gm2/gravitybox/ModLockscreen.java @@ -1,7 +1,18 @@ package com.ceco.gm2.gravitybox; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Hashtable; + +import com.ceco.gm2.gravitybox.preference.AppPickerPreference; + +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; @@ -9,8 +20,11 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.os.Handler; +import android.util.TypedValue; 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; @@ -23,23 +37,33 @@ import de.robv.android.xposed.XposedHelpers; public class ModLockscreen { - private static final String TAG = "ModLockscreen"; + private static final String TAG = "GB: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_KG_SELECTOR_VIEW = "com.android.internal.policy.impl.keyguard.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 = "com.android.internal.policy.impl.keyguard.KeyguardSelectorView$1"; + private static final boolean DEBUG = false; 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 void log(String message) { XposedBridge.log(TAG + ": " + message); } public static void initZygote(final XSharedPreferences prefs) { - log("initZygote"); - try { mPrefs = prefs; final Class kgViewManagerClass = XposedHelpers.findClass(CLASS_KGVIEW_MANAGER, null); final Class kgHostViewClass = XposedHelpers.findClass(CLASS_KG_HOSTVIEW, null); + final Class kgSelectorViewClass = XposedHelpers.findClass(CLASS_KG_SELECTOR_VIEW, null); + final Class triggerListenerClass = XposedHelpers.findClass(CLASS_TRIGGER_LISTENER, null); boolean enableMenuKey = prefs.getBoolean( GravityBoxSettings.PREF_KEY_LOCKSCREEN_MENU_KEY, false); @@ -68,7 +92,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 +113,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 +131,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); } @@ -133,6 +157,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { minimizeChallengeIfDesired(slidingChallenge); } }); + XposedHelpers.findAndHookMethod(kgHostViewClass, "onScreenTurnedOn", new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @@ -141,6 +166,104 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { minimizeChallengeIfDesired(slidingChallenge); } }); + + XposedHelpers.findAndHookMethod(kgSelectorViewClass, "onFinishInflate", new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + if (DEBUG) log("KeyGuardSelectorView onFinishInflate()"); + prefs.reload(); + if (!prefs.getBoolean( + GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_ENABLE, false)) return; + + final Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); + final Resources res = context.getResources(); + final View gpView = (View) XposedHelpers.getObjectField(param.thisObject, "mGlowPadView"); + + // apply custom bottom margin to shift unlock ring upwards + try { + final FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) gpView.getLayoutParams(); + final int bottomMarginOffsetPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + prefs.getInt(GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_BOTTOM_OFFSET, 0), + res.getDisplayMetrics()); + lp.setMargins(lp.leftMargin, lp.topMargin, lp.rightMargin, + lp.bottomMargin + bottomMarginOffsetPx); + gpView.setLayoutParams(lp); + } catch (Throwable t) { + log("Lockscreen targets: error while trying to modify GlowPadView layout" + t.getMessage()); + } + + @SuppressWarnings("unchecked") + final ArrayList targets = (ArrayList) XposedHelpers.getObjectField( + gpView, "mTargetDrawables"); + final ArrayList newTargets = new ArrayList(); + final ArrayList appInfoList = new ArrayList(5); + + // fill appInfoList helper with apps from preferences + for (int i=0; i<=4; i++) { + String app = prefs.getString( + GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_APP[i], null); + if (app != null) { + appInfoList.add(getAppInfo(context, app)); + if (DEBUG) log("appInfoList.add: " + app); + } + } + + // get target from position 0 supposing it's unlock ring + newTargets.add(targets.get(0)); + + // create and fill custom targets with proper layout based on number of targets + switch(appInfoList.size()) { + case 1: + newTargets.add(createTargetDrawable(res, null)); + newTargets.add(createTargetDrawable(res, appInfoList.get(0))); + newTargets.add(createTargetDrawable(res, null)); + break; + case 2: + newTargets.add(createTargetDrawable(res, appInfoList.get(0))); + newTargets.add(createTargetDrawable(res, appInfoList.get(1))); + newTargets.add(createTargetDrawable(res, null)); + break; + case 3: + case 4: + case 5: + for (int i=0; i<=4; i++) { + newTargets.add(i >= appInfoList.size() ? + createTargetDrawable(res, null) : + createTargetDrawable(res, appInfoList.get(i))); + } + break; + } + XposedHelpers.setObjectField(gpView, "mTargetDrawables", newTargets); + XposedHelpers.callMethod(param.thisObject, "updateTargets"); + } + }); + + XposedHelpers.findAndHookMethod(triggerListenerClass, "onTrigger", + View.class, int.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + if (DEBUG) log("GlowPadView.OnTriggerListener; index=" + ((Integer) param.args[1])); + prefs.reload(); + if (!prefs.getBoolean( + GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_ENABLE, false)) return; + + final int index = (Integer) param.args[1]; + final View gpView = (View) XposedHelpers.getObjectField( + XposedHelpers.getSurroundingThis(param.thisObject), "mGlowPadView"); + @SuppressWarnings("unchecked") + final ArrayList targets = (ArrayList) XposedHelpers.getObjectField( + gpView, "mTargetDrawables"); + final Object td = targets.get(index); + + AppInfo appInfo = (AppInfo) XposedHelpers.getAdditionalInstanceField(td, "mGbAppInfo"); + if (appInfo != null) { + final Object activityLauncher = XposedHelpers.getObjectField( + XposedHelpers.getSurroundingThis(param.thisObject), "mActivityLauncher"); + XposedHelpers.callMethod(activityLauncher, "launchActivity", mLaunchActivityArgs, + appInfo.intent, false, true, null, null); + } + } + }); } catch (Throwable t) { XposedBridge.log(t); } @@ -151,8 +274,66 @@ private static void minimizeChallengeIfDesired(Object challenge) { mPrefs.reload(); if (mPrefs.getBoolean(GravityBoxSettings.PREF_KEY_LOCKSCREEN_MAXIMIZE_WIDGETS, false)) { - log("minimizeChallengeIfDesired: challenge minimized"); + if (DEBUG) log("minimizeChallengeIfDesired: challenge minimized"); XposedHelpers.callMethod(challenge, "showChallenge", false); } } + + private static class AppInfo { + public String key; + public Intent intent; + public Drawable icon; + } + + private static AppInfo getAppInfo(Context context, String app) { + try { + if (mAppInfoCache.containsKey(app)) { + if (DEBUG) log("AppInfo: returning from cache for " + app); + return mAppInfoCache.get(app); + } + + AppInfo appInfo = new AppInfo(); + appInfo.key = app; + + String[] splitValue = app.split(AppPickerPreference.SEPARATOR); + ComponentName cn = new ComponentName(splitValue[0], splitValue[1]); + Intent i = new Intent(); + i.setComponent(cn); + appInfo.intent = i; + + PackageManager pm = context.getPackageManager(); + Resources res = context.getResources(); + ActivityInfo ai = pm.getActivityInfo(cn, 0); + Bitmap appIcon = ((BitmapDrawable)ai.loadIcon(pm)).getBitmap(); + int sizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, + res.getDisplayMetrics()); + appIcon = Bitmap.createScaledBitmap(appIcon, sizePx, sizePx, true); + appInfo.icon = new BitmapDrawable(res, appIcon); + + mAppInfoCache.put(appInfo.key, appInfo); + if (DEBUG) log("AppInfo: storing to cache for " + app); + return appInfo; + } catch (Throwable t) { + XposedBridge.log(t); + return null; + } + } + + private static Object createTargetDrawable(Resources res, AppInfo appInfo) throws Throwable { + if (mTargetDrawableConstructor == null) { + mTargetDrawableConstructor = XposedHelpers.findConstructorExact( + XposedHelpers.findClass(CLASS_TARGET_DRAWABLE, null), + Resources.class, int.class); + } + + final Object td = mTargetDrawableConstructor.newInstance(res, 0); + if (appInfo != null) { + Drawable d = appInfo.icon == null ? null : appInfo.icon.mutate(); + XposedHelpers.setObjectField(td, "mDrawable", d); + XposedHelpers.callMethod(td, "resizeDrawables"); + XposedHelpers.setAdditionalInstanceField(td, "mGbAppInfo", appInfo); + } + + return td; + } } \ No newline at end of file From 3893f0c508ba462e9c94ff08338cb7c856fe684a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 21 Sep 2013 12:59:05 +0200 Subject: [PATCH 153/710] Volume keys skip track cleanup --- .../gm2/gravitybox/ModVolumeKeySkipTrack.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java b/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java index 801135c7c8..e61da7dbcd 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java +++ b/src/com/ceco/gm2/gravitybox/ModVolumeKeySkipTrack.java @@ -9,6 +9,7 @@ import android.content.Context; import android.content.Intent; import android.os.Handler; +import android.os.IBinder; import android.os.SystemClock; import android.view.KeyEvent; import android.view.ViewConfiguration; @@ -17,12 +18,19 @@ import de.robv.android.xposed.XposedBridge; public class ModVolumeKeySkipTrack { + private static final String TAG = "GB:ModVolumeKeySkipTrack"; + private static final boolean DEBUG = false; + private static boolean mIsLongPress = false; - private static boolean allowSkipTrack; + private static boolean allowSkipTrack; + + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } static void init(final XSharedPreferences prefs) { try { - XposedBridge.log("ModVolumeKeySkipTrack: init"); + if (DEBUG) log("init"); updatePreference(prefs); @@ -34,7 +42,7 @@ static void init(final XSharedPreferences prefs) { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - XposedBridge.log("ModVolumeKeySkipTrack: screenTurnedOff"); + if (DEBUG) log("screenTurnedOff"); updatePreference(prefs); } }); @@ -115,7 +123,6 @@ public void run() { }; private static void sendMediaButtonEvent(Object phoneWindowManager, int code) { - Context mContext = (Context) getObjectField(phoneWindowManager, "mContext"); long eventtime = SystemClock.uptimeMillis(); Intent keyIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent keyEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, code, 0); @@ -144,7 +151,7 @@ private static void dispatchMediaButtonEvent(KeyEvent keyEvent) { IBinder iBinder = (IBinder) Class.forName("android.os.ServiceManager") .getDeclaredMethod("checkService", String.class) .invoke(null, Context.AUDIO_SERVICE); - XposedBridge.log("ModVolumeKeySkipTrack: Got Binder"); + if (DEBUG ) log("Got Binder"); // get audioService from IAudioService.Stub.asInterface(IBinder) Object audioService = Class.forName("android.media.IAudioService$Stub") @@ -155,8 +162,8 @@ private static void dispatchMediaButtonEvent(KeyEvent keyEvent) { Class.forName("android.media.IAudioService") .getDeclaredMethod("dispatchMediaKeyEvent",KeyEvent.class) .invoke(audioService, keyEvent); - } catch (Exception e1) { - e1.printStackTrace(); + } catch (Throwable t) { + XposedBridge.log(t); } } @@ -181,6 +188,6 @@ private static void handleVolumeLongPressAbort(Object phoneWindowManager) { private static void updatePreference(final XSharedPreferences prefs) { prefs.reload(); allowSkipTrack = prefs.getBoolean(GravityBoxSettings.PREF_KEY_VOL_MUSIC_CONTROLS, false); - XposedBridge.log("ModVolumeKeySkipTrack: allowSkipTrack = " + allowSkipTrack); + if (DEBUG) log("allowSkipTrack = " + allowSkipTrack); } } From ae320d96843bddf02717b7bb4d55b4ea20cc5d9d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 21 Sep 2013 15:25:11 +0200 Subject: [PATCH 154/710] Renamed ModCenterClock to ModStatusBar which will take care of common statusbar mods, not just clock related mods --- src/com/ceco/gm2/gravitybox/GravityBox.java | 8 ++++---- .../gravitybox/{ModCenterClock.java => ModStatusBar.java} | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/com/ceco/gm2/gravitybox/{ModCenterClock.java => ModStatusBar.java} (97%) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index d4bd313a9c..9ac8409515 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -77,8 +77,8 @@ 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)) { @@ -172,8 +172,8 @@ 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)) { diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModStatusBar.java similarity index 97% rename from src/com/ceco/gm2/gravitybox/ModCenterClock.java rename to src/com/ceco/gm2/gravitybox/ModStatusBar.java index aef407cd43..ec33b07327 100644 --- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusBar.java @@ -33,9 +33,9 @@ import android.widget.LinearLayout; import android.widget.TextView; -public class ModCenterClock { +public class ModStatusBar { public static final String PACKAGE_NAME = "com.android.systemui"; - private static final String TAG = "ModCenterClock"; + private static final String TAG = "GB:ModStatusBar"; 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 final String CLASS_PHONE_STATUSBAR_POLICY = "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy"; From baf757b4681a1d704b796b21d1203bb97a1dd5ca Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 21 Sep 2013 16:40:41 +0200 Subject: [PATCH 155/710] Statusbar brightness control --- res/values/strings.xml | 4 + res/xml/gravitybox.xml | 6 + .../gm2/gravitybox/GravityBoxSettings.java | 7 + src/com/ceco/gm2/gravitybox/ModStatusBar.java | 188 +++++++++++++++++- 4 files changed, 204 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 0905e53e90..2294d8a36d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -529,4 +529,8 @@ Target application %s Unlock ring bottom offset + + Enable brightness control + Adjusts brightness by sliding over statusbar + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 6bdbb2aa24..88d046881d 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -395,6 +395,12 @@ android:title="@string/battery_style_percent" android:defaultValue="false" /> + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -1097,6 +1101,9 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { } 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_STATUSBAR_BRIGHTNESS)) { + intent.setAction(ACTION_PREF_STATUSBAR_BRIGHTNESS_CHANGED); + intent.putExtra(EXTRA_SB_BRIGHTNESS, prefs.getBoolean(PREF_KEY_STATUSBAR_BRIGHTNESS, false)); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/ModStatusBar.java b/src/com/ceco/gm2/gravitybox/ModStatusBar.java index ec33b07327..b3d1b81bce 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusBar.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusBar.java @@ -15,18 +15,26 @@ 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.res.Resources; +import android.database.ContentObserver; import android.os.Build; +import android.os.Handler; +import android.os.IBinder; import android.provider.Settings; 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.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.VelocityTracker; import android.view.View; +import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.Animation; @@ -39,14 +47,21 @@ public class ModStatusBar { 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 final String CLASS_PHONE_STATUSBAR_POLICY = "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy"; + private static final String CLASS_POWER_MANAGER = "android.os.PowerManager"; private static final boolean DEBUG = false; + private static final float BRIGHTNESS_CONTROL_PADDING = 0.15f; + private static final int BRIGHTNESS_CONTROL_LONG_PRESS_TIMEOUT = 750; // ms + private static final int BRIGHTNESS_CONTROL_LINGER_THRESHOLD = 20; + private static final int STATUS_BAR_DISABLE_EXPAND = 0x00010000; + private static ViewGroup mIconArea; private static ViewGroup mRootView; private static LinearLayout mLayoutClock; private static TextView mClock; private static TextView mClockExpanded; private static Object mPhoneStatusBar; + private static Object mStatusBarView; private static Context mContext; private static int mAnimPushUpOut; private static int mAnimPushDownIn; @@ -59,6 +74,18 @@ public class ModStatusBar { private static String mClockLink; private static boolean mAlarmHide = false; private static Object mPhoneStatusBarPolicy; + private static SettingsObserver mSettingsObserver; + + // Brightness control + private static boolean mBrightnessControlEnabled; + private static boolean mBrightnessControl; + private static float mScreenWidth; + private static int mMinBrightness; + private static int mLinger; + private static int mInitialTouchX; + private static int mInitialTouchY; + private static int BRIGHTNESS_ON = 255; + private static VelocityTracker mVelocityTracker; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -107,10 +134,43 @@ public void onReceive(Context context, Intent intent) { XposedHelpers.callMethod(mPhoneStatusBarPolicy, "updateAlarm", i); } } + } else if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_STATUSBAR_BRIGHTNESS_CHANGED) + && intent.hasExtra(GravityBoxSettings.EXTRA_SB_BRIGHTNESS)) { + mBrightnessControlEnabled = intent.getBooleanExtra( + GravityBoxSettings.EXTRA_SB_BRIGHTNESS, false); + if (mSettingsObserver != null) { + mSettingsObserver.update(); + } } } }; + static class SettingsObserver extends ContentObserver { + SettingsObserver(Handler handler) { + super(handler); + } + + void observe() { + ContentResolver resolver = mContext.getContentResolver(); + resolver.registerContentObserver(Settings.System.getUriFor( + Settings.System.SCREEN_BRIGHTNESS_MODE), false, this); + update(); + } + + @Override + public void onChange(boolean selfChange) { + update(); + } + + public void update() { + ContentResolver resolver = mContext.getContentResolver(); + int brightnessValue = Settings.System.getInt(resolver, + Settings.System.SCREEN_BRIGHTNESS_MODE, 0); + mBrightnessControl = brightnessValue != Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC + && mBrightnessControlEnabled; + } + } + public static void initResources(final XSharedPreferences prefs, final InitPackageResourcesParam resparam) { try { String layout = Utils.hasGeminiSupport() ? "gemini_super_status_bar" : "super_status_bar"; @@ -243,11 +303,15 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL XposedHelpers.findClass(CLASS_TICKER, classLoader); final Class phoneStatusBarPolicyClass = XposedHelpers.findClass(CLASS_PHONE_STATUSBAR_POLICY, classLoader); + final Class powerManagerClass = XposedHelpers.findClass(CLASS_POWER_MANAGER, classLoader); final Class[] loadAnimParamArgs = new Class[2]; loadAnimParamArgs[0] = int.class; loadAnimParamArgs[1] = Animation.AnimationListener.class; + mBrightnessControlEnabled = prefs.getBoolean( + GravityBoxSettings.PREF_KEY_STATUSBAR_BRIGHTNESS, false); + XposedBridge.hookAllConstructors(phoneStatusBarPolicyClass, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -273,15 +337,26 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { mPhoneStatusBar = param.thisObject; + mStatusBarView = XposedHelpers.getObjectField(mPhoneStatusBar, "mStatusBarView"); 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"); + mScreenWidth = (float) res.getDisplayMetrics().widthPixels; + mMinBrightness = res.getInteger(res.getIdentifier( + "config_screenBrightnessDim", "integer", "android")); + BRIGHTNESS_ON = XposedHelpers.getStaticIntField(powerManagerClass, "BRIGHTNESS_ON"); + IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_CLOCK_CHANGED); + intentFilter.addAction(GravityBoxSettings.ACTION_PREF_STATUSBAR_BRIGHTNESS_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter); + + mSettingsObserver = new SettingsObserver( + (Handler) XposedHelpers.getObjectField(mPhoneStatusBar, "mHandler")); + mSettingsObserver.observe(); } }); @@ -353,6 +428,20 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mLayoutClock.startAnimation(anim); } }); + + XposedHelpers.findAndHookMethod(phoneStatusBarClass, + "interceptTouchEvent", MotionEvent.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (!mBrightnessControl) return; + + brightnessControl((MotionEvent) param.args[0]); + if ((XposedHelpers.getIntField(param.thisObject, "mDisabled") + & STATUS_BAR_DISABLE_EXPAND) != 0) { + param.setResult(true); + } + } + }); } catch (Throwable t) { XposedBridge.log(t); @@ -419,4 +508,101 @@ private static void launchClockApp() { XposedBridge.log(t); } } -} \ No newline at end of file + + private static Runnable mLongPressBrightnessChange = new Runnable() { + @Override + public void run() { + try { + XposedHelpers.callMethod(mStatusBarView, "performHapticFeedback", + HapticFeedbackConstants.LONG_PRESS); + adjustBrightness(mInitialTouchX); + mLinger = BRIGHTNESS_CONTROL_LINGER_THRESHOLD + 1; + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }; + + private static void adjustBrightness(int x) { + try { + float raw = ((float) x) / mScreenWidth; + + // Add a padding to the brightness control on both sides to + // make it easier to reach min/max brightness + float padded = Math.min(1.0f - BRIGHTNESS_CONTROL_PADDING, + Math.max(BRIGHTNESS_CONTROL_PADDING, raw)); + float value = (padded - BRIGHTNESS_CONTROL_PADDING) / + (1 - (2.0f * BRIGHTNESS_CONTROL_PADDING)); + + int newBrightness = mMinBrightness + (int) Math.round(value * + (BRIGHTNESS_ON - mMinBrightness)); + newBrightness = Math.min(newBrightness, BRIGHTNESS_ON); + newBrightness = Math.max(newBrightness, mMinBrightness); + + 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) { + XposedHelpers.callMethod(power, "setTemporaryScreenBrightnessSettingOverride", + newBrightness); + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS, newBrightness); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + + private static void brightnessControl(MotionEvent event) { + try { + final int action = event.getAction(); + final int x = (int) event.getRawX(); + final int y = (int) event.getRawY(); + Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneStatusBar, "mHandler"); + int notificationHeaderHeight = + XposedHelpers.getIntField(mPhoneStatusBar, "mNotificationHeaderHeight"); + + if (action == MotionEvent.ACTION_DOWN) { + mLinger = 0; + mInitialTouchX = x; + mInitialTouchY = y; + mVelocityTracker = VelocityTracker.obtain(); + handler.removeCallbacks(mLongPressBrightnessChange); + if ((y) < notificationHeaderHeight) { + handler.postDelayed(mLongPressBrightnessChange, + BRIGHTNESS_CONTROL_LONG_PRESS_TIMEOUT); + } + } else if (action == MotionEvent.ACTION_MOVE) { + if ((y) < notificationHeaderHeight) { + mVelocityTracker.computeCurrentVelocity(1000); + float yVel = mVelocityTracker.getYVelocity(); + yVel = Math.abs(yVel); + if (yVel < 50.0f) { + if (mLinger > BRIGHTNESS_CONTROL_LINGER_THRESHOLD) { + adjustBrightness(x); + } else { + mLinger++; + } + } + int touchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop(); + if (Math.abs(x - mInitialTouchX) > touchSlop || + Math.abs(y - mInitialTouchY) > touchSlop) { + handler.removeCallbacks(mLongPressBrightnessChange); + } + } else { + handler.removeCallbacks(mLongPressBrightnessChange); + } + } else if (action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_CANCEL) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + handler.removeCallbacks(mLongPressBrightnessChange); + mLinger = 0; + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } +} From 7b7f46779e650feb4e7ba5d6794b448388dc5a1c Mon Sep 17 00:00:00 2001 From: ch-vox Date: Sat, 21 Sep 2013 18:10:38 +0200 Subject: [PATCH 156/710] Updated French translation --- res/values-fr/strings.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index f75a487bc0..9f285421dc 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -522,4 +522,15 @@ 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 inférieure anneau de déverrouillage + + + Activer le contrôle de la luminosité + Ajuste la luminosité en glissant le doigt sur la barre de statut + From fa12e82fa59eda6102267d1efb08f72dc3f0523b Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 21 Sep 2013 19:09:35 +0200 Subject: [PATCH 157/710] ModMms: option to strip unicode characters from messages - designed for stock messaging app - message editor shows text as typed - character counter is recalculated according to unicode stripping option - message is converted before it is sent --- .settings/org.eclipse.core.resources.prefs | 2 + res/values/arrays.xml | 12 ++ res/values/strings.xml | 11 ++ res/xml/gravitybox.xml | 73 ++++++---- src/com/ceco/gm2/gravitybox/GravityBox.java | 4 + .../gm2/gravitybox/GravityBoxSettings.java | 5 + src/com/ceco/gm2/gravitybox/ModMms.java | 92 +++++++++++++ .../ceco/gm2/gravitybox/UnicodeFilter.java | 127 ++++++++++++++++++ 8 files changed, 299 insertions(+), 27 deletions(-) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 src/com/ceco/gm2/gravitybox/ModMms.java create mode 100644 src/com/ceco/gm2/gravitybox/UnicodeFilter.java 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/res/values/arrays.xml b/res/values/arrays.xml index 62b22ebc4e..337b92ce7f 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -411,4 +411,16 @@ 3 + + @string/unicode_stripping_leave_intact + @string/unicode_stripping_non_encodable + @string/unicode_stripping_all + + + + leave_intact + non_encodable + all + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 2294d8a36d..6cbb7d7d7f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -533,4 +533,15 @@ Enable brightness control Adjusts brightness by sliding over statusbar + + Telephony + Messaging + + + Strip unicode + Converts unicode characters to normal characters. Decreases overall message size. + Leave characters intact + Strip non-encodable characters + Strip all unicode characters + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 88d046881d..64e81c7846 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -585,38 +585,57 @@ android:title="@string/pref_cat_phone_title" android:summary="@string/pref_cat_phone_summary"> - + - + - + - + - + + + + + + + + + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, diff --git a/src/com/ceco/gm2/gravitybox/ModMms.java b/src/com/ceco/gm2/gravitybox/ModMms.java new file mode 100644 index 0000000000..40e63d66ac --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/ModMms.java @@ -0,0 +1,92 @@ +package com.ceco.gm2.gravitybox; + +import android.os.Bundle; +import android.text.TextWatcher; +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; + +public class ModMms { + public static final String PACKAGE_NAME = "com.android.mms"; + private static final String TAG = "GB:ModMms"; + private static final String CLASS_COMPOSE_MSG_ACTIVITY = "com.android.mms.ui.ComposeMessageActivity"; + private static final boolean DEBUG = false; + + private static UnicodeFilter mUnicodeFilter; + + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + + public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { + try { + final Class composeMsgActivityClass = + XposedHelpers.findClass(CLASS_COMPOSE_MSG_ACTIVITY, classLoader); + + XposedHelpers.findAndHookMethod(composeMsgActivityClass, + "onCreate", Bundle.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + prefs.reload(); + final String uniStrMode = prefs.getString( + GravityBoxSettings.PREF_KEY_MMS_UNICODE_STRIPPING, + GravityBoxSettings.UNISTR_LEAVE_INTACT); + + if (uniStrMode.equals(GravityBoxSettings.UNISTR_LEAVE_INTACT)) { + mUnicodeFilter = null; + if (DEBUG) log("onCreate: Unicode stripping disabled, returning"); + return; + } + + if (DEBUG) log("ComposeMessageActivity created. Hooking to TextEditorWatcher"); + + mUnicodeFilter = new UnicodeFilter( + uniStrMode.equals(GravityBoxSettings.UNISTR_NON_ENCODABLE)); + + final TextWatcher textEditorWatcher = (TextWatcher) XposedHelpers.getObjectField( + param.thisObject, "mTextEditorWatcher"); + if (textEditorWatcher != null) { + XposedHelpers.findAndHookMethod(textEditorWatcher.getClass(), "onTextChanged", + CharSequence.class, int.class, int.class, int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param2) throws Throwable { + if (param2.thisObject != textEditorWatcher) return; + + CharSequence s = (CharSequence) param2.args[0]; + if (DEBUG) log ("TextEditorWatcher.onTextChanged: original ='" + s + "'"); + s = stripUnicode(s); + if (DEBUG) log ("TextEditorWatcher.onTextChanged: stripped ='" + s + "'"); + XposedHelpers.callMethod(param.thisObject, "updateCounter", + s, param2.args[1], param2.args[2], param2.args[3]); + } + }); + } + } + }); + + XposedHelpers.findAndHookMethod(composeMsgActivityClass, "sendMessage", + boolean.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + if (DEBUG) log("ComposeMessageActivity.sendMessage called"); + Object workingMessage = XposedHelpers.getObjectField(param.thisObject, "mWorkingMessage"); + CharSequence msg = (CharSequence) XposedHelpers.callMethod(workingMessage, "getText"); + if (DEBUG) log("mWorkingMessage.getText returned: '" + msg + "'"); + msg = stripUnicode(msg); + if (DEBUG) log("Stripped message: '" + msg + "'"); + XposedHelpers.callMethod(workingMessage, "setText", msg); + } + }); + } catch (Throwable t) { + XposedBridge.log(t); + } + } + + private static CharSequence stripUnicode(CharSequence text) { + if (mUnicodeFilter != null) { + text = mUnicodeFilter.filter(text); + } + return text; + } +} diff --git a/src/com/ceco/gm2/gravitybox/UnicodeFilter.java b/src/com/ceco/gm2/gravitybox/UnicodeFilter.java new file mode 100644 index 0000000000..8657d86484 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/UnicodeFilter.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2012-2013 The CyanogenMod 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 android.text.SpannableString; +import android.text.Spanned; +import android.text.TextUtils; + +import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; +import java.text.Normalizer; +import java.util.regex.Pattern; + +/** + * Attempts to substitute characters that cannot be encoded in the limited + * GSM 03.38 character set. In many cases this will prevent sending a message + * containing characters that would switch the message from 7-bit GSM + * encoding (160 char limit) to 16-bit Unicode encoding (70 char limit). + */ +public class UnicodeFilter { + private CharsetEncoder gsm = + Charset.forName("gsm-03.38-2000").newEncoder(); + + private Pattern diacritics = + Pattern.compile("\\p{InCombiningDiacriticalMarks}"); + + private boolean mStripNonDecodableOnly; + + public UnicodeFilter(boolean stripNonDecodableOnly) { + mStripNonDecodableOnly = stripNonDecodableOnly; + } + + public CharSequence filter(CharSequence source) { + StringBuilder output = new StringBuilder(source); + final int sourceLength = source.length(); + + for (int i = 0; i < sourceLength; i++) { + char c = source.charAt(i); + + // Character requires Unicode, try to replace it + if (!mStripNonDecodableOnly || !gsm.canEncode(c)) { + String s = String.valueOf(c); + + // Try normalizing the character into Unicode NFKD form and + // stripping out diacritic mark characters. + s = Normalizer.normalize(s, Normalizer.Form.NFKD); + s = diacritics.matcher(s).replaceAll(""); + + // Special case characters that don't get stripped by the + // above technique. + s = s.replace("Œ", "OE"); + s = s.replace("œ", "oe"); + s = s.replace("Ł", "L"); + s = s.replace("ł", "l"); + s = s.replace("Đ", "DJ"); + s = s.replace("đ", "dj"); + s = s.replace("Α", "A"); + s = s.replace("Β", "B"); + s = s.replace("Ε", "E"); + s = s.replace("Ζ", "Z"); + s = s.replace("Η", "H"); + s = s.replace("Ι", "I"); + s = s.replace("Κ", "K"); + s = s.replace("Μ", "M"); + s = s.replace("Ν", "N"); + s = s.replace("Ο", "O"); + s = s.replace("Ρ", "P"); + s = s.replace("Τ", "T"); + s = s.replace("Υ", "Y"); + s = s.replace("Χ", "X"); + s = s.replace("α", "A"); + s = s.replace("β", "B"); + s = s.replace("γ", "Γ"); + s = s.replace("δ", "Δ"); + s = s.replace("ε", "E"); + s = s.replace("ζ", "Z"); + s = s.replace("η", "H"); + s = s.replace("θ", "Θ"); + s = s.replace("ι", "I"); + s = s.replace("κ", "K"); + s = s.replace("λ", "Λ"); + s = s.replace("μ", "M"); + s = s.replace("ν", "N"); + s = s.replace("ξ", "Ξ"); + s = s.replace("ο", "O"); + s = s.replace("π", "Π"); + s = s.replace("ρ", "P"); + s = s.replace("σ", "Σ"); + s = s.replace("τ", "T"); + s = s.replace("υ", "Y"); + s = s.replace("φ", "Φ"); + s = s.replace("χ", "X"); + s = s.replace("ψ", "Ψ"); + s = s.replace("ω", "Ω"); + s = s.replace("ς", "Σ"); + + output.replace(i, i + 1, s); + } + } + + // Source is a spanned string, so copy the spans from it + if (source instanceof Spanned) { + SpannableString spannedoutput = new SpannableString(output); + TextUtils.copySpansFrom( + (Spanned) source, 0, sourceLength, null, spannedoutput, 0); + + return spannedoutput; + } + + // Source is a vanilla charsequence, so return output as-is + return output.toString(); + } +} From d056649b5ab44b511c4db8c333b05f5092bff9c1 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 21 Sep 2013 20:07:13 +0200 Subject: [PATCH 158/710] Updated Chinese (Traditional) translations (thanks to Eric850130) --- res/values-zh-rTW/strings.xml | 186 +++++++++++++++++----------------- 1 file changed, 95 insertions(+), 91 deletions(-) diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 7880fa73b1..81ec6824c7 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -3,33 +3,33 @@ GravityBox - 電量指示圖案樣式 - 原廠電量指示圖案 - 圓形電量圖示(不包含百分比) - 圓形電量圖示(包含百分比) + 電量指示器風格 + 預設電量指示器 + 圓形電量指示器 + 圓形電量指示器(包含電量百分比) 電量百分比文字 - 音量鍵跳過曲目 - 當螢幕關閉時,長按音量鍵以跳過曲目 + 音量鍵跳過歌曲曲目 + 當螢幕關閉時長按音量鍵將可以跳過歌曲曲目 低電量警告 - 彈出視窗以及音效 - 僅彈出視窗 - 僅音效 + 彈出浮動窗與音效 + 只有浮動窗 + 只有音效 關閉 - 重新啟動以後才會套用更動 + 重啟裝置後更改將被套用 - 自動隱藏訊號強度圖示 - 隱藏指定 SIM 卡槽的訊號強度圖示(若該卡槽未插入 SIM 卡時)、停用「SIM 卡未插入」提醒 - 自動隱藏 SIM 卡槽 1 - 自動隱藏 SIM 卡槽 2 - 關閉提醒 - 「SIM 卡未插入」提醒已停用 + 自動隱藏訊號圖示 + 自動隱藏訊號圖示時選定的SIM卡插槽,SIM卡未插入, 停用 \"SIM 卡未插入\" 通知 + Auto-hide SIM 卡槽 1 + Auto-hide SIM 卡槽 2 + 停用通知 + \"SIM 卡未插入\" 通知已停用 - 進階重新啟動選單 - 啟用有重新啟動至 Recovery 選項的進階重新啟動選單 + 進階重啟選單 + 啟用進階重啟選單,將有重啟至 recovery 模式選項 Recovery Bootloader @@ -41,12 +41,13 @@ 清除全部最近使用的應用程式 - 修正「日期與時間設定」錯誤 + 修正「日期與時間」設定錯誤 當您進入日期與時間設定時發生錯誤時,啟用這個選項(需要重新啟動) 修正通話的來電顯示 若您來電畫面上顯示的聯絡人與您的通訊錄不合,啟用這個選項(需要重新啟動) - 為了讓更動生效,您應該在重新啟動後刪除並重新添加所有聯絡人!(請於 設定>應用程式>全部 分頁中找尋「聯絡人」應用程式並且選擇清除資料) + 為了讓更動生效,您應該在重新啟動後刪除並重新新增所有聯絡人!(請於 設定>應用程式>全部 分頁中找尋「聯絡人」應用程式並且選擇清除資料) + 修正簡訊的來電顯示 如果來自同一個人的簡訊被分成不同的會話串,啟用這個選項(需要重新啟動) @@ -63,13 +64,13 @@ 同步處理開啟 同步處理關閉 - Wi-Fi AP 開啟 - Wi-Fi AP 關閉 + Wi-Fi 行動熱點 開啟 + Wi-Fi 行動熱點 關閉 手電筒開啟 手電筒關閉 按下以關閉 - 播放中… - 錄音中… + 播放中… + 錄音中… 已錄音 長按以錄音 按下以停止錄音 @@ -89,12 +90,12 @@ 資料連結 網路模式 資料用量 - 情境模式 + 情境模式 亮度 休眠 自動旋轉 同步功能 - Wi-Fi 存取點 + Wi-Fi 行動熱點 手電筒 GravityBox 關閉螢幕 @@ -105,7 +106,7 @@ 顏色選擇器 - 在顏色上按下以套用 + 輕觸顏色以套用 狀態列背景顏色 @@ -120,12 +121,12 @@ 解鎖進階的開發人員選項(需要重新啟動) - 狀態列調校 - 包含各種狀態列的調校選項 - 雜項 + 狀態列校正 + 包含各種狀態列的校正選項 + 其他選項 包含所有不屬於特定類別的調校選項 通用修正 - 包含 MTK6589 通用的修正。請只在有需要時使用。 + 包含 MTK6589 裝置的通用修正。請只在有需要時使用。 關於 @@ -137,8 +138,8 @@ 您的 %s 將重新啟動 - 您的 %s 將重新啟動至 Recovery - 您的 %s 將重新啟動至 Bootloader + 您的 %s 將重新啟動至 Recovery 模式 + 您的 %s 將重新啟動至 Bootloader 模式 CRT 螢幕關閉特效 @@ -153,17 +154,17 @@ 啟動可以設定各個 SIM 卡的鈴聲與通知音效的應用程式 - 鎖定畫面調校 - 包含各種鎖定畫面的調校選項 + 鎖定畫面校正 + 包含各種鎖定畫面的校正選項 鎖定畫面背景 背景樣式 預設桌布 純色 - 自訂圖案 + 自訂圖片 設定自訂顏色 可以為鎖定畫面設定自訂的背景顏色 - 設定自訂影像 - 可以為鎖定畫面設定自訂的背景影像 + 設定自訂圖片 + 可以為鎖定畫面設定自訂的背景圖片 背景已更改 背景未更改 其他 @@ -171,35 +172,35 @@ 若啟用這個選項,鎖定畫面的小工具預設都會被最大化 - 電源調校 - 包含各種電源相關的調校選項 + 電源校正 + 包含各種電源相關的校正選項 - 停用 LED 閃爍 - 停掉當低電量且未充電時會出現的擾人 LED 閃爍 + 停用 LED 呼吸燈閃爍 + 停掉當低電量且未充電時會出現的擾人 LED 呼吸燈閃爍 - 顯示調校 - 包含各種顯示相關的調校選項 + 顯示校正 + 包含各種顯示相關的校正選項 最低亮度層級 可以設定最低的亮度層級。在手動設定亮度時適用。(需要重新啟動) - 設定值的範圍:10 – 80 + 設定值的範圍:10 – 80 自動亮度層級 - 可以設置環境的亮度層級與相對應的 LCD 背光值 - 層級 + 可以設定環境的亮度層級與相對應的 LCD 背光值 + 等級 最大照度(lux) - 亮度(10 – 255) + 亮度(10 – 255) 指定的值不被接受 不建議將亮度設為 10 以下 亮度無法大於 255 值無法低於 0 較低層級的值無法大於較高層級的值 較高層級的值無法小於較低層級的值 - 已設定%s 的值 + 已設定%s 的數值 已儲存新的自動亮度組態 「沒有」儲存新的自動亮度組態 @@ -216,15 +217,15 @@ 避免在收到新訊息時喚醒螢幕(需要重新啟動) - 時鐘置中 + 狀態列時鐘置中 - 媒體調校 - 包含各種媒體與聲音系統的調校選項 + 媒體校正 + 包含各種媒體與聲音系統的校正選項 更多音樂音量的調整段數 - 為音樂串流添加更多的音量調整段數(需要重新啟動) + 為音樂串流新增更多的音量調整段數(需要重新啟動) 安全的耳機媒體音量 @@ -245,7 +246,7 @@ 語音搜尋 切換至上一個應用程式 結束正在使用的應用程式 - 使裝置休眠 + 使裝置休眠 結束應用程式的長按延遲 適用於「結束正在使用的應用程式」動作。定義按鍵需要按下持續多久才會觸發動作 雙擊速度 @@ -255,8 +256,8 @@ 找不到上一個應用程式 - 電話調校 - 包含各種通話的調校選項 + 電話校正 + 包含各種通話的校正選項 響鈴時的手機翻轉動作 @@ -272,17 +273,17 @@ 軟重啟 - + 純黑色背景 在預設的 Holo 系統內建佈景主題內使用純黑色的背景,而不是黑-灰色的漸層(需要重新啟動) - + 每列磁貼數 定義快速設定內每列有幾個磁貼。磁貼會根據您的設定自動縮放。適用於豎屏。 - - - 顯示目前是一週的哪一天 - + + + 在狀態列顯示目前星期幾 + 可擴展音量面板 啟用此選項使您可以調整不同串流的音量 @@ -324,10 +325,10 @@ 管理快速設定選單 - 通知列樣式 + 通知欄風格 - 通知列背景 + 通知欄背景 預設背景 純色 自訂圖案 @@ -344,9 +345,9 @@ 當隱藏時,漫遊指示器上的 R 會消失,請小心使用 - 充電中 (%d%%) + 充電中 (%d%%) 電量已滿 - %d%% remaining + %d%% 漫遊中 沒有服務 @@ -354,8 +355,8 @@ 僅能撥打緊急電話 - Pie Controls - 啟用 Pie Controls + Pie 控制 + 啟用 Pie 控制 顯示搜尋按鍵 導航鍵大小 觸發位置 @@ -396,7 +397,7 @@ 右下角 - Adjust top margin + 調整頂部邊距 關閉漫遊警告 @@ -416,11 +417,11 @@ 長按應用程式槽 4 - 開啟 GPS - 關閉 GPS + GPS 開啟 + GPS 關閉 - 總是顯示選單按鍵 + 總是顯示選單鍵 鈴聲模式 @@ -429,7 +430,7 @@ 時鐘設定 - 隱藏 AM/PM + 隱藏 上午/下午 隱藏時鐘 @@ -439,21 +440,21 @@ 透明度調整 - 啟動器下的狀態列透明度 + 桌面啟動器下的狀態列透明度 鎖定畫面時的狀態列透明度 - 啟動器下的海苔條透明度 + 桌面啟動器下的海苔條透明度 鎖定畫面時的海苔條透明度 - 隱藏鬧鐘圖示 + 隱藏時鐘圖示 - Screen dim level - Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + 螢幕暗淡等級 + 黯淡狀態的亮度等級 - 當螢幕關閉時 (需要重新啟動) 手機 - 平板 + 平板電腦 亮度設定 @@ -464,7 +465,7 @@ 顯示最近使用的應用程式 - 長按 HOME 鍵動作 + Home 鍵長按操作 執行自訂的應用程式 1 @@ -476,16 +477,16 @@ 與「時鐘」應用程式做連結 - 啟用此功能後狀態列的時間將與應用程式「時鐘」做連結而非原本「日期與時間設定」 + 啟動此功能後通知欄的時間將與應用程式「時鐘」做連結而非預設的「日期與時間」設定 - 等待 GravityBox 系統框架的回應… - GravityBoy 系統框架無反應。離開中 + 正在等待 GravityBox 系統框架回應… + GravityBox 系統框架沒有回應,正在退出中. - National data roaming - Connect to data services when nationally roaming - + 國內資料漫遊 + 當處於國內資料漫遊時連線至資料伺服器 + 全螢幕模式 關閉 @@ -507,16 +508,19 @@ 全螢幕模式已關閉! - 海苔條調教 - 包含各種關於海苔條的調教 + 海苔條校正 + 包含各種關於海苔條的校正 覆蓋系統預設值 - 新增海苔條調教的主控鍵(需要重新啟動) + 新增海苔條校正的主控鍵(需要重新啟動) 啟用海苔條功能 需要重新啟動 海苔條高度 - 應用於當螢幕呈現直立方向 + 套用於當螢幕呈現直立方向 海苔條寬度 - 應用於當螢幕呈現橫放方向 + 套用於當螢幕呈現橫放方向 永遠顯示選單鍵 + + 電源選單顯示螢幕截圖 + \ No newline at end of file From 2b3a06075dd2068941d8c498eba3e667d1e1a575 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 22 Sep 2013 00:47:26 +0200 Subject: [PATCH 159/710] Option to disable slow mobile data warning for SIM in 2G mode (for MTK Dual SIMs) --- res/values/strings.xml | 5 ++ res/xml/gravitybox.xml | 25 +++++++-- src/com/ceco/gm2/gravitybox/GravityBox.java | 5 ++ .../gm2/gravitybox/GravityBoxSettings.java | 14 ++++- .../ceco/gm2/gravitybox/ModMtkToolbar.java | 56 +++++++++++++++++++ 5 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 src/com/ceco/gm2/gravitybox/ModMtkToolbar.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 6cbb7d7d7f..19ed42116e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -536,6 +536,7 @@ Telephony Messaging + Mobile data Strip unicode @@ -544,4 +545,8 @@ 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 + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 64e81c7846..8621ad382e 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -615,12 +615,6 @@ android:summary="@string/pref_roaming_warning_disable_summary" android:defaultValue="false" /> - - + + + + + + + + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -530,6 +534,9 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private CheckBoxPreference mPrefMusicVolumeSteps; private AppPickerPreference[] mPrefLockscreenTargetsApp; private SeekBarPreference mPrefLockscreenTargetsBottomOffset; + private CheckBoxPreference mPrefMobileDataSlow2gDisable; + private PreferenceCategory mPrefCatPhoneTelephony; + private PreferenceCategory mPrefCatPhoneMobileData; @SuppressWarnings("deprecation") @Override @@ -667,6 +674,10 @@ public void onCreate(Bundle savedInstanceState) { mPrefLockscreenTargetsBottomOffset = (SeekBarPreference) findPreference( PREF_KEY_LOCKSCREEN_TARGETS_BOTTOM_OFFSET); + mPrefCatPhoneTelephony = (PreferenceCategory) findPreference(PREF_CAT_KEY_PHONE_TELEPHONY); + mPrefCatPhoneMobileData = (PreferenceCategory) findPreference(PREF_CAT_KEY_PHONE_MOBILE_DATA); + mPrefMobileDataSlow2gDisable = (CheckBoxPreference) findPreference(PREF_KEY_MOBILE_DATA_SLOW2G_DISABLE); + // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); @@ -681,12 +692,13 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatStatusbar.removePreference(mPrefDisableRoamingIndicators); mQuickSettings.setEntries(R.array.qs_tile_aosp_entries); mQuickSettings.setEntryValues(R.array.qs_tile_aosp_values); - mPrefCatPhone.removePreference(mPrefRoamingWarningDisable); + mPrefCatPhoneTelephony.removePreference(mPrefRoamingWarningDisable); } else { // Remove Gemini specific preferences for non-Gemini MTK devices if (!sSystemProperties.hasGeminiSupport) { mPrefCatStatusbar.removePreference(mSignalIconAutohide); mPrefCatStatusbar.removePreference(mPrefDisableRoamingIndicators); + mPrefCatPhoneMobileData.removePreference(mPrefMobileDataSlow2gDisable); } // Remove preferences not needed for ZTE V987 diff --git a/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java b/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java new file mode 100644 index 0000000000..8d9ae38648 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java @@ -0,0 +1,56 @@ +package com.ceco.gm2.gravitybox; + +import android.content.Context; +import android.content.res.Resources; +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; + +public class ModMtkToolbar { + public static final String PACKAGE_NAME = "com.android.systemui"; + private static final String TAG = "GB:ModMtkToolbar"; + private static final boolean DEBUG = false; + + private static final String CLASS_MOBILE_STATE_TRACKER = + "com.android.systemui.statusbar.toolbar.QuickSettingsConnectionModel$MobileStateTracker"; + + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + + public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { + try { + final Class mobileStateTrackerClass = + XposedHelpers.findClass(CLASS_MOBILE_STATE_TRACKER, classLoader); + + XposedHelpers.findAndHookMethod(mobileStateTrackerClass, "dataSwitchConfirmDlgMsg", + long.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + prefs.reload(); + if (!prefs.getBoolean( + GravityBoxSettings.PREF_KEY_MOBILE_DATA_SLOW2G_DISABLE, false)) return; + + final int msgResId = (Integer) param.getResult(); + if (DEBUG) log("dataSwitchConfirmDlgMsg return value = " + msgResId); + if (msgResId <= 0) return; + + final Context context = (Context) XposedHelpers.getObjectField( + XposedHelpers.getSurroundingThis(param.thisObject), "mContext"); + final Resources res = context.getResources(); + + final String msgResName = res.getResourceEntryName(msgResId); + if (DEBUG) log("Message resource name: " + msgResName); + if ("gemini_3g_disable_warning_case1".equals(msgResName) + || "gemini_3g_disable_warning_case2".equals(msgResName)) { + if (DEBUG) log("Skipping slow data warning dialog"); + param.setResult(-1); + } + } + }); + } catch (Throwable t) { + XposedBridge.log(t); + } + } +} From 4279b6ed755c2a46001c70655f00212b6648a893 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Sun, 22 Sep 2013 09:18:29 +0200 Subject: [PATCH 160/710] Updated French translation --- res/values-fr/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 9f285421dc..348cd5f588 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -533,4 +533,20 @@ Activer le contrôle de la luminosité Ajuste la luminosité en glissant le doigt sur la barre de statut + + 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 + From d5873c7b244a13c213eb0c5ae6f8f4ff726d11cf Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 22 Sep 2013 11:20:26 +0200 Subject: [PATCH 161/710] Option for statusbar element colors to follow stock battery color On most stock ROMs there's a difference in color between statusbar image elements (wifi icon, battery icon) and text elements (clock, battery percentage). This options, when enabled, takes stock battery color into account and applies it to other statusbar elements. This makes the statusbar element colors equal bringing better visual feeling. Option applies in case explicit GB icon coloring is off --- res/values/strings.xml | 4 ++ res/xml/gravitybox.xml | 6 ++ .../gm2/gravitybox/GravityBoxSettings.java | 6 ++ .../gm2/gravitybox/ModStatusbarColor.java | 32 +++++---- .../gm2/gravitybox/StatusBarIconManager.java | 72 ++++++++++++++++++- 5 files changed, 104 insertions(+), 16 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 19ed42116e..cc7f12b44f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -549,4 +549,8 @@ 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. + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 8621ad382e..61e0b3db6b 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -185,6 +185,12 @@ android:summary="@string/statusbar_bgcolor_summary" android:defaultValue="@integer/COLOR_BLACK" /> + + mMobileIconIds; private Map mBatteryIconIds; private Map> mIconCache; + private Integer mStockBatteryColor; + private Integer mDefaultClockColor; + private Integer mDefaultBatteryPercentageColor; + private boolean mFollowStockBatteryColor; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -33,6 +40,7 @@ public StatusBarIconManager(Resources res) { mResources = res; mIconColor = getDefaultIconColor(); mDataActivityColor = DEFAULT_DATA_ACTIVITY_COLOR; + mFollowStockBatteryColor = false; Map tmpMap = new HashMap(); tmpMap.put("stat_sys_wifi_signal_0", R.drawable.stat_sys_wifi_signal_0); @@ -92,7 +100,67 @@ public StatusBarIconManager(Resources res) { } public int getDefaultIconColor() { - return mResources.getColor(android.R.color.holo_blue_dark); + if (mFollowStockBatteryColor && mStockBatteryColor != null) { + return mStockBatteryColor; + } else { + return mResources.getColor(android.R.color.holo_blue_dark); + } + } + + public void initStockBatteryColor(Context context) { + try { + final Resources res = context.getResources(); + final int resId = res.getIdentifier( + "stat_sys_battery_100", "drawable", "com.android.systemui"); + if (resId != 0) { + final Bitmap b = BitmapFactory.decodeResource(res, resId); + final int x = b.getWidth() / 2; + final int y = b.getHeight() / 2; + mStockBatteryColor = b.getPixel(x, y); + } + if (DEBUG) log("mStockBatteryColor = " + + ((mStockBatteryColor != null ) ? Integer.toHexString(mStockBatteryColor) : "NULL")); + } catch (Throwable t) { + log("Error initializing stock battery color: " + t.getMessage()); + } + } + + public void setFollowStockBatteryColor(boolean follow) { + mFollowStockBatteryColor = follow; + } + + public void setDefaultClockColor(int color) { + mDefaultClockColor = color; + } + + public Integer getDefaultClockColor() { + return mDefaultClockColor; + } + + public int getClockColor() { + if (mFollowStockBatteryColor && mStockBatteryColor != null) { + return mStockBatteryColor; + } else { + return (mDefaultClockColor != null ? + mDefaultClockColor : getDefaultIconColor()); + } + } + + public void setDefaultBatteryPercentageColor(int color) { + mDefaultBatteryPercentageColor = color; + } + + public Integer getDefaultBatteryPercentageColor() { + return mDefaultBatteryPercentageColor; + } + + public int getBatteryPercentageColor() { + if (mFollowStockBatteryColor && mStockBatteryColor != null) { + return mStockBatteryColor; + } else { + return (mDefaultBatteryPercentageColor != null ? + mDefaultBatteryPercentageColor : getDefaultIconColor()); + } } public int getIconColor() { From 281b58bf218f3ea167bd93eb0c879729478f152a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 22 Sep 2013 17:43:46 +0200 Subject: [PATCH 162/710] NetworkMode tile: allow LTE phones to switch 2G/2G+3G/3G/LTE modes When LTE mode is active, default network mode as read from system properties is used (typically LTE_GSM_WCDMA). Currently tile does not support LTE submodes (LTE ONLY, etc.) This would rather require new, LTE dedicated tile. --- res/drawable-hdpi/ic_qs_lte.png | Bin 0 -> 1159 bytes res/drawable-xhdpi/ic_qs_lte.png | Bin 0 -> 3971 bytes .../quicksettings/NetworkModeTile.java | 14 ++++++++++---- 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 res/drawable-hdpi/ic_qs_lte.png create mode 100644 res/drawable-xhdpi/ic_qs_lte.png diff --git a/res/drawable-hdpi/ic_qs_lte.png b/res/drawable-hdpi/ic_qs_lte.png new file mode 100644 index 0000000000000000000000000000000000000000..e79be205257c7d8172fa159041e77464a17e8b1a GIT binary patch literal 1159 zcmV;21bF+2P)i1BuZW}d04w@c!Oz?kf#`Vod0>a=l4D5{2tD^9Xe!FHn~q_ zWo6wXk;u-fs;U<9JD{byy84zWpR|ojBoZBIA5Pyj9!P*EU^)2FIe~CE+?$Ed zgZD-lKN^C@u<~Odebeg)>Gyoc*oBGt`T3n(??5jEIE5fDz$*lKN&eE5%K~&}2yN#W z^Dc?(JNjR!udg5K{0K4m6p)KhD{5+LbQE$CW+mkr$qG-OErx6&0B^xjr}_YaZcMrk z!LER72p;A;Y|4AQevOTdU8q|`+artc9-c8SkDci0gg`VJ?ahRjEW$K-{SbbZOl%v% zd$_}I&I^S?Ke!@r!J@=BJd;VEt>kx&x&1##aHBslnPPB+@9|CuFln(zKo&(XLfte@ zs}q)ISVcv}I5{nFHGqIDQ4M`2aD2w1FQa7PoOog;&PV9V$fs1HGKf%rC}@n?u^$1iAM9_hsofBXOP6rV{(6}WEJqYgmpqS`3{SP})+;2cYp8F5lf5%&|rYx*Qm!`|J zw;KWqsVzFN&G-W$DkzwPP+@a(bKkTJEe}~jGH zg-qn>#~a-rVzF3%XXl^Qn%Y)?#>y*n-t70V)Geg$xS*IvA+&Z#iY?FXjDUn<(hasF zq)Q8e{YCk+RmIlNrTzf*1@zhPD=%|O!0f^R*>7_UKJ%<5J{lQt{0hyH@#8i1jm~ty zpBfq(auA?2$r807%w$V2rxkxh{@4TG|0={NEiKK-$m>L1UELUk&xS;+&a-DW1N^{D zy<8x;utV=ktp08(dQnkP*GxUHbYsO=A%rZ>5xnZa6i+I8M`}g*r{w<`v@)(ZV>@8( z2K^9XKD#j_)$<6#PLpNQ1s~FXQWiEtda-TSvMHO|TQYB(dIMdT{1An5ZZ~aKFlL0t z+S<{F1?i53HhH%wE+K=H2;6HcKBCVg^9W#T-<>f6gbJhefGf~^%=9bv>P-D`AAtgY zo58@05lA{}yG*}OQvD#0fSzTX>p+%(kAR7TuKQ4+8{hXt;5qomhZAXkV*kbjj+&Q> zkB}0l{dFR%1MP^wL;W*}5Su*kohM)L6-TJVKVDG8>WV6P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000E8NklpE)G-?$QYSju_wEE!E>VsOrK6$Aq_N@qBSnxp+ z1QUI*-XO&KqKIJaix!^>-asf?ELbZRSz8)KBU**h6l%5BTsD`@jt}QQFdk-SX0wy@ zn4J#}?992$Isfneoy~ckM<-LB4yO!&P6wc{(23P*)qZsWFbv!V^Z?U9PJJtYSzs^l zRKk6&1vUX+0KY~JE|<$o4?qa51a1e`MU0tDxYqeV1$YE_0eHhX2?(Ka;C)~tPz36M zzHUjt{)B671s(@_fv16y7UrHa0A_(vprlp{^p${_I8hee2@L4)0Be9(fQNyfT?XJn z;CbNsfbQFL2>2*sjmv?Tfvc?d8-bUA$AAe}y+B^ZE{cjV^IruvG-1>hU>nfqsszkP z1y<>xa{);x=y^2a@D<>mh&}a4I*tI}xCp>Mz;|VQnztT!Q-@1J>wzKQN#KM_0GtOr3S1d6W)1LK;Q2b~ z{S7UACkNaM{0%${oN_4?o(8;_ep~N1FW@`f!2Q5|k~SwKfSAME{g*1@8w1XYv)9IW zk_q6L0GJ1E27U)VcLjj%h#0`{_vufG|1Mxk?>j! zQh5#YwX|&bW#qHJ1Tsm)=soke5;Q-D{r?J`#u-mK^{M8PHAQcs(EiMFDUL@MD@qk%D73 z;Gu}b$iq~M-%AsKc8p+2L5Ux`pHvKx6o5RYl-}FIesXDZq#X&UW9oEwX=62|!cm*N z2KYfD-2;5cfA0wzG2fhb4S*BCWi6znMb!XMg{WpljKvu4m(q6K?JhP1yt@F-G=SZ} zi`M%wS%16DDYrPO-%fdf?UI5mEf~TBm}@lKn7xB3dUgfepeJ>y0pDS2k4^#bhjM^* z((yPN!_@PB3F(_uR#~t(?W@a#OEw@V&If>Jqz?TNW5;#)qfPpsz*LCCXbw{jKa`+u zu;jVGEby_!dOBjvF5rV0FHvmL`U3sVMuJ1YO~3;dxDDVl;JKLjUjuh&u4j3GX;p(J zT?PQmt?p{f{eVx06*I(%?ry0^&VJ7@zi7>qgNarihxUfXe_}tytb~gO<4GtadC!C2~#LaApKE05SlU zJpdKu19q!q65wz)m?l-5#23|00${k4Z9wJ)G64Q305o$~9`N=etvirOK%11+1T!0u d0npj>?*P;a9DYhc8Xy1w002ovPDHLkV1mkfRT%&P literal 0 HcmV?d00001 diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java index 57dc8ac809..e880ea4b18 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java @@ -5,6 +5,7 @@ import de.robv.android.xposed.XposedBridge; +import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -32,12 +33,14 @@ public SettingsObserver(Handler handler) { super(handler); } + @SuppressLint("NewApi") public void observe() { ContentResolver resolver = mContext.getContentResolver(); resolver.registerContentObserver( Settings.Global.getUriFor(PhoneWrapper.PREFERRED_NETWORK_MODE), false, this); } + @SuppressLint("NewApi") @Override public void onChange(boolean selfChange) { mNetworkType = Settings.Global.getInt(mContext.getContentResolver(), @@ -59,7 +62,8 @@ public void onClick(View v) { case PhoneWrapper.NT_WCDMA_PREFERRED: case PhoneWrapper.NT_GSM_WCDMA_AUTO: i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, - PhoneWrapper.NT_GSM_ONLY); + hasLte() ? mDefaultNetworkType : + PhoneWrapper.NT_GSM_ONLY); break; case PhoneWrapper.NT_WCDMA_ONLY: i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, @@ -67,7 +71,7 @@ public void onClick(View v) { break; case PhoneWrapper.NT_GSM_ONLY: i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, - hasLte() ? mDefaultNetworkType : PhoneWrapper.NT_WCDMA_ONLY); + PhoneWrapper.NT_WCDMA_ONLY); break; default: if (hasLte()) { @@ -85,6 +89,7 @@ public void onClick(View v) { }; } + @SuppressLint("NewApi") @Override protected void onTileCreate() { mLabel = mGbResources.getString(R.string.qs_tile_network_mode); @@ -117,8 +122,9 @@ protected synchronized void updateTile() { mDrawableId = R.drawable.ic_qs_2g_on; break; default: - if (mNetworkType < PhoneWrapper.NT_MODE_UNKNOWN) { - mDrawableId = R.drawable.ic_qs_3g_on; + if (mNetworkType >= PhoneWrapper.NT_LTE_CDMA_EVDO + && mNetworkType < PhoneWrapper.NT_MODE_UNKNOWN) { + mDrawableId = R.drawable.ic_qs_lte; } else { mDrawableId = R.drawable.ic_qs_unexpected_network; log("updateTile: Unknown or unsupported network type: mNetworkType = " + mNetworkType); From b8cf1209aa794630b59245c8b6f0ce3ea57b17e0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 22 Sep 2013 18:34:47 +0200 Subject: [PATCH 163/710] Option to set mode of Network Mode Tile - 2G/2G+3G - 2G/2G+3G/3G (allows 3G only) --- res/values/arrays.xml | 10 ++++++++ res/values/strings.xml | 5 ++++ res/xml/gravitybox.xml | 7 ++++++ .../gm2/gravitybox/GravityBoxSettings.java | 14 +++++++++++ .../ceco/gm2/gravitybox/ModQuickSettings.java | 5 ++++ .../quicksettings/NetworkModeTile.java | 25 +++++++++++++++---- 6 files changed, 61 insertions(+), 5 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 337b92ce7f..885960b1e6 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -423,4 +423,14 @@ all + + @string/nm_tile_mode1 + @string/nm_tile_mode2 + + + + 0 + 1 + + diff --git a/res/values/strings.xml b/res/values/strings.xml index cc7f12b44f..1a42f2facf 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -553,4 +553,9 @@ 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 + 2G/2G+3G + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 61e0b3db6b..282e74c346 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -159,6 +159,13 @@ + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -539,6 +542,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private CheckBoxPreference mPrefMobileDataSlow2gDisable; private PreferenceCategory mPrefCatPhoneTelephony; private PreferenceCategory mPrefCatPhoneMobileData; + private ListPreference mPrefNetworkModeTileMode; @SuppressWarnings("deprecation") @Override @@ -680,6 +684,8 @@ public void onCreate(Bundle savedInstanceState) { mPrefCatPhoneMobileData = (PreferenceCategory) findPreference(PREF_CAT_KEY_PHONE_MOBILE_DATA); mPrefMobileDataSlow2gDisable = (CheckBoxPreference) findPreference(PREF_KEY_MOBILE_DATA_SLOW2G_DISABLE); + mPrefNetworkModeTileMode = (ListPreference) findPreference(PREF_KEY_NETWORK_MODE_TILE_MODE); + // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { getPreferenceScreen().removePreference(mPrefCatPhone); @@ -916,6 +922,10 @@ private void updatePreferences(String key) { } mPrefLockscreenTargetsBottomOffset.setEnabled(enabled); } + + if (key == null || key.equals(PREF_KEY_NETWORK_MODE_TILE_MODE)) { + mPrefNetworkModeTileMode.setSummary(mPrefNetworkModeTileMode.getEntry()); + } } @Override @@ -1127,6 +1137,10 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { } 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"))); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index ae7897723c..17559deda3 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -163,6 +163,11 @@ public void onReceive(Context context, Intent intent) { GravityBoxSettings.EXTRA_QUICK_PULLDOWN, GravityBoxSettings.QUICK_PULLDOWN_OFF); } + if (intent.hasExtra(GravityBoxSettings.EXTRA_NMT_MODE)) { + Settings.System.putInt(mContext.getContentResolver(), + NetworkModeTile.SETTING_NETWORK_MODE_TILE_MODE, + intent.getIntExtra(GravityBoxSettings.EXTRA_NMT_MODE, 0)); + } } else if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_QUICKAPP_CHANGED)) { if (intent.hasExtra(GravityBoxSettings.EXTRA_QUICKAPP_DEFAULT)) { Settings.System.putString(mContext.getContentResolver(), diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java index e880ea4b18..ad6b8cfd9a 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java @@ -19,9 +19,12 @@ public class NetworkModeTile extends AQuickSettingsTile { private static final String TAG = "NetworkModeTile"; + public static final String SETTING_NETWORK_MODE_TILE_MODE = "gb_network_mode_tile_mode"; + private TextView mTextView; private int mNetworkType; private int mDefaultNetworkType; + private boolean mAllow3gOnly; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -38,14 +41,22 @@ public void observe() { ContentResolver resolver = mContext.getContentResolver(); resolver.registerContentObserver( Settings.Global.getUriFor(PhoneWrapper.PREFERRED_NETWORK_MODE), false, this); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_NETWORK_MODE_TILE_MODE), false, this); } @SuppressLint("NewApi") @Override public void onChange(boolean selfChange) { - mNetworkType = Settings.Global.getInt(mContext.getContentResolver(), + ContentResolver cr = mContext.getContentResolver(); + mNetworkType = Settings.Global.getInt(cr, PhoneWrapper.PREFERRED_NETWORK_MODE, PhoneWrapper.NT_WCDMA_PREFERRED); - log("SettingsObserver onChange; mNetworkType = " + mNetworkType); + mAllow3gOnly = Settings.System.getInt(cr, + SETTING_NETWORK_MODE_TILE_MODE, 0) == 0; + + log("SettingsObserver onChange; mNetworkType = " + mNetworkType + + "; mAllow3gOnly = " + mAllow3gOnly); + updateResources(); } } @@ -70,8 +81,8 @@ public void onClick(View v) { PhoneWrapper.NT_WCDMA_PREFERRED); break; case PhoneWrapper.NT_GSM_ONLY: - i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, - PhoneWrapper.NT_WCDMA_ONLY); + i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, mAllow3gOnly ? + PhoneWrapper.NT_WCDMA_ONLY : PhoneWrapper.NT_WCDMA_PREFERRED); break; default: if (hasLte()) { @@ -100,8 +111,12 @@ protected void onTileCreate() { mTextView = (TextView) mTile.findViewById(R.id.network_mode_tileview); mDefaultNetworkType = PhoneWrapper.getDefaultNetworkType(); - mNetworkType = Settings.Global.getInt(mContext.getContentResolver(), + + ContentResolver cr = mContext.getContentResolver(); + mNetworkType = Settings.Global.getInt(cr, PhoneWrapper.PREFERRED_NETWORK_MODE, mDefaultNetworkType); + mAllow3gOnly = Settings.System.getInt(cr, + SETTING_NETWORK_MODE_TILE_MODE, 0) == 0; SettingsObserver observer = new SettingsObserver(new Handler()); observer.observe(); From 04d5b85f8b1aa754749dbc74fd2043a04df4b833 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 22 Sep 2013 21:19:40 +0100 Subject: [PATCH 164/710] Updated Portuguese (PT) translation (still unfinished... tomorrow's another day) --- res/values-pt-rPT/strings.xml | 362 +++++++++++++++++++++++++++++++--- 1 file changed, 340 insertions(+), 22 deletions(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index e6bd332cdf..07acab1fb3 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -5,12 +5,12 @@ Estilo 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 circular + Indicador de bateria circular com percentagem + Texto de percentagem de bateria Nenhum - Mudar de faixa utilizado teclas de volume + Mudar de faixa utilizando teclas de volume As teclas de volume mudam de faixa após manter a respectiva tecla pressionada com o ecrã desligado Aviso de bateria fraca @@ -19,28 +19,28 @@ Apenas aviso sonoro Desligado - 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 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 + Esconder barras de sinal do cartão SIM 1 + Esconder barras de sinal do cartão SIM 2 Desativar notificações Notificações \"O SIM não está inserido.\" desativadas - Menu de Desligar avançado - Adiciona opções para 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 Desligar Modo de recuperação Modo bootloader - Tecla de Volume controla cursor + Teclas de volume controlam cursor As teclas de volume controlam o cursor em campos de texto Desativado - 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 + Ativa botão que possibilita limpar todas as tarefas recentes de uma só vez na janela de tarefas recentes Corrigir problema nas definições de data e hora Selecionar caso tenha problemas ao aceder à configuração de data e hora nas definições do telefone (necessário reiniciar) @@ -92,12 +92,12 @@ GravityBox - Escolha a cor + Escolher cor Carregue na cor escolhida para aplicar Cor do fundo da Barra de Status - Permite escolher a cor e transparência do fundo + Permite escolher a cor do fundo Desbloquear definições de voz @@ -108,8 +108,8 @@ Desbloqueia as opções de programador avançadas nas definições do telefone (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 Status Ajustes diversos Contém todos os ajustes que não são classificados numa categoria específica Ajustes gerais @@ -145,10 +145,10 @@ Contém vários ajustes relacionados com o ecrã de bloqueio Fundo do ecrã de bloqueio Estilo do fundo - Imagem de fundo pré-definida - Cor + Fundo pré-definido + Preencher com cor Imagem personalizada - Escolha a cor + Escolher cor Permite definir uma cor para o ecrã de bloqueio Escolha uma imagem Permite escolher uma imagem para o ecrã de bloqueio @@ -222,9 +222,327 @@ Desativar luz de bateria a carregar Desativa a luz vermelha quando a bateria está a carregar + + Ações teclas físicas + Permite personalizar ações para as teclas físicas + Menu key long-press action + Menu key double-tap action + Back key long-press action + Por defeito + Pesquisa + Pesquisa por voz + Mudar para a aplicação anterior + Fechar aplicação em curso + 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 + Aplicação 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 + + + Desativar vibração ao estabelecer chamada + Desativa a curta vibração que ocorre quando uma chamada de voz é estabelecida + + + Reiniciar rápido + + + Fundo preto sólido + Utilizar fundo preto sólido no tema Holo predefinido 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. O tamanho dos painéis é alterado 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 + + + 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 + + + Desativar ligar com teclas de volume + Para dispositivos como o Jiayu G3S/G4, onde as teclas de volume ligam o ecrã + + + Cores da Barra de Status + + + Ativar coloração de símbolos + + + Cor dos símbolos + Permite escolher a cor dos símbolos 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 pré-definido + 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 roaming + Quando selecionado, o indicador R não será visível em roaming (usar com cautela) + + + A carregar (%d%%) + Carregado + %d%% restante + + + Sem serviço + Modo de avião ativado + Apenas chamadas de emergência + + + Pie controls + Enable pie controls + Show search button + 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) + + + 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 + + + Desativa avisos de roaming + Desativa os avisos de roaming aquando do envio de mensagens ou realização de chamadas em roaming + + + 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 + + + Always show menu button + + + Ringer mode + + + Definições do relógio + + + Esconder AM/PM + + + Esconder relógio + + + Trigger size + + + Transparency management + Statusbar transparency for launcher + Statusbar transparency for lockscreen + Navbar transparency for launcher + Navbar transparency for lockscreen + + + Esconder símbolo de alarme + + + Screen dim level + Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + 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 + + + Home key long-press action + + + 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 + + + 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 ecrã + + + Mostrar menu + + + Toggle expanded desktop + Expanded desktop mode is disabled! + + + 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 + Necessário reiniciar + Altura da barra de navegação + Aplicável à orientação de ecrã vertical + Largura da barra de navegação + Aplicável à orientação de ecrã horizontal + Mostar sempre botão Menu + + + Captura de ecrã no Menu Desligar + + + Lockscreen targets + Enable lockscreen targets + Master switch for lockscreen targets + Target application %s + Unlock ring bottom offset + + + Ativar controlo de brilho + Permite ajustar o brilho ao deslizar sobre a Barra de Status + + + Telefone + 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 + 2G/2G+3G + From 86eed897350aabaf407d8b4ef34b8614168d1f80 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 09:54:32 +0200 Subject: [PATCH 165/710] Implemented Stay Awake Tile --- res/drawable-hdpi/ic_qs_stayawake_off.png | Bin 0 -> 3479 bytes res/drawable-hdpi/ic_qs_stayawake_on.png | Bin 0 -> 3676 bytes res/drawable-xhdpi/ic_qs_stayawake_off.png | Bin 0 -> 3574 bytes res/drawable-xhdpi/ic_qs_stayawake_on.png | Bin 0 -> 3795 bytes res/layout/quick_settings_tile_stay_awake.xml | 23 ++++ res/values/arrays.xml | 4 + res/values/strings.xml | 3 + .../ceco/gm2/gravitybox/ModQuickSettings.java | 17 ++- .../quicksettings/StayAwakeTile.java | 124 ++++++++++++++++++ 9 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 res/drawable-hdpi/ic_qs_stayawake_off.png create mode 100644 res/drawable-hdpi/ic_qs_stayawake_on.png create mode 100644 res/drawable-xhdpi/ic_qs_stayawake_off.png create mode 100644 res/drawable-xhdpi/ic_qs_stayawake_on.png create mode 100644 res/layout/quick_settings_tile_stay_awake.xml create mode 100644 src/com/ceco/gm2/gravitybox/quicksettings/StayAwakeTile.java 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 0000000000000000000000000000000000000000..cf4ec196742d4b775541a7b8397952a1a3c87dba GIT binary patch literal 3479 zcmV;I4QTR-P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0008QNklB!4p7PE#%(gvD7d-aTjp%MCz$_fX_xK~@Y`q%7Wt_y)i3FI5 z{kYbE)3x*$-p9gL1FXS!O>{i38*vmLZ8ks$j^b_$ozLoX%xxCH6Zm9;9M9@JmW&tR zNqp4?=c~Go7aIkbjk9fZzN*_Oj}>5Q#PrG}(LKC|j(Pxk@XjQ1zN(*5t_NTr?&PxQ z@3EEtU^t$QU^Fyd=SDLcjx2sRzGugMTo1s^$gtTz{($H4Qfy^8>Ygpwien9c+`t~Z zi8o@djd&F=;KSUUpJCxxF7Zb>gQqa1MxJ;qw`=w2>;FlZ>te^NV}He*u|}a8VI*s` zAJb|WJv~N%O*Q5z1s5-`%LNP2g}#EZz0InH=EcfqC;uBCL?e?O`#LTZT^m4G^N}bV+t$>Vq7~d5eZxR5j#o7tpl5MBGJ5A^cq>tgm_9F(P+#;A1GpFw z=|Z%kr{Y2{k4CBauT|2Uxde~^5002ovPDHLk FV1jt4f-wL9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2bb50a6b6104dcb47b742eac39a20f148b421aef GIT binary patch literal 3676 zcmV-i4x{mjP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000ArNkl}sogp-CY#}!!*;6#QaDh@tQkEhm znbb(ql)uJyLADxd#+ofP{4J5)jKR$3=9zjso%fsX`+OhCdvR{w^PJ~AzjL1REN?6x zkH`My5sLsKfCwN0hyWsh2p|H;AONUzMmtb_LCpcR71VK1mq1m4ss?o(6hZ9;wFJ~C zP&w)Bl?{N_pvHqL0aXU-Ca71S>OsYAG=O>!>b`+&12qd&kG~1f8Ppn3S3!LU7@O?) z0qOy$eV|7ENq}5XD?vSL#<+K&UV?f7>Mf|c1oE|@4uBexZGZ`&u7nuz)LdvSs2QNf zfEo;HfSvFZP)kAW2UQuOL*|NYG7ZoQ)Fx1$oDCa5Re+icsvoEpfi&ot?Ia5bLD}baQ)vO@ntKElR)H!EakF7|ij5ZQ2ZNdj z>XrxMl;du}$adI~ePiyJ5S~!u-<4A(Pwad@l@%K*b??T7cT_$UX$sGg*K^ zpmsS5PJ-&5!1zuUHscnlf^)q<)p!6-Hxu!;Sa@xcKMSfT8Gsc|WcZRq#w@Ui6t|lQ z&dsyD-~!yS5+sq{YtEX|WB_t4!!|8yv>RxjV534%KLcy_n~SWs1MofOyUhSB1NA*1 ze*)ByR37mWXTvg3Z9_Ke5)#i7jq?eNpXGo*O63hSjrR6%lZ7~zBEakrJu{q~P-nR% ztvt{N)D36j3sxTZ+^9B5<1c#>U<}k^#}ykvE&Sa~Jjes_7}Ru+>=MTS-+16TfE-Xe zJ+dX4s)h3Hc}sWnI{C zr;02Fwb@Q~wPot2xgJ)XmV5NQ05vn4{lJ2d#ProlgmreRL#;IE2&y-zv7qK#1zHv2 zUKPFqE*l-$K)a0}A%@ghGxNkk;4>=%;|cnJMa|@ztn|dA&97_HXesNhWZvNP3V*z* zk6A0Y-1>%UPi-H!=u~3~YzL@m=3amOuSCpZdcGy0omO~NgSuxC>8>?7rS_l;tN_gX uZ0|9`(fUgvrKJ+Ct!C*gsy4h1O-DFA>%Pgm3IhHC$bnD8c+c=#>ffW%kV`Y8Zp zwEqbYWPM-)fYihT0(tPj-6z23sk@IahaLpN;p^|?=JD7SfS`G_Io!g0he7#l`9#AY z9`WA5$Bdqs!%X89f)2?i$Vo!2AJ3UPM{n9eqoqZ_+Mg4TpOl1nO>Zhpo=7@Nw9c8A z6#Xea@!Q4E&`(~|&1aj#SG6-LTV+^u%_vbjF?pJ{hO9SK!XZwcNwm07LSz$32}X+tdHM+Ak6-W3?pV-%v3b-d-6r6$@LoXIR1DNXeQ zI|M)ulK!SzEG}q-vSMUJHVH#%FS6T4c+KVHw05;ITIze#xSs*x<5$9BH7p24LWK8K z9`6Bx`y;ZPXJ@b6s;Sg!LC(%R6zlt+H(I%G8|LOV*4JnCyESYazd^&U;GOpEP~77` z;Yychr$1U(c_Jn4B6SGPe{>F=80NE$z9V_*w78k9b6H1reaSw_)vf2$028EJGri-N zq?z>^E1A!gpz-cr5AVda%j$~o1-{CP4EW-yf)|PuDYA3M|82le4GU;rJpL->JBgSvGv=JLLzm#rD;|!4csf%q1Eh?ugju2mhovt2 zv9kXy`8ZqcMxxM**eM%8^`k`(8`Dy}l}(q5J?R%Q5238&7ZRe=O| zBDLB{WC;Q_I2`Y)>%t6S#-b@Y1Iy3{)BI_I$sDcVWR@AJ9&s({%yPkrVM>J8})Le~sQb<0m#W=lo67Bn)+ z4>ihjF=myfaYeM!&$8r)qZ#xJ^2_s5Ct2JX-OoHKw*wk!mQwE;r;kA=26uF})3@7)DN;R4JkCL$&{b0AY?hG7Bo@>*1wHZ`X{vrI zUn;Ahm_>0(LCJCnnI+b8&?33`k$G5!wxyK$S~1D@v{K6w^n*QfR&#ies2E`iXx%dpD?^4T<}%6_f6mxIiixh6=M(~F`s_F1G%H(%B8+>7UeO&K`$rdP@( z#kukjDSatujT!d6n<~*-hTr*z0ArFZfx>ibc;YhM;l0&+tOe4B4HB-lUL|SiX|Ph= zQqxkMy%yPu{X%p>i&m5MMI@zqpFY1WzYaWkmx+Ap-gh{DK#?MEIU94~6 z$P{ANr3T4&Om$5E`4ZVMuJmb2`;9i$YmZ*rHJ&x^Uhm#de1v?Qdv}4> z4pLfD!WzTg;FO6d;^rtz*&nipKmF=Yr(mV9oHg>{KsBuAByC3w4jZK&ot0X{&<@_~ z_CTAXCUxM9@P?<+*!Wio22q2e=_;Zq*50N5mUaDrQ$M?(Arq%)R1KdU zaUSx5vn@$gVZrrx_1wPt>zoF4diCU}@~DlDa!&XDUvJAf&$co~kRu+HF%QDGr^kpK zHyvMfg_HBg#Kk~kRg-++$wsNY%P>AL#*G3l=fF<~^njpeJYz6NcAL|Mlg}nQPY?cY; z>5azFNsIc!6|{{0eU|HqB=^m4Vg;OFT=X zDYq%t3%!e)Gu4WOlAZIk3vat}V{gCxKKu!M91%AqW~Sl$6#Im-g<0~n(4G!u-#@Ka z=)*t}3Rw!vHy?UexqUT**LTiHR?hBHD9k^99a{F2X!4)u>~MB5PmQeOENzr|)`g9e zO{2+>%J}r|a>%95!ar0Wq?N3L^|2NM9`id)P zmCs=#b->RFt?O4?ip`26w#W4W$JGlPw9tBJR;7Zy_in(h(pAc&Nng{4rmTtvTd#(L zke1p|x3eAAY`Kx8la}BkhU@96Y#xurq(~r|r+Pq)n<96Hkm@5~0JA3c84g^U_ zJUX$u*zX8j3}iq2v_fUF{(>Vy;M)C9)v5Vd;YA8_O3F0>eg^i^SxRK#=HKLS)-^K% zAcPkHL^J?@u5Y*lz%y|Gb{zmv$N+%R=be3zHURjXdYbAMLG!=nO^V)IGW8vWnobsx z)8HG#qXg=SIc?+XCHnIkWB6jpIKOK?*ws#GK<0EuG303m*;tT4mtx|%97P&)yj7g) z$AlXawMbkezCRe;s}ClOUAPz-LPxZIf*(1{VwDd6gl#o%eb|zpG#5+_IdD7W0VHa- z-h%%Vuc1Xc*eV7^KhWn#*|x?N-f_m%yEPk?pJ62wh{S6~sDIEdR=4X+526iQ0zWt( zcj?j=lzI@G(9^Wz&n5|ZOR8AeuMOk@STq^?O&%(N#ejB0wq~Q=z6#n>MN)t}ZvvY_ zGP5)wsMMiX=oy{)0wKrmBeRZY49Q>VK**8D&0X2!+RUx91iu52f2u1SBo4eu!SaCy z*43_eGGl@oD6RBt4*sQ_?4#f)FxjCT$7qAcL%Pz5ADukyy55Yr$2_rmftlzYW_z>R zHumfiMH5;y4t0pouKuS=V7WZ~U;X!udsQTrjvV^)qYquKxF5ff>Sqm7&aR~_J(9F? z4AlN*Y3N1QPH>rpJkdqt5UmV&88HJHOg6{YB^?4u)lL_vrQ4gEJSw(u$oh+vO_T4Q z@eb<7zp|~+_}PQO?cxW;ct4i-@PsRo5sqaL=e4BT69KkEn`vOO`OHf&&nE{*aVx`|cWYWO?qln7t7z5|@*qaO4f69TKc===Uin}* zEoYfZIq^zb9D?4GP&F!5KH8p**GmR_@h{ByQf&xRR*%hC8b}(8ViCIZMQjg?R}(09 z{(_!!Wfhyayf|ykP%bP{+GACkJ<4_v_JzoVk0ZsKzKkfo^k0S_k%X5bue-PcVrEt= z6;Sk$AhGZ%*Q%b1MB3$%?ei;BoeHU-0^PG)Qvdo9k)le2_>GHWnwdkC8g)K-Zy&!v z#5HYr{xW^si{xukAj%udn)eQjPR(N7>*i?f8LfgtcSm76RI9lAFe9W5S)t(&^*;tNrdI#} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9dc8fad67caefc96106ece87f472cccdb3366acb GIT binary patch literal 3795 zcmZvecRbXOAICq3+}R_0Ws`8WWF2SkaaNKMj+0Qz3WscwWS-+xI5UxxtTQrmc4TH} ze>0-2U*F%~-#=dO=il$w`|)}`-ia1w`gGJ>)Bpg`85-zV{Uz*QK`8&ua_@lozo7Cr zaCig&G*|x>2*}Il003%pZ#dk-!pkqv?~#|EKffUy&hP)w&(r(92LJ?5W37=0>kT&b zA?(I`Qn=o_nLJCm+11$Qqlfjl)8ox*AFQow zk%mQ43;P3%kUDpPN9RHy;3Ps#?S>!`+zNn#$7mn`(G)|J;fcRw*woIw142Io5d+h2 z8bi=504y|By99vgfza3-QELE40k{m@b6W;1qyQJO$h9#5jXlW?0|Ab&1Xw}1bb$Y= zM}iLEr3zFI*(T`%_A&sAr*W4GFeL@Z7}|Ln05uH&k;F(-3qWWA8Owy&>i|U<;L(%>E+Cwta1!0G|q#V6zr6lgWc1Q~X+iRoTw_5Is6lCf!qTPiPWQ-v8H+L62NIW# z0bsw$uYFt`LXP%|SsV(w+|xYQ$B6)FPs5i10B~1FSQ^n^r`ZDm03BSEM2!~rVLOK; zk&>tV%4|E$nTyghZQ-sCZANWscQnsKm+O_$+TwA8HM|lo&~X^A0@2bdF2kQ*y2Iup zy}CccA6H00yLfXH6@^wW3_(wjSPySLS-A_nKzdJy13;jSYtx ze)xe)Jw>T#eYnDlVLD9%-XlZ&!2y=w!`oKzPL$VB`V8A7m(Kqex zQwvskCCPuIH+BWP(zznP!o4D}??{bxg9W@jv0f6l>PH!It}?DFtWtX9$Z6TU$+Mcn z7a^Dw({5{56%nl7S;ph9Dm>0p8H`~wG%l`sojJzk#qM?N{q9HLC#JbfKC|p$yU~FS z{U6ys$Pa^P>Ec*pdJ>T0oEQ!;2a+?0<6VwP3FlZcXAeR~S#~RDJ(nTZ&&FPYAn}wn zy`MVMC{r|(TLOwGD=#UZFQ>6Nuo*z4mEE-tuhz4Xw_Yxz8qcb*DaTrDS#w(>%T)34 zB7LUaQAQ?2ec|GL3WvyKeo>dajhZl+9HA)={-| zxlb{7QIk$k+k?{GoPyT7=mHbJ()o~<^*=n}&~wDO@1N2meOi0UI$B}M8CnvD+GoW8 zKQ&%x&&*FtxKk$#UhJCbn!Wfey>UeC&4k`_J%$wT?mNrE%f8*d-ETxGMFm8SO*c(< z^Q=r8ORkrwny8xe41O7WJ@_?O5u+|UDYuSU$4p`t8eDD%-9Q`>cI6bZ>%+DOdrXPYM$KU z_?dURO1s{>@w0_r6bi2wILJR5?(Btsw_F|3q$$jl@mZ*hFo&B*A?w$Lp!cBZc2$!# z4aGs_$F6(q8ox9i7A|Wnt0~XR%{w@MQ6@I@HVl||`V~0GF2Ey&F5NFfFGqk=+*Wr0k7We7gYks>p7%!k~e*< zMZ}MwDKo~PnzA*o(^9o?6LNS_lWzx)&x3XX+31&B6{iDSwfoDq**}objl1d%Y!P|ipgpMeUBuv5YNbs5M8%UUj zzT8f4RtypTEMF|S+W1VY>_xK)oyi>LRsmby6MkPg^;<2nF)!0!1ZbBFm}U@=o5(fK zCj*rpv9%YUA0#(G`7*(MK6NiDuQ*6i6SPZyAa09KN`PyT9(JB>gNgkrSrr9026w*H z_0POe&fhD%++pruUVKR?jx)BC;VPbJTNVZCCQm2 z2gPTaVhHfYH*IPkn>|YVNQ0`Hh_{GC#2*UFUkzMYv=3ffi6Elv@$LAV- zturcsMmldMx;rz$hwfSn%lQSx)J5IteCaeRVzR2^ZJ_Vvb= zK7G%%)(h-jkQAK~oz3(7?j<3AosgA{W2%K?KDt}ePg24v7r|rKp70`hp(yRV{X9L4 zb>69?o8u?*FB&6XH|Imo^k=RyqLQy`drIFsNeDD*I2zM|ttA9)x8#8o~ew4-lzmk@lHV{V_w^eXc zLq%mt^Wpi%St)$TeMq!`{o?h-Ks7rXG~#4pYmzjQGg6ejpPkX>`?UCcleoqCZl=4V zo3FJmSYGz-q3!8Td(dnU@7|jQ2J@At{E_09UccWTSr3<v6EU%asatY(rOKo>7;q*b6g3l7`(^5Hhl>J;}nX5-H-M5h-|%Lkm(& zLZpCIJ7^4iBcVnvH?b^I0u^VLS|rz68Q&TFOXIX4Y&{fw+!^r+S=I8@uduH5SJmdu zPF3g&I~xi{kPg5E`%e_nAbRu2%0c6v7V)ri$R>kDww4p}RUb1AMv36FVbA+U zo%(>gpb6?tWs4S-NkxkVG>Xzjl@Um}QcsD{XEHmr<;JUILR={DL$Jrk8O!05mKJq4 zt`IReX$r1+s!bWZ@2?Vts8EJ+2@5G)E7@Z%ggLGisx>jo4&YFdxZkwR9z&AgBNG>5 zC7BH!N&`Qng{4WjYTQo^Ak^`Z>U!r7qI{w|+r?=6*(}0fz7+N2ZU)l_k6=4Pz{qVj z0H<-t5x|Fdv+jNkd{nQ0QG)#=6My!I4dS#f27A7(3}p2Un4hL?!}@ElR*$*)AagjrgC9K9s0R2iL41G+xl1XAF!COa z@|D3yGHbop_~}T8U*>}>T%q`)7r$MIi({uFS|O$>!^n&m*PeYjz22rtyIBtIsI0W& z7*~tmX3z!Ij2T%sm!a=|zpuT^)FXc?Pv+siR~;NnlW4~ z5Esv+Gg}MuXf7}+z~%Cvr{B4Uzu){I8v>#wCuXq*J7IgX)1aobh?D2JY zq_K!eEVrDVd!MT=H{N^);atbk1Q`b_`K#o46^3u|;6pM4p%!$gFiyQCb({u4qF&H1 zuAshT-7Jx}jSLlY#7Mq`x-W=Nt1KMa3T!BDZqRzp;}sOsXM+rQ%{p#q5$QlOtFB<% vphC5<+NRl_t$LkB{&&3opE+{hIbL9!nrc&(A}RiFYXFA2W;)f{F46x36G`+4 literal 0 HcmV?d00001 diff --git a/res/layout/quick_settings_tile_stay_awake.xml b/res/layout/quick_settings_tile_stay_awake.xml new file mode 100644 index 0000000000..548393c76f --- /dev/null +++ b/res/layout/quick_settings_tile_stay_awake.xml @@ -0,0 +1,23 @@ + + + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 885960b1e6..387b46d685 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -74,6 +74,7 @@ @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 @@ -99,6 +100,7 @@ wifi_ap_tileview torch_tileview sleep_tileview + stay_awake_tileview quickrecord_tileview quickapp_tileview expanded_tileview @@ -123,6 +125,7 @@ @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 @@ -147,6 +150,7 @@ wifi_ap_tileview torch_tileview sleep_tileview + stay_awake_tileview quickrecord_tileview quickapp_tileview expanded_tileview diff --git a/res/values/strings.xml b/res/values/strings.xml index 1a42f2facf..e07738b0f1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -76,6 +76,8 @@ Disabled Normal Expanded + Stay awake on + Stay awake off Statusbar QuickSettings tiles @@ -102,6 +104,7 @@ Settings Volume Expanded desktop + Stay awake Color Picker diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index 17559deda3..3b5dea7772 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -20,6 +20,7 @@ import com.ceco.gm2.gravitybox.quicksettings.QuickRecordTile; import com.ceco.gm2.gravitybox.quicksettings.RingerModeTile; import com.ceco.gm2.gravitybox.quicksettings.SleepTile; +import com.ceco.gm2.gravitybox.quicksettings.StayAwakeTile; import com.ceco.gm2.gravitybox.quicksettings.TorchTile; import com.ceco.gm2.gravitybox.quicksettings.GravityBoxTile; import com.ceco.gm2.gravitybox.quicksettings.SyncTile; @@ -113,7 +114,8 @@ public class ModQuickSettings { R.id.quickapp_tileview, R.id.quickrecord_tileview, R.id.volume_tileview, - R.id.expanded_tileview + R.id.expanded_tileview, + R.id.stay_awake_tileview )); if (!Utils.isMtkDevice()) { mCustomGbTileKeys.add(R.id.gps_tileview); @@ -263,13 +265,10 @@ private static void updateTileVisibility() { // bubble up in view hierarchy to find QuickSettingsTileView parent view View rootView = view; - if (rootView.getClass() != mQuickSettingsTileViewClass && - rootView.getClass() != mQuickSettingsBasicTileClass) { - do { - rootView = (View) rootView.getParent(); - } while (rootView != null && + while (rootView != null && rootView.getClass() != mQuickSettingsTileViewClass && - rootView.getClass() != mQuickSettingsBasicTileClass); + rootView.getClass() != mQuickSettingsBasicTileClass) { + rootView = (View) rootView.getParent(); } if (DEBUG) { @@ -520,6 +519,10 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { sleepTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(sleepTile); + StayAwakeTile swTile = new StayAwakeTile(mContext, mGbContext, mStatusBar, mPanelBar); + swTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(swTile); + QuickRecordTile qrTile = new QuickRecordTile(mContext, mGbContext, mStatusBar, mPanelBar); qrTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(qrTile); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/StayAwakeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/StayAwakeTile.java new file mode 100644 index 0000000000..31877950d3 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/quicksettings/StayAwakeTile.java @@ -0,0 +1,124 @@ +package com.ceco.gm2.gravitybox.quicksettings; + +import com.ceco.gm2.gravitybox.R; + +import de.robv.android.xposed.XposedBridge; + +import android.annotation.SuppressLint; +import android.content.ContentResolver; +import android.content.Context; +import android.database.ContentObserver; +import android.os.Handler; +import android.provider.Settings; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +public class StayAwakeTile extends AQuickSettingsTile { + private static final String TAG = "GB:StayAwakeTile"; + private static final boolean DEBUG = false; + + private static final int NEVER_SLEEP = Integer.MAX_VALUE; + private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000; + public static final String SETTING_USER_TIMEOUT = "gb_stay_awake_tile_user_timeout"; + + private SettingsObserver mSettingsObserver; + private TextView mTextView; + private int mCurrentTimeout; + + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + + public StayAwakeTile(Context context, Context gbContext, Object statusBar, Object panelBar) { + super(context, gbContext, statusBar, panelBar); + + mOnClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + toggleStayAwake(); + } + }; + + mOnLongClick = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + startActivity(android.provider.Settings.ACTION_DISPLAY_SETTINGS); + return true; + } + }; + } + + @Override + protected void onTileCreate() { + LayoutInflater inflater = LayoutInflater.from(mGbContext); + inflater.inflate(R.layout.quick_settings_tile_stay_awake, mTile); + mTextView = (TextView) mTile.findViewById(R.id.stay_awake_tileview); + + mCurrentTimeout = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE); + if (DEBUG) log("onTileCreate: mCurrentTimeout = " + mCurrentTimeout); + } + + @Override + protected void onTilePostCreate() { + mSettingsObserver = new SettingsObserver(new Handler()); + mSettingsObserver.observe(); + + super.onTilePostCreate(); + } + + @Override + protected synchronized void updateTile() { + if (mCurrentTimeout == NEVER_SLEEP) { + mLabel = mGbContext.getString(R.string.quick_settings_stay_awake_on); + mDrawableId = R.drawable.ic_qs_stayawake_on; + } else { + mLabel = mGbContext.getString(R.string.quick_settings_stay_awake_off); + mDrawableId = R.drawable.ic_qs_stayawake_off; + } + + mTextView.setText(mLabel); + mTextView.setCompoundDrawablesWithIntrinsicBounds(0, mDrawableId, 0, 0); + } + + private void toggleStayAwake() { + ContentResolver cr = mContext.getContentResolver(); + if (mCurrentTimeout == NEVER_SLEEP) { + if (DEBUG) log("disabling never sleep"); + Settings.System.putInt(cr, + Settings.System.SCREEN_OFF_TIMEOUT, + Settings.System.getInt(cr, SETTING_USER_TIMEOUT, + FALLBACK_SCREEN_TIMEOUT_VALUE)); + } else { + if (DEBUG) log("enabling never sleep"); + Settings.System.putInt(cr, + SETTING_USER_TIMEOUT, mCurrentTimeout); + Settings.System.putInt(cr, + Settings.System.SCREEN_OFF_TIMEOUT, NEVER_SLEEP); + } + } + + class SettingsObserver extends ContentObserver { + + public SettingsObserver(Handler handler) { + super(handler); + } + + @SuppressLint("NewApi") + void observe() { + ContentResolver resolver = mContext.getContentResolver(); + resolver.registerContentObserver( + Settings.System.getUriFor(Settings.System.SCREEN_OFF_TIMEOUT), + false, this); + } + + @Override + public void onChange(boolean selfChange) { + mCurrentTimeout = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE); + if (DEBUG) log("SettingsObserver onChange; mCurrentTimeout = " + mCurrentTimeout); + updateResources(); + } + } +} \ No newline at end of file From 4d4291b5d92d21ee77bccd89a8732fdb98efe47f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 10:43:13 +0200 Subject: [PATCH 166/710] Power menu dialog optimizations --- src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 115 ++++++++++-------- 1 file changed, 67 insertions(+), 48 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java index eff70f114c..9d1d749ed8 100644 --- a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -41,7 +41,7 @@ import com.ceco.gm2.gravitybox.adapters.*; public class ModPowerMenu { - private static final String TAG = "ModRebootMenu"; + private static final String TAG = "GB:ModPowerMenu"; public static final String PACKAGE_NAME = "android"; public static final String CLASS_GLOBAL_ACTIONS = "com.android.internal.policy.impl.GlobalActions"; public static final String CLASS_ACTION = "com.android.internal.policy.impl.GlobalActions.Action"; @@ -68,6 +68,10 @@ public class ModPowerMenu { private static String mExpandedDesktopOffStr; private static String mScreenshotStr; private static Unhook mRebootActionHook; + private static Object mRebootActionItem; + private static boolean mRebootActionItemStockExists; + private static Object mScreenshotAction; + private static Object mExpandedDesktopAction; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -149,56 +153,67 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { List mItems = (List) XposedHelpers.getObjectField(param.thisObject, "mItems"); BaseAdapter mAdapter = (BaseAdapter) XposedHelpers.getObjectField(param.thisObject, "mAdapter"); int index = 1; - Object action; // try to find out if reboot action item already exists in the list of GlobalActions items // strategy: // 1) check if Action has mIconResId field or mMessageResId field // 2) check if the name of the corresponding resource contains "reboot" or "restart" substring - if (DEBUG) log("Searching for existing reboot action item..."); - Object rebootActionItem = null; - Resources res = mContext.getResources(); - for (Object o : mItems) { - // search for drawable - try { - Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); - String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - if (DEBUG) log("Drawable resName = " + resName); - if (resName.contains("reboot") || resName.contains("restart")) { - rebootActionItem = o; - break; + if (mRebootActionItem == null) { + if (DEBUG) log("Searching for existing reboot action item..."); + Resources res = mContext.getResources(); + for (Object o : mItems) { + // search for drawable + try { + Field f = XposedHelpers.findField(o.getClass(), "mIconResId"); + String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); + if (DEBUG) log("Drawable resName = " + resName); + if (resName.contains("reboot") || resName.contains("restart")) { + mRebootActionItem = o; + break; + } + } catch (NoSuchFieldError nfe) { + // continue + } catch (Resources.NotFoundException resnfe) { + // continue + } catch (IllegalArgumentException iae) { + // continue } - } catch (NoSuchFieldError nfe) { - // continue - } catch (Resources.NotFoundException resnfe) { - // continue - } catch (IllegalArgumentException iae) { - // continue - } - // search for text - try { - Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); - String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); - if (DEBUG) log("Text resName = " + resName); - if (resName.contains("reboot") || resName.contains("restart")) { - rebootActionItem = o; - break; + if (mRebootActionItem == null) { + // search for text + try { + Field f = XposedHelpers.findField(o.getClass(), "mMessageResId"); + String resName = res.getResourceEntryName((Integer) f.get(o)).toLowerCase(Locale.US); + if (DEBUG) log("Text resName = " + resName); + if (resName.contains("reboot") || resName.contains("restart")) { + mRebootActionItem = o; + break; + } + } catch (NoSuchFieldError nfe) { + // continue + } catch (Resources.NotFoundException resnfe) { + // continue + } catch (IllegalArgumentException iae) { + // continue + } } - } catch (NoSuchFieldError nfe) { - // continue - } catch (Resources.NotFoundException resnfe) { - // continue - } catch (IllegalArgumentException iae) { - // continue + } + + if (mRebootActionItem == null) { + if (DEBUG) log("Existing Reboot action item NOT found! Creating new RebootAction item"); + mRebootActionItemStockExists = false; + mRebootActionItem = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + new RebootAction()); + } else { + if (DEBUG) log("Existing Reboot action item found!"); + mRebootActionItemStockExists = true; } } // Add/hook reboot action if enabled if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWEROFF_ADVANCED, false)) { - if (rebootActionItem != null) { - if (DEBUG) log("Existing Reboot action item found! Replacing onPress()"); - mRebootActionHook = XposedHelpers.findAndHookMethod(rebootActionItem.getClass(), + if (mRebootActionItemStockExists) { + mRebootActionHook = XposedHelpers.findAndHookMethod(mRebootActionItem.getClass(), "onPress", new XC_MethodReplacement () { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { @@ -207,29 +222,33 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { } }); } else { - if (DEBUG) log("Existing Reboot action item NOT found! Adding new RebootAction item"); - action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, - new RebootAction()); // add to the second position - mItems.add(index, action); + mItems.add(index, mRebootActionItem); } index++; - } else if (rebootActionItem != null) { + } else if (mRebootActionItemStockExists) { index++; } // Add screenshot action if enabled if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_POWERMENU_SCREENSHOT, false)) { - action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, + if (mScreenshotAction == null) { + mScreenshotAction = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, new ScreenshotAction(mHandler)); - mItems.add(index++, action); + if (DEBUG) log("mScreenshotAction created"); + } + mItems.add(index++, mScreenshotAction); } // Add Expanded Desktop action if enabled if (ExpandedDesktopAction.isExpandedDesktopEnabled(mContext)) { - action = Proxy.newProxyInstance(classLoader, new Class[] { actionClass }, - new ExpandedDesktopAction()); - mItems.add(index++, action); + if (mExpandedDesktopAction == null) { + mExpandedDesktopAction = Proxy.newProxyInstance(classLoader, + new Class[] { actionClass }, + new ExpandedDesktopAction()); + if (DEBUG) log("mExpandedDesktopAction created"); + } + mItems.add(index++, mExpandedDesktopAction); } mAdapter.notifyDataSetChanged(); From c1488837d5f48b4823dd27d902331b1d4f3d50ea Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 11:13:13 +0200 Subject: [PATCH 167/710] Reuse existing internal method of PhoneWindowManager to take screenshot utilizing broadcast. This allows us to trigger screenshot from any place by simply sending a broadcast. --- src/com/ceco/gm2/gravitybox/ModHwKeys.java | 4 + src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 80 ++----------------- 2 files changed, 11 insertions(+), 73 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index a1b6192435..be0aa62dc0 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -44,6 +44,7 @@ public class ModHwKeys { 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"; private static final String SEPARATOR = "#C3C0#"; @@ -124,6 +125,8 @@ public void onReceive(Context context, Intent intent) { } 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); + } else if (action.equals(ACTION_SCREENSHOT) && mPhoneWindowManager != null) { + XposedHelpers.callMethod(mPhoneWindowManager, "takeScreenshot"); } } }; @@ -331,6 +334,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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); mContext.registerReceiver(mBroadcastReceiver, intentFilter); log("Phone window manager initialized"); diff --git a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java index 9d1d749ed8..ef3b58e826 100644 --- a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -485,81 +485,15 @@ public ScreenshotAction(Handler handler) { mHandler = handler; } - final Object mScreenshotLock = new Object(); - ServiceConnection mScreenshotConnection = null; - - final Runnable mScreenshotTimeout = new Runnable() { - @Override public void run() { - synchronized (mScreenshotLock) { - if (mScreenshotConnection != null) { - mContext.unbindService(mScreenshotConnection); - mScreenshotConnection = null; - } - } - } - }; - private void takeScreenshot() { - if (mContext == null || mHandler == null) return; - - try { - synchronized (mScreenshotLock) { - if (mScreenshotConnection != null) { - return; - } - ComponentName cn = new ComponentName("com.android.systemui", - "com.android.systemui.screenshot.TakeScreenshotService"); - Intent intent = new Intent(); - intent.setComponent(cn); - ServiceConnection conn = new ServiceConnection() { - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - synchronized (mScreenshotLock) { - if (mScreenshotConnection != this) { - return; - } - Messenger messenger = new Messenger(service); - Message msg = Message.obtain(null, 1); - final ServiceConnection myConn = this; - Handler h = new Handler(mHandler.getLooper()) { - @Override - public void handleMessage(Message msg) { - synchronized (mScreenshotLock) { - if (mScreenshotConnection == myConn) { - mContext.unbindService(mScreenshotConnection); - mScreenshotConnection = null; - mHandler.removeCallbacks(mScreenshotTimeout); - } - } - } - }; - msg.replyTo = new Messenger(h); - msg.arg1 = msg.arg2 = 0; - - /* wait for the dialog box to close */ - try { - Thread.sleep(1000); - } catch (InterruptedException ie) { - } - - /* take the screenshot */ - try { - messenger.send(msg); - } catch (RemoteException e) { - } - } - } - @Override - public void onServiceDisconnected(ComponentName name) {} - }; - if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) { - mScreenshotConnection = conn; - mHandler.postDelayed(mScreenshotTimeout, 10000); - } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(ModHwKeys.ACTION_SCREENSHOT); + mContext.sendBroadcast(intent); } - } catch (Throwable t) { - XposedBridge.log(t); - } + + }, 1000); } @Override From 06ded579af07fcfbdc6d0b2823b87d0c8d9ea2de Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 11:35:13 +0200 Subject: [PATCH 168/710] Implemented Screenshot Tile --- res/drawable-hdpi/ic_qs_screenshot.png | Bin 0 -> 1379 bytes res/drawable-xhdpi/ic_qs_screenshot.png | Bin 0 -> 1861 bytes res/layout/quick_settings_tile_screenshot.xml | 23 ++++++++ res/values/arrays.xml | 4 ++ res/values/strings.xml | 1 + .../ceco/gm2/gravitybox/ModQuickSettings.java | 8 ++- .../quicksettings/ScreenshotTile.java | 49 ++++++++++++++++++ 7 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 res/drawable-hdpi/ic_qs_screenshot.png create mode 100644 res/drawable-xhdpi/ic_qs_screenshot.png create mode 100644 res/layout/quick_settings_tile_screenshot.xml create mode 100644 src/com/ceco/gm2/gravitybox/quicksettings/ScreenshotTile.java diff --git a/res/drawable-hdpi/ic_qs_screenshot.png b/res/drawable-hdpi/ic_qs_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf51a7ce807b2a8d476a57022ab4b48cdafe173 GIT binary patch literal 1379 zcmV-p1)TbcP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*f6 z6&M^D_CX>@2HM@dakSAh-}000EONklcGRSi7_}7}Q4~?pg^)#XK!ZvYoM=#R z=tdV&p}~cy#36zMX;g@YEL5U#j6>QOP1^2$Rma8qA6$!iudDjqBnow)c+-7#&i(Iy z#)3u~X{3=x8fm1F|EE};#qMrE5?ofekM+2}>nhWi0GWROm%74wuVAy4=yD(j+Ggfa zfe|3b0cQhe0&Dbn2uOjJUejO$3DDMS889K3^IDq~He|u)E_g}Fnh@k%SJ#dO;5T3g z@Tr;oQDx6*MF7Wv+kwk~lYvoSI4~yB`@9b``eNUMHG_D91t87>UjWaz`;?i@4-AaE zr@*BG=A^**kOi(&`5gE~3~JTfOcDu@whrw);8gAL7~n!+Bk(@(eGJAd1I`D=3X~2v z?UC_b3=Y2HdOmqkF0w)M7jV+yT4<96Mm6X|WlT zD=SQh)=8m}T#9@E>;$d_?v^cK+8xsOJAil8{B4N9m?YYw0Ocg8X$FxD_(-g|vj-Dg z0sbznn~oS~qO}CY6zUQDd`3Ok_#*c^O_}M}8gZ@PbT5wuj4LC>6jMf<1O8fM?E&du zF~H2G%kXx=T?clh*ub>tj7d}AwLXk-;8n$&bC)puDs$m1CS$V5-LnDfm4crIJ}J0u zSI@`5b6U4Pg3bjMlTm=lRB$Z@OkRUouI%=ZD(OwYi>hmW26h84D22}g4_1gpWp)=` zX`!l(Rnm1HOv92wWG_zr6SVj3xLGkx0u;X1>-l;8C-7xURSSlBAwy;%~jh0cV7kECWft4OiF_T z%YdH*cobmf)FZ6}E>bqJLJBnXM3Vy2fVY&A!-sUeWCD0Z1FN>|S{^i=NriB*8n{1T z_K1RYH{k9C-lp>uV{l;1EO+;5mF?Hic?>b8+M=b5G2CNpfDGDsn8u#2`*&l?{@}NL zij9ZF_;-P=W;PdfJ`s#4M|7IqXGdvaGS(ex?XGG>6olM|)R7nCPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*f6 z6&^e4wMb0>000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000J{NklON+s+e7^;TlDtK&P-3&vd~}BnVy;M>Z7%eUCsNq!|Ec`n1PH1(5Np(mB(s>uMD3oHOG*P34k{`LvL zeBfb$aET@rJJK0D0HAGp95^cJ3HqS^!knevN_zlY1}u^qwLsK>Yk_sZXTSlU04xV? z7V}G*Xyhi6jf6hQ>T?hO;*)b z^u1RAtm?tpc0mU!qclSSD765PI4$MdCjHP1U2=E)Q2bcp~sU5OZ0M(s5O`23TfmNSu`I3iwmK$w! z+^u)?DzHfrc7=%yWW9}Fenz{-M%N1!m0sM1FvM9@NJ1dIsUVvRsRO@CZN$J$m=tww z3Kfw?>oM8IF@f6Z-U@I6cn5e7ILt&&z6xBANfbUIFzX&%(b!Ro-rP_NzyaW8J^VST zje#EY;+P|`L7V4(4?M})Irs&7{s~~ej<*HU$~Nw5o`IT|$TW8HJms8I4HZmAb%U5+ z23`cdk&*rm_*y~`%KzU8{M4Z>$U+U@D#)gvtC+O(3j$-MKI?atssx;rR|PHXb?va(5r-Lc%- zAxZzq9092J%FAAJ`eXP_Lzfb^ryFOX(I=0umFpRip*N_PN!bTRo|qpi4`e0zXor#< z0Ka1j>+^t1a}pZw0N4P`7XXpe&T75iE~%a>5m#3*2CznHiYTY~HGKl$#sPV^hS&uT z0^9WdU0@%Ro4{OkRmNmfcj>do<-SIJRzbGzFznL^yB%)bsF5s^63P2ntMf-NErCq| zVcQ=o+8rMQkLljEz}*>{->U7#&TYhZBs|R7O{<->9A?p#b{D(>Y*s+_fTG>4%0I=j z54#-6Uk<#fdm9;dVVd+?aK?QDFd|Q=RjWoaL1kM~su_Ie2Bs>u2Y6PmJ9VVdy}&C1 zCu=gUG{wBm_y*t);4e%TvYe6&N%n@?PU=m-4Ne5TqX$*61e1o|s}#dNOy4P*&pJ#S z;d<%)UYNg40`d<}cm8Pwie3RYj7bYG#&jo?QleA0Wu=D6(=T>*PLKc~ zrn5Gex^~iLOy%q}@UOm`tzfMt=5$gENPFh + + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 387b46d685..62bc06aac5 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -78,6 +78,7 @@ @string/qs_tile_quickrecord @string/qs_tile_quickapp @string/qs_tile_expanded_desktop + @string/qs_tile_screenshot @string/qs_tile_gravitybox @@ -104,6 +105,7 @@ quickrecord_tileview quickapp_tileview expanded_tileview + screenshot_tileview gravitybox_tileview @@ -129,6 +131,7 @@ @string/qs_tile_quickrecord @string/qs_tile_quickapp @string/qs_tile_expanded_desktop + @string/qs_tile_screenshot @string/qs_tile_gravitybox @@ -154,6 +157,7 @@ quickrecord_tileview quickapp_tileview expanded_tileview + screenshot_tileview gravitybox_tileview diff --git a/res/values/strings.xml b/res/values/strings.xml index e07738b0f1..ea5e1f7d76 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -105,6 +105,7 @@ Volume Expanded desktop Stay awake + Screenshot Color Picker diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index 3b5dea7772..c7f87cbf48 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -19,6 +19,7 @@ import com.ceco.gm2.gravitybox.quicksettings.QuickAppTile; import com.ceco.gm2.gravitybox.quicksettings.QuickRecordTile; import com.ceco.gm2.gravitybox.quicksettings.RingerModeTile; +import com.ceco.gm2.gravitybox.quicksettings.ScreenshotTile; import com.ceco.gm2.gravitybox.quicksettings.SleepTile; import com.ceco.gm2.gravitybox.quicksettings.StayAwakeTile; import com.ceco.gm2.gravitybox.quicksettings.TorchTile; @@ -115,7 +116,8 @@ public class ModQuickSettings { R.id.quickrecord_tileview, R.id.volume_tileview, R.id.expanded_tileview, - R.id.stay_awake_tileview + R.id.stay_awake_tileview, + R.id.screenshot_tileview )); if (!Utils.isMtkDevice()) { mCustomGbTileKeys.add(R.id.gps_tileview); @@ -535,6 +537,10 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { edTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(edTile); + ScreenshotTile ssTile = new ScreenshotTile(mContext, mGbContext, mStatusBar, mPanelBar); + ssTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(ssTile); + GravityBoxTile gbTile = new GravityBoxTile(mContext, mGbContext, mStatusBar, mPanelBar); gbTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(gbTile); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/ScreenshotTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/ScreenshotTile.java new file mode 100644 index 0000000000..a1bf72f6b6 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/quicksettings/ScreenshotTile.java @@ -0,0 +1,49 @@ +package com.ceco.gm2.gravitybox.quicksettings; + +import com.ceco.gm2.gravitybox.ModHwKeys; +import com.ceco.gm2.gravitybox.R; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +public class ScreenshotTile extends AQuickSettingsTile { + + private TextView mTextView; + + public ScreenshotTile(Context context, Context gbContext, Object statusBar, Object panelBar) { + super(context, gbContext, statusBar, panelBar); + + mOnClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + collapsePanels(); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(ModHwKeys.ACTION_SCREENSHOT); + mContext.sendBroadcast(intent); + } + }, 1000); + } + }; + } + + @Override + protected void onTileCreate() { + LayoutInflater inflater = LayoutInflater.from(mGbContext); + inflater.inflate(R.layout.quick_settings_tile_screenshot, mTile); + mTextView = (TextView) mTile.findViewById(R.id.screenshot_tileview); + } + + @Override + protected synchronized void updateTile() { + mDrawableId = R.drawable.ic_qs_screenshot; + mLabel = mGbContext.getString(R.string.qs_tile_screenshot); + mTextView.setText(mLabel); + mTextView.setCompoundDrawablesWithIntrinsicBounds(0, mDrawableId, 0, 0); + } +} From b4d0b5eecc628cc3a00951685715bde19cacef7a Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Mon, 23 Sep 2013 13:20:19 +0200 Subject: [PATCH 169/710] Updated German Translation --- res/values-de/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 62d705d09b..ebc32c7a88 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -75,6 +75,8 @@ Deaktiviert Normal Erweitert + Wach halten an + Wach halten aus Statusbar QuickSettings tiles @@ -100,6 +102,7 @@ Aufnahme Einstellungen Erweiterter Desktop + Wach halten Color Picker From 63adaab8406f509abf41fe73db641c6a615e0f41 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 14:57:28 +0200 Subject: [PATCH 170/710] Improved GPS tile for non-MTK devices - changed icon to match other tiles - added LOCKED state (when position is fixed) --- res/drawable-hdpi/ic_qs_gps_disable.png | Bin 812 -> 1599 bytes res/drawable-hdpi/ic_qs_gps_enable.png | Bin 887 -> 1713 bytes res/drawable-hdpi/ic_qs_gps_locked.png | Bin 0 -> 1911 bytes res/drawable-xhdpi/ic_qs_gps_disable.png | Bin 1022 -> 2584 bytes res/drawable-xhdpi/ic_qs_gps_enable.png | Bin 1115 -> 1968 bytes res/drawable-xhdpi/ic_qs_gps_locked.png | Bin 0 -> 2659 bytes res/values/strings.xml | 1 + .../gm2/gravitybox/quicksettings/GpsTile.java | 41 +++++++++++++----- 8 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 res/drawable-hdpi/ic_qs_gps_locked.png create mode 100644 res/drawable-xhdpi/ic_qs_gps_locked.png diff --git a/res/drawable-hdpi/ic_qs_gps_disable.png b/res/drawable-hdpi/ic_qs_gps_disable.png index 28836b8be5f86d52149fa4266090a052a5227370..d2a4a49992df106aa3c9c62e531f5a97218e230d 100644 GIT binary patch delta 1593 zcmV-92FCfU2EPoD8Gi%-008|9F$@3z00d`2O+f$vv5yP0Dy!50Qvv`0D$NK0Cg|`0P0`>06Lfe02gqax=}m;0007FOGiWi z0IH26G5`Po32;bRa{vGf6951U69E94oEQKA010+*L1zE}0Dmw5001xm&hCs?000Fe zNklE^Xr|pkK z5})(Wd)~|QeSe(rQ_Le9%!*ykl_z zg5VYpix50$EAb#=03;_M>a^qm>I6|TmYFJJu+GUJ$rcu}B7q#p>@c&uqU6+Fby~FM zjS^|qqIU9uBxhza^D9c`RwM7w?j|?6&Qg(T3<7->}w0S%m%M{M%L3l<3_9eO*%Qv zD-zR=1T^`$lpg1BrS+O-iJFmxHdutSdZew zuB&%wR1-OYB$^N-%dH~Bi5;s5P8+HVt~~iQYoum zg%d8|-P+8RR0Ec1Htd3vDty)FB&0p$N5ufO-lrg4cZhHlEd)#6R3_0z94;2TK5=!ech$f3& zvRMzJTx6YYqH&`}jM#6;5?2e-o^xhS1D&x`MzB zt1oAutR4DLW0lM8bD}t87XZ3)(IXh~E0?TujmVhCCCyY~Mc8YzF|2f(5j%|v1zx2Z zbP>sT(LRgZV*&a-pjT7^lAHO1P5y}{_h`{;kF02VJ}CFnkJ;wDPy4b;{L#I37%qBC z!9`D5uNPJBvd&rCoG4{hF5xhsS$~)1PC6v(4Zn3rBq1#$<-Fs5=TSd!R8Xzk11|St zTXKH0wMdd8$`@RVZMMd7-?!aGFkhQ1%on-fq=CZhm)xhtPG5JdTme?biSntZ!z0$X z;O8E5#CWcLn{qB!^R4#<4R*R;fBqKd1}H$ZxnH+>FMGm^ju@PBYN7YKMSr&rBer|Q zk@D z05UK!GA%JNEi*7wF)=zYF*-FgD=;xSFfbl|XbJ!T03~!qSaf7zbTVZ+ZEs|0W_bWI rFflSMF)=MOFjO%xIx#gmH8U$PF*-0XzjsIn00000NkvXXu0mjfoTb?j literal 812 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-smjZl3T>lR{Ao2f763};UB|(0{ z3}V{y!YnGjo(3Y$l2&}|5=y3COsw|S9$Rc~7N?Od&+JGj~3 zz05z$*FSmPW$zskR@aZe*|a^5^KD(m)8<86Uo&wheZN>!;FSENP1&udT1Wd4`}8GR zoAtg(F1(oG>n9WS>dO9yHk%}-Or7ksx`^q_f&-k9+3$W$*z)b9{le6r&Nh$p=Qv2} zmY*}5Ez+Fn${X`TNa?LbV9MFG8{ev~^!}K0>fCab>k~UxJqjw1&D!cb_4E^mV}Ce2 z8r&antju_ovNwRkDLiA1?f)|07F)~ zdM=|ni<)rt`}#SoZ6BBge|g^Q5>ggWNmB5t=@Qze>6Nm5QHvPMk3frh|D(+R9?C19 z{MLWP;?UpVJc;%{yD#QVx;A~=%^b0}onQ9XZQjRda9>AwcfFVdQ&MBb@ E0PU8*=>Px# diff --git a/res/drawable-hdpi/ic_qs_gps_enable.png b/res/drawable-hdpi/ic_qs_gps_enable.png index 20af28f4e5b46ac49aefb6fa620364f37399bdd6..851b60b3aa4e15532aae93efc04caa05eeec32d3 100644 GIT binary patch delta 1708 zcmV;d22=U>2C)s08Gi-<00374`G)`i00d`2O+f$vv5yP0Dy!50Qvv`0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000JJOGiWi z000000Qp0^e*gdg32;bRa{vGf6951U69E94oEQKA010+*L4Rie001xm001xm&hCs? z000G%Nkl40~g~Bfi#3N!3ZSyK)4PjTv|x12n-++0nt*V(>Xq@wR`q#_L;NK znSDrD$Dk)*GgIqYUu$9<1l~(&)dKxAUzIj3 zv8-KvAe3@6PORMDj_1&AbFsDwbn^Nvep~|E!4Ggl{%?&$D+DU8)4_pQTOn{@{&tJ; zZMf3N1Zw=f(0&*5HLuL)vtr+M%X5rMW~3<8XR}V|X@CA`3*Drf_txS7HNm540I1X2 zsNf52FUNX(GOtr{RFWynTX-Ii;XeEsf5Tj9uAwb46oDFFUym&~8z09?yn&bTN`jVT zj=+&P1aISU+>SrsStW}NL!vQ(3ixIC94^5|;Xd1O7w%6$Z{nRCzXBgf!W*#(AH&`p zec$`qd@-C^{14re{g_h3}slZ=FiqM+&Yn0XzVRa`yh0Vf+C-V6-BA;56 zz$W2;%S5zTh5ay#f0q^;hjem{7jw;T;(yCYU@mc8H;BLi_+aT-0rqw5E(VRG!;ow3 z&b6fSif}rY*cM0~fpVNK%bfZ`rELQ9dP!XwLxF37)NSJZ`rKb7{BbP3q>?Px(|UQW ziNv-*>MZayexHN)iYRoN$bSyfGjHoMGquj-^z1?SP~LhJI}-eSVjD={9+6}f?0>i5 z=lBR#3M0mSeq`EKQ3j7BD88Cmh=6+Xf)(b_gu~zu~w||Aj8x>29 zPSuLmPDpUNpEup2QF80000bbVXQn zWMOn=I%9HWVRU5xGB7bREio}IGcZ&!F*-0YIyE#aFflqXFdlwr3IG5AC3HntbYx+4 zWjbwdWNBu305UK!G9@iBF)cGNR536*F*iCgH7hVNIxsNOm!ug00000t<7&oJZu$U&9c_v`@r zJ)k7WFBljeb1K56ZT=rlV0)f?UYEzX_wCQv`8gjBh{{Q9e7O46u1x;+OP?nT?Y$AT z^w_uU(-fVqK4D&=!g=P;%$BYqZ>@XlT zZ?E2tYH|=@c%aklc|}0?^PHJMWt(g^r`xw9fo0wNCV)|)k3_UAMA8*@{) zZ~Is0Vz8}z(e9ulT>%bkJ$q+tl4R&mH)CNq`M1EqS9Obt_{naq9gsOgh; z{DRon=qGMVTf2j1eVDJBy8V>vUI*>Fi`4h<&bqeSth29Wfj9T1==HC^vt@HHpDc0d zYA&;J<<_{|Lzd!|W>y+{*Lq)Rm3*8RmmzwgxX5t9?{B|idNk`7+zw2(wR-(?ew0$) zR~d1h%bi`~?lb0C9h_|1uQD%wmE^tRD_dpHtcd?@vCrz&d7dAl5#_tvH5c!np~wAt zhDDUtwmSwIE7tvPd)Z?Y^>z1AYrotAj%=l-)3+yxy}x^?OIYT(*$$@Z73>!ZCw%ad z)_!Kumvez-`VWHzjwe|T9Ee-HG-zcL@2Ll3KOPzJStZ|WTwOouftZwo&yQHG#^@Tp z*~G`4^E9db%RY~BKELGJgl$xQ(j&F@wRaF{)tt|+uROX!e(GwP;sX44sn#des<#yKZzuzC{^M0Q9`8@CYKJWYIo8#$$-VNRd1^{3;7K8GZ zFzh?z-8=#2T4Qjv@03~?0k=!p5K|0io&m$fOrXG{)gkkQ3%Nt z8jC{uMoulhjmkUar~ZRz`uT$cwaqt=tI+$DC^D>^!EZJD#>*lbZeICQO9rB)beeFb zTq|1(=+gP^=iE`mM4VGX@M6OBIRz^ zTE}t?nCfh8{7frb!{PSc+>~W~3Mll6la={;eP-tPAY1wit$M_dVmrk+U~5Rf#y&Jz z3E=fTxKY9td&>Umr>XQgPnTT=&Jav5R+IcIi9gDHe!gQU~8b z`4%HBv>{Uy+TqW7wZ*|SJ37jC1Gv{NO($p?qM%r+boZV)#gx!2`og-)qg^M}l{-zX zm!Nlbrd>l`+FpMvRtc%%LjSmO32c!K99#T7yZ++EjEN(@k2TODJ&IC=l@9C5`N6v3 z#=O5x);QN5f}m{bw=#k|b;j8>p~sc;Iqrvc;19tN2=>6diJv;bY?aVSbi6?%Y8N zgQ_3*IUM$;MyCO>uE^W3d7y8)Va^f<%@j_hv*Z{FNqqZ$-2(ow-fxwGtB%=QdeZ^s zB>$X|iS85`lla9at*8ef)f4BMo^_4G6Q_!q(JHB(rj%8WT7g&8C(AW`GFo7FD7}ht ze>u@@lsjt9vWQd+ucKPZ+PceBsG^Dzeb$moO!neZ++HY$d@P})wqX|bC@k*uwY@hj zcW%GkQClCm@)>kYuq6mSW6Bv1FLYAx-Ec3z6|HrIfGFj=o+f+rPBZz&W5UwHmRT%= z_Ih@eMJ|c}g|@Vf`j)~UW4dYWOsLzQ%^_G*K4Q3P{_2it_Kz)#JRW(*t>~H=%f9@Tx-0eQ% zh|rg7Na)e!YAPqeaXXddL{2Ob47YN!u@6N0cwviMRXgDnjE{7S>eu1mmXEvpWi_{n z`9F(GFx4IJxOQu>5W_uke5N=eKPXVhjv6a}XmIh9>Og?PKO}L}hs({VG3Fm3hlPDq zF$-pQI!1kQft^J!lf`Fc?C+R~9G3`IA#y+Om%shTVgZR@l4$T^9 z3aEmC3|qa)-0F8Wchvh+9Fe!4o_Q~=l)4SZXIf1!>zcL8d!gr<13CRVbO^-2=B@Gk zG!$$DFJ@dh=O z6PT4ZPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyxD z2@f@}#DppU0122$L_t(|+U=WptXx$c$3J)GmD0HMmO=}$dXTnQ7ZzKr$OBrI3evhn zj0+|bCrO)M2vtM6H|NH1Y+w#G%Asxtw0e$aVSu#!4jH+0=Kk?6w3i(*IE2y zzK8t0%)GugZ)S?MC%KtB_nkYxbAJ2p`#TTzjeX<)dL;cKG;761*36&6tQ8xFoEPV; znLnj3>l)Y-T+hgRw|W5G|O$SlIFbb-Tx^D*hN<= zm2#HmW#jyI4DsrY=peH+FIOs+a;x8bL*@a+IG?3?2}pc!H52;w2hIhqZDRr#151JJ zmJvY12UqV!p3rq4ppCz_;4ICL0!{-?0*(R3%ht;+e8Xbk3Sf1X=Jx@2_~0Hh3{1Km z9g=RUdzR*9Bk|LK^MO;f=}yKL;BMgiKDhgeG@?fAF$NfQPo(bkEY05oTnT)lg^zh0 z_#5zy!kt~mbl{!9G+;*Iy&CXK;OjoP^+wAYqh&(UrOo4mYh-D@5coE5pqaWE_$lxk zV66}Ch25CY!N3u~$AHfP6V0Dr02cY+mRY)^VM5Xk$?LibSX5Bo>wxQhaL=0!4oEW^ zhJL)SS@q7+{B6J`z=Z`f`Y!MlUmw4b)L})#;a_eKLniPgIi~qfF!>hI7Q!A z0Vm3dj>s2`v=%6d!1>yI1IU33eQ-Ms;8Dxc{B&u^OqobS^rFU;3=?93WSw9Y_#m({ zOY^zbar)r41Lpz%(A*CJXG=TEUH1W!epKxPfIk86()$a2a7#tFu0_mNBzUvbwA`Vi zt%@lDm@8+P$T3#4G{0EUp#l6Em;-E$QDHb*Q0hSXA5o^3i0F?k#+Rk}WZ)-V*nEsq zHARbCvNS&+nv7`P46M_$nZOBJ` z>JrEfIm>8DXB%JBxd|ADmza5V;1FQFq`MI~&Ik8wmgWOe$s>UWRrYqX+-?}ZFv|z` zn4vjMCOKKAGEG^i%?%puOk!X+$ZeyLsT~izNnan-=B<=32F7(k^;-$5F7JO)#1uvQ z@4#wc0q|DfSRdR9t)cTwQ1N?=2oC_;m5N5GK5Tr$t}M+DR4D58n3JV>>VpeenvYS$ zStACNfVo+kR}`vidbTSjR>NX|QrKI7!=k+@^E$Lp+FCWAq4^DZ1GUB9oDRHOu|Lv& z%*;Da+2$CtmZ!2b|M*}F&~;!4m3uGX+WdVN@bsGbQ=n3bW^$;AR(pgtN7Q&ft!ve5 z2~VYx8?#GIjS`(dNeCqMBeh8XvXi8j4%_k-njPhBh`SqP@aQzUzQ!6ArD*z zrp{Wi@sVaN1i(|ktH4`Kv$P>I!d_7h5#Di272+kJ35m8(>&ANv6{) z23+BT+hVZ?;4>!C`L(p86pJ5wjT#To=g&;sy+HMULp6E{_#tq+%xhN{HXk#~UjR!* zBVqz?2NsI{_UMzkjt58!sv=$i{wR(g1YBl82;l?g3D1kEaVL;HzJ5{`f!`UNuQp7xh$(C$2Ck5) zZHaKZgt0(9f(W!;ZF>)0M}!R6S@OZ%3;am$j{}xvX?~c(XQDaJ(QJ@@M!sjA5` z>t@3>{Vf8d+i14iKIMaZ(ewwZS(?uPejw(SfSY}A4@6kJr;QO~gNFcr0HzuUd!7&O zRfVXUIplB*a4F4J`Q%~r1Xcpy^TGYqgyaZ>P7vT4A^CMQ&mL?Z3i;`FXQ-sM*c{+4 zscH$hPw@1HLR&0$hYnZFo+(B|W<0NJ4Y1k=_mt@hVbp$_0M}#n+uOwSRaW{vV?cok zu|xD(nM2IK*Q=Sa%D`4O!`$s?^^TamRG>>Vm$Q6uzv{Ft)^Xv|h6zjM4^X~-C2&n_ zm}F@_rckXljEN-0GB!H2EX~K!JXm>|z*tmsoa=+TwNuG=g#i&hlX{*k80`=<^)J8@ z;I}@w%_E_q{9=JNe}pM*p9MbegS$V{w&A)j3~0fGs0q_(9&}nznEtr@!`(`!gKeeh zH}<31bs7Zb0dr|~pX^u;T;hX!rdwx)x^hOyGC}v}$m<{30%X}ChxddjRtD5enJl2C z7@i*mmiXY76={uT^IZckiqS#$Da|(8Lg0A8)FT-?fcq8i@9@FBT%^&Bvw}T2C|Q({ zI!33cf}AO6yVZC?eq%LoPs{_X)VqC9vg`0w;S5o!82WU6@J?Ev6g}MscUOy$SntM> zxV|u;s11f0vCDLvGRRg8n5$wdc5`0abg%x6rf=u+E0s!&6ep>2YsG+*eQ@_?XW u?p|pEg_9?*^8te$p7`81_Kkg`qwyc7F4J~pV^Sdi0000lexQGSN`m}? z8JLwM_*s2j^~IUoH8_2|wOH(3xI}bKZ8!vM-GrqTd9>A?)Wke2ROGGgy!dn++0ED- z44t_Z7%labB|VJ|1VznNtz>zHj5JMTR{hOqWME*b^>lFzi8%ardUW(71A#WnQj6e# z0Lv4BTI&vV#E+$!aM!Esa?iI{@PC*Qw_=)lV>@%XmtO5 zHLq7}<7^#Hy*)YWr^^|E-*{&RiX828^%)$dF{kT^&I^TYdahCeh4T{D^@D?>hF2kx~}W;HKhf7`&za> z-r@LsL94U0zRRKsOPPKMYxVKhXPldB{HgD4=XDinCKdsm_v!W<%qkS^g&DeI8=lV( zZnfJWdN}&hevt?Pj}?}x9L#YC-~YR+!FG^EU4GV{6En9=o-$5>f} zACX5 diff --git a/res/drawable-xhdpi/ic_qs_gps_enable.png b/res/drawable-xhdpi/ic_qs_gps_enable.png index a3d9b3b027ab44841aab975fa40923482cb2103e..c1ca3507693b3fa01c39781fbdf36dc32dd47bcd 100644 GIT binary patch delta 1965 zcmV;e2U7Uk2(S;38Gi-<0063Kaozv`00DDSM?wIu&K&6g000JJOGiWi{{a60|De66 zlK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RX3myp(8CG4_761STFiAu~RCwC$ zn`w*`MHI(>-7_u{R8SN!;0@vt6$Hgw@YeN8{9rT&)WwJzkAH8H7>{_MUkt(fh#?x| z5sfAa;)UXc=cbl}x6mr@HFZyWhX6VRPHu zHt7}=HPN`aU39jOVBFlUy8T?A&h`<7&{f{R7#|l+NUInSZzv{EBm+XA0*nH#tipr< zm<4=e`fgMVaDQsQGjLgrKF^8)!NzO?y+Bk$1A2=lCTzCn_r3$oS*q~~)#pFY{;wEd zi5@q%%Pr11zwSDZb{owo>Di_-B5b0xounguDnNf=Y@K1os!zo{SJGHb(TZ}Dm>L@| zegJSHFbNnB43w>xs`!SP!1cg~zye?%@VW63LEh0J$bVDajl|KSF9MF!qO-JBz$?Ig zVu(LSpEJfFr^Q?8>;v2coLR-hz5u=jepI-#&yNCj14aUSdCx__Q@{k+ncVx0FMFB1B-!`>lu0&upe+ba1Joo{I?RA4$SuE&CG-#C&>rE%_7dK z@7=&Xz<qVG-Fk)dIQ6O%YkX08Ql(CZTvxICImT1z69J4TnMZMwgBb>R~ZKu z8bagsI8fKO;yKbgfg^z)piOg5>#HV&ee@qOaIY5Mt;Ih8oTkN>y{NFhBB-Kh&}-=1 z0$2o`0z9I{_W&0IcWBJarW|IJeo4em2c}B${eOUKMc5kSts7Z*t-{HfL<#s4m?Bei zOt@U1iZiXWIYJfBoKa5`7jMUnWnxo- z<$wBpsLUg-l416p0g}G6%fY~<#`)X`EYrlzTD;GQl9H(z#u;A%3=oY$qrM=_ApMh- zsRh8t^2|ZOP?ux=gTR-%cc8*#oMv5V7~t&tTyyU(-46@K`6`;TTgjG7#-^D6vpYfK z@B%MO+fljrRzMeU7_e0FzGyVZ%{dZy8-ExI{I1`tJfXxuT+K0t>rpcsi(}vj*%`ol zT6~GtH0KMxQ~3v7%)gS=CtAiGe&Q-;k7C)GE(j|v`iGO zLq+=#ttAy8QU)Fcb~pCc1MKRRw!U2!-JCE!H}|FjCn%9}4)J^7jA~|Dt~2nyz<(|^ z{$C6Hplz%Qt!uGpSYlGMWRG zXl%@n^Rbuq(n3dw%riFHTk`USFbe}Bc(jH=0yWw><}Z&z|iYxAAguu11dsXhM8J>wLpoz^?Q$TbGtrjvE&^i_Apwy z7llFC|_GtkAuKNZ@N)qy>S|M2AiM1bpPB?|*em^m3gT zYwgTsRI7!=Tm)<_6zJ0yhrzRD?*Pv!B!)nxk^Cer9suyTiMtn@XwVAj??kd0<4~d} z)2^$bj^d;%c-{ft6cIZB*Q5m@a%j#cU8f2#0A5p77y`Y`!UO|Je})N{9ReqdstFt_ zeJU{7_@`U4U=nE=;7ZWffq#c}-Cx(c6{Px+Ai0NFxAF3z9CYf#RjItU0Y?!!^oEiU z6n>5)*}!O~(ZH*~6+&fdnO)%Ba~q*${CG{<3LbYN z@FLX@OP{1r=bP5QyE}O!(76{dj=;|L5wTgkJJe7H{;u=*8ue*2!ih9iQ(mJf@|_`P z7L!!DRnvfDRA-br+ebu2m6e4xNw8kJTKFbQtKJ!E6^zzW2DtFJnB*K`H4|9u_1&l# z;1>L=GP*|kZYGo_5K#ZU!42k>y3K8K+XUJ_J6%*^KckDpJB%R5s1!s__+cD zA-E*SFPMR$bV8av+u{G)lZC#`)LJUn*n9Pou|fW^KRJ_`&+vTqlYXVbdEmBa=1I%v zu^t-(b*EMQjB+j7HUF)m#NHeH=U0b^v_HA$v_d`MVV%vo4=r=Hc>h=x`;&ozX`iQy zV@Sl|x6`woZyAWR={nguOzhS+_hwvqpv0ANXYXm2=C^QuiU){K4!IukT%Bp4jJ=g6@YC`nlhFhs@NWu9OW zE%0FSKI;RWDOzs@jc(R5_`SHu<2pyWnsH9z6Ai_TckBT@A@jtP)c7@C=q!>@Y3ZJ% zbD(HdnWVoSTcIDv(=L?-F1O}~>c01#cIDG%RrVd9(%%2-{(efWb%kV5!|c`;zr2^b z8`>&kxgMmu%*d=r&Pb|LH|3rhw%gdfBvkBn_sLfevi~#*U8?=mcIK!8eUC)ABg3x$4sVNU&`y0l?^>hIb2hb`r45Tir#GxUwlgm& z>6{>c%LJ!}uXk(fVuYQgYoB*AIL)v*zxIO!<5|sL2f5WAUu6=Qn(2RIq3iSgc8jZp8fiAu@q`Q8mOi)+?CjbsS>zt%;Db-E)jNd|Ko>ruH^0SVX+S-TUf%&H@Dh+{$u)w&#CFDS4mgfvk67Aler`04>mnG zbi8BJk?LgGBP}i4`OI_Q+sQG^^6;=_+OnN7=Y~VTl!#R617~v7a_m!Ln{*r*J~VfH zaOX?dcT&jZwxf&+rxHU}T${q3iE0Y&0`D^?^0qYb9FX!5G|O4Nc*~3e+ewz%t78NI zCwhL`GViJPue($1-rc`uQEz|m<)MY^cLZCeys3K1+5f(JOZjrc&~JN;kCxb;v^A@b d@&51pht=S0XrR+O22e&}@O1TaS?83{1ON~h1JVEh 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 0000000000000000000000000000000000000000..b2033df047ed075e82cd50d70e4da3f73eb95e48 GIT binary patch literal 2659 zcmZ`*c{CJy8~)8;24lI`nk8flku8JC&cr0!7`oTiSjIk#-PjruCX%gEgY4Y8DIu~) z*{ZRWC2CBIkZmHVh;RD-`~LXOd*1gs&-0$=y#KxDp*q@I^Ycpb0s#0iHda_Rn*DBW z7<=9hieRvTGr-)=9Dv3vh&^vEHitxEtt~(UU3!^KA8dDRjsd3KMEa&Fd`JQ#?+!3UkWW9>eFFC6GDahsV z`tiz%K$ood3PLTyxF@an#ws5S#>uuq*U>!lQe(}6$sX%m2)(^-k->;-q@T8@cP*|r z?RXt*zX{nu=$^1Vm@ZnGG*j>u&bcC>tAliEEp3&MJ-j~L`7?pb>{2k~-14@SfEX|i z`1%hplTqQwrtJ7p@;FQodrHm5)qvD;9!dK9GP3m$Fy69*_j6t{qlWUUd`r;z5f-~H zWBMiv>0dE$wH3MBwQI^{R`PXdCS4a^@RNbMx2`mvlh!roB8P&RWi)$ED0PhVN;8X4 zZ%cfLBk#J>wkJjJE@cP~DX6xKpW`b*l<=r?e3Ez9tY#d8-hws2QUv#)ZK7?1DWk6^ z$Ct()w%TF(m2$PaBn{?@!!FiR<|vwya?9GY^h0w{IW5_mD0!9>GiEj1$DPsxopWl- z-q3`WA=Ei@9lFj!yE&2$&77_zT#Ypkl%R-g&G@-OWZ`1zwO63?AcZ>=CSzzeZ4J@n z^y28`Dwa)2y~6I;SV>coaLq=Q<7HlQsll^o6L+v*-pNVmQKDxM3Vg|CxhSP zbc;kXZ@ekhG*BYF7BZBV1o61(*>RTna zuh0C76uKNtrDmww%o~5X+B;~YcwSV8YxKL1L5X1JpYckO@dyfeY5>wE`2A0oC$kZx z)8IpoQ}V2Yk6X`bA3l6@Jk1rbQtja>Y1JNP+IwB8UpiZ80fn7>1`i%rDCaj%L$A0W zTqSu5{@b{}Q|{O?KA;}Q1$-HEqp)?k;m=4QUQqwYHdLD>ivPzrt|OOTC=zv%m88Im zWikNNW>bpNw7OfWoVSd2t&%%IBPG~ARD4tA~T31LjxB>U5I zjR3qzsyFWFU!looS6kP5V<7kSdcCKVrdkk+{>KX&sxP-F_ihwI|!pcz(FOY>sUDAf^t=(r-?J z#lu)WAuD>^J5o1rf)w%)Rl^KX1o88w&v;f`scbpfb>Yl(rEci)@vj5@94S!Xpt6nc{`7|4IocbWOvKP)_sbIbl#}fu+D2a zl_7VjpD2Yn{|K+8=wP)SJ$mLtMZPJ8Wh@o7%HN6H%>+2vJRXdyb zzw5K23x>uqo8&!2+kBY|U)BfcA=)@}WGmlDZJ6Mn*#cB5`YdnOQbN|YgqZG-?Yk-` zj&H~VLtoOd$(s)qlf1433-dd5VFvU%?i_eRh8Gmc2@p}`uy??|j(>AuYbXEZR%1XF zzjz+AQ|rC$O7Vm~mzg>?{xliRic9<^kL%8j=3vQ{&OeS=cBq8fRx2sCP~oX|xVnv( zyYRn@f}qRje)d-kz;!q&`RhH{Mx>hN&n)^5MNhrvMAh&RXe*OLd z?yqU|Ux9#mMQX?O@<67_V(LA4y){b--ws@JclYIL+5WdpWBzBjT&Qo3#yph4+x&e0 zp|$s3-f0=0B+BQ#o~+F;msRwRPq+=Y`+#q+<3sB0W7T>y9TUnpQZigGlFMiA-oy)F z4p6&ZNS+ekoc8`7a8?4dPLZxsJFz{qrXK)uk2urhBkrS_&}M7q{<52!f%k+u2%9#A zcl+O3EFX&sEsmFo=O*T*q&*4Q{rKTVYP?u)%k!!cy!*l zV{)XMav}Bv%eE+;g4>ra;v;K}y2MJ%YM^L}7yd;Ts^tIRV=Zbq2qtcgP0_A@+&~8i z%GB5|)QPn`(EEg;D`F316$9BFbTkL=P z?3}*j7NJ_{j$>e0P~yL(FP!F&B`0>5X>D=u9mUNtj!5Mf``xXjgMPK(gF2D8<)lGkus4z>}_E{CcixA6C z>4s2I5f+?6q8?dd^5WGu!_5Pd!YmmH;*;({azsODyhLQ}u{DN>)TXAXeSA*yU-W zt;TAyLPR#g(J_?U+NdwL(sEtGvFEeu3;vi$ZyMu`R8=Dej3@WXI;nJ)Dhd{_H@!Sx zzZCyNEhZyy))I~qFNF@H)RSdKj>$j0dT#IlGx4SGq5~-@dgj?nx`*k5ZQ~fP^L?{l z3%Tq3l4BOaPju~#=Fy(s2wb>U1G#6mlGFEniByGgc7HYbVKeCTnj*o;nVfWV3I8jA zJE1<=K@=Dng~7b+9`c0RxBSi*83$CI_EWPmSYR-D%z64QlRn1x!f|l9XAV7 zTa1Qs6j`NNr0CT@^AA%f)=p8`761@G$5yOPvVGm%?_ErrR__Y53 D8J@!w literal 0 HcmV?d00001 diff --git a/res/values/strings.xml b/res/values/strings.xml index ea5e1f7d76..a110ef4de8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -422,6 +422,7 @@ GPS on GPS off + GPS locked Always show menu button diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java index 91fd4d3a14..44510a51a0 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java @@ -14,9 +14,14 @@ import android.widget.TextView; public class GpsTile extends AQuickSettingsTile { - private static final String TAG = "GpsTile"; + private static final String TAG = "GB:GpsTile"; + private static final boolean DEBUG = false; + + public static final String GPS_FIX_CHANGE_ACTION = "android.location.GPS_FIX_CHANGE"; + public static final String EXTRA_GPS_ENABLED = "enabled"; private boolean mGpsEnabled; + private boolean mGpsFixed; private TextView mTextView; private static void log(String message) { @@ -27,9 +32,16 @@ private static void log(String message) { @Override public void onReceive(Context context, Intent intent) { - mGpsEnabled = Settings.Secure.isLocationProviderEnabled( - mContext.getContentResolver(), LocationManager.GPS_PROVIDER); - log("Broadcast received: mGpsEnabled = " + mGpsEnabled); + final String action = intent.getAction(); + if (action.equals(LocationManager.PROVIDERS_CHANGED_ACTION)) { + mGpsEnabled = Settings.Secure.isLocationProviderEnabled( + mContext.getContentResolver(), LocationManager.GPS_PROVIDER); + mGpsFixed &= mGpsEnabled; + } else if (action.equals(GPS_FIX_CHANGE_ACTION)) { + mGpsFixed = intent.getBooleanExtra(EXTRA_GPS_ENABLED, false); + } + if (DEBUG) log("Broadcast received: mGpsEnabled = " + mGpsEnabled + + "; mGpsFixed = " + mGpsFixed); updateResources(); } }; @@ -57,10 +69,7 @@ public boolean onLongClick(View v) { mGpsEnabled = Settings.Secure.isLocationProviderEnabled( mContext.getContentResolver(), LocationManager.GPS_PROVIDER); - - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION); - mContext.registerReceiver(mLocationManagerReceiver, intentFilter); + mGpsFixed = false; } @Override @@ -70,11 +79,23 @@ protected void onTileCreate() { mTextView = (TextView) mTile.findViewById(R.id.gps_tileview); } + @Override + protected void onTilePostCreate() { + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION); + intentFilter.addAction(GPS_FIX_CHANGE_ACTION); + mContext.registerReceiver(mLocationManagerReceiver, intentFilter); + + super.onTilePostCreate(); + } + @Override protected synchronized void updateTile() { if (mGpsEnabled) { - mLabel = mGbContext.getString(R.string.qs_tile_gps_enabled); - mDrawableId = R.drawable.ic_qs_gps_enable; + mLabel = mGpsFixed ? mGbContext.getString(R.string.qs_tile_gps_locked) : + mGbContext.getString(R.string.qs_tile_gps_enabled); + mDrawableId = mGpsFixed ? R.drawable.ic_qs_gps_locked : + R.drawable.ic_qs_gps_enable; } else { mLabel = mGbContext.getString(R.string.qs_tile_gps_disabled); mDrawableId = R.drawable.ic_qs_gps_disable; From 625f720813cc668d948b0d5518805c6623935cdd Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 16:13:34 +0200 Subject: [PATCH 171/710] Option to disable GPS notifications --- res/values/strings.xml | 3 + res/xml/gravitybox.xml | 5 ++ .../gm2/gravitybox/GravityBoxSettings.java | 2 + src/com/ceco/gm2/gravitybox/ModStatusBar.java | 64 +++++++++++++++++++ 4 files changed, 74 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index a110ef4de8..843dd084c0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -563,4 +563,7 @@ 2G/2G+3G/3G 2G/2G+3G + + Disable GPS notifications + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 282e74c346..0abb7d1d2f 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -427,6 +427,11 @@ android:summary="@string/pref_disable_roaming_indicators_summary" android:defaultValue="false" /> + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, diff --git a/src/com/ceco/gm2/gravitybox/ModStatusBar.java b/src/com/ceco/gm2/gravitybox/ModStatusBar.java index b3d1b81bce..ed3051408c 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusBar.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusBar.java @@ -1,5 +1,6 @@ package com.ceco.gm2.gravitybox; +import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; @@ -7,6 +8,7 @@ import com.ceco.gm2.gravitybox.preference.AppPickerPreference; 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; @@ -48,6 +50,7 @@ public class ModStatusBar { private static final String CLASS_TICKER = "com.android.systemui.statusbar.phone.PhoneStatusBar$MyTicker"; private static final String CLASS_PHONE_STATUSBAR_POLICY = "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy"; private static final String CLASS_POWER_MANAGER = "android.os.PowerManager"; + private static final String CLASS_LOCATION_CONTROLLER = "com.android.systemui.statusbar.policy.LocationController"; private static final boolean DEBUG = false; private static final float BRIGHTNESS_CONTROL_PADDING = 0.15f; @@ -304,6 +307,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL final Class phoneStatusBarPolicyClass = XposedHelpers.findClass(CLASS_PHONE_STATUSBAR_POLICY, classLoader); final Class powerManagerClass = XposedHelpers.findClass(CLASS_POWER_MANAGER, classLoader); + final Class locationControllerClass = XposedHelpers.findClass(CLASS_LOCATION_CONTROLLER, classLoader); final Class[] loadAnimParamArgs = new Class[2]; loadAnimParamArgs[0] = int.class; @@ -442,6 +446,66 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); + + XposedHelpers.findAndHookMethod(locationControllerClass, + "onReceive", Context.class, Intent.class, new XC_MethodReplacement() { + @SuppressWarnings("unchecked") + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + prefs.reload(); + if (!prefs.getBoolean(GravityBoxSettings.PREF_KEY_GPS_NOTIF_DISABLE, false)) { + XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args); + return null; + } + + if (DEBUG) log("LocationController: running onReceive replacement"); + + ArrayList changeCallbacks = null; + try { + changeCallbacks = (ArrayList) XposedHelpers.getObjectField( + param.thisObject, "mChangeCallbacks"); + } catch(NoSuchFieldError nfe) { + if (DEBUG) log("LocationController: mChangeCallbacks field does not exist"); + } + if (changeCallbacks == null) { + // there are no callback objects attached to be notified of GPS status so we simply exit + return null; + } + + try { + final Intent intent = (Intent) param.args[1]; + final String action = intent.getAction(); + final boolean enabled = intent.getBooleanExtra("enabled", false); + final Resources res = mContext.getResources(); + boolean visible; + int textResId; + + if (action.equals("android.location.GPS_FIX_CHANGE") && enabled) { + textResId = res.getIdentifier("gps_notification_found_text", "string", PACKAGE_NAME); + visible = true; + } else if (action.equals("android.location.GPS_ENABLED_CHANGE") && !enabled) { + textResId = 0; + visible = false; + } else { + textResId = res.getIdentifier("gps_notification_searching_text", "string", PACKAGE_NAME); + visible = true; + } + + final Class[] paramArgs = new Class[] { boolean.class, String.class }; + for (Object cb : changeCallbacks) { + XposedHelpers.callMethod(cb, "onLocationGpsStateChanged", paramArgs, + visible, textResId == 0 ? null : res.getString(textResId)); + } + + return null; + } catch(Throwable t) { + // fall back to original method + XposedBridge.log(t); + XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args); + return null; + } + } + }); } catch (Throwable t) { XposedBridge.log(t); From 5d8830208c6594970b781da4a4e6a1c4854432b4 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 18:21:12 +0200 Subject: [PATCH 172/710] Option to allow all display rotations --- res/values/strings.xml | 3 +++ res/xml/gravitybox.xml | 5 +++++ .../ceco/gm2/gravitybox/GravityBoxSettings.java | 9 +++++++++ src/com/ceco/gm2/gravitybox/ModHwKeys.java | 15 ++++++++++++--- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 843dd084c0..1e35e554bd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -566,4 +566,7 @@ Disable GPS notifications + + Allow all rotations + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 0abb7d1d2f..e663be4fee 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -565,6 +565,11 @@ + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -1143,6 +1148,10 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 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)); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index be0aa62dc0..4136af1eec 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -12,7 +12,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ResolveInfo; -import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.hardware.input.InputManager; import android.os.Build; @@ -127,6 +126,13 @@ public void onReceive(Context context, Intent intent) { mHwKeysEnabled = !intent.getBooleanExtra(GravityBoxSettings.EXTRA_PIE_HWKEYS_DISABLE, false); } else if (action.equals(ACTION_SCREENSHOT) && mPhoneWindowManager != null) { XposedHelpers.callMethod(mPhoneWindowManager, "takeScreenshot"); + } else if (action.equals(GravityBoxSettings.ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED)) { + final boolean allowAllRotations = intent.getBooleanExtra( + GravityBoxSettings.EXTRA_ALLOW_ALL_ROTATIONS, false); + if (mPhoneWindowManager != null) { + XposedHelpers.setIntField(mPhoneWindowManager, "mAllowAllRotations", + allowAllRotations ? 1 : 0); + } } } }; @@ -316,7 +322,9 @@ 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); @@ -335,8 +343,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { intentFilter.addAction(GravityBoxSettings.ACTION_PREF_VOLUME_ROCKER_WAKE_CHANGED); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_PIE_CHANGED); intentFilter.addAction(ACTION_SCREENSHOT); + intentFilter.addAction(GravityBoxSettings.ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter); - + log("Phone window manager initialized"); } }; From c7c40068ebda807577c732dfa587540b6ecf9c11 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 19:40:19 +0200 Subject: [PATCH 173/710] Updated Slovak translations --- res/values-sk/strings.xml | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 02a07a4268..19580622a0 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -75,6 +75,8 @@ Vypnuté Normálna plocha Rozšírená plocha + Bdenie zap + Bdenie vyp Dlaždice QuickSettings panelu @@ -100,6 +102,8 @@ Rýchly záznam zvuku Hlasitosť Rozšírená plocha + Bdenie + Screenshot Výber farby @@ -412,6 +416,7 @@ GPS zap GPS vyp + GPS fix Vždy zobraziť menu tlačidlo @@ -515,4 +520,46 @@ Screenshot v menu napájania + + Skratky obrazovky uzamknutia + Povoliť skratky + Hlavný vypínač pre skratky obrazovky uzamknutia + Aplikácia pre skratku %s + Spodný okraj 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 + 2G/2G+3G/3G + 2G/2G+3G + + + Skryť GPS notifikácie + + + Povoliť všetky rotácie + From aef0b42523c60c9b08ca669a21b1a3d48001949f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 19:51:11 +0200 Subject: [PATCH 174/710] Updated Czech translations --- res/values-cs/strings.xml | 53 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 133b61e5e1..ce977cd18b 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -79,6 +79,8 @@ Vypnuto Normální plocha Rozšířená plocha + Bdění zap + Bdění vyp Dlaždice QuickSettings panelu @@ -98,14 +100,16 @@ Automatické otáčení obrazovky Synchronizace Wi-Fi Přístupový bod - Světlo + Světlo GravityBox Uspát Rychlý záznam zvuku Hlasitost Rozšířená plocha - - + Bdění + Screenshot + + Výběr barvy Dotykem potvrdíte barvu @@ -416,6 +420,7 @@ GPS zap GPS vyp + GPS fix Vždy zobrazit menu tlačítko @@ -519,4 +524,46 @@ Screenshot v menu napájení + + Zkratky obrazovky uzamčení + Povolit zkratky + Hlavní vypínač pro zkratky obrazovky uzamčení + Aplikace pro zkratku %s + Spodní okraj 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 (v případě pokud je vypnuto vlastní vybarvování) + + + Režim dlaždice typu mobilní sítě + 2G/2G+3G/3G + 2G/2G+3G + + + Skrýt GPS notifikace + + + Povolit všechny rotace + From 21c41a1fc74b35e477d7a68689f250cc5e4159d0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 23 Sep 2013 19:56:15 +0200 Subject: [PATCH 175/710] Updated Indonesian translations (thanks to awaaas) --- res/values-in/strings.xml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 726a1be9ab..98b91bc190 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -109,7 +109,7 @@ Warna latar Statusbar - Membolehkan untuk mengeset warna latar dan transparansi statusbar + Membolehkan untuk men-set warna latar dan transparansi statusbar Perbaiki setting Bicara @@ -519,4 +519,34 @@ 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 + + + Hidupkan kontrol kecerahan + Atur kecerahan layar dengan menggeser staturbar + + + 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 + + \ No newline at end of file From 7a63dd2c624dea03b7ca057d75c9b9be4ba75fb0 Mon Sep 17 00:00:00 2001 From: Wikiwix Date: Mon, 23 Sep 2013 20:43:07 +0200 Subject: [PATCH 176/710] Updated German Translation --- res/values-de/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index ebc32c7a88..e994c48a43 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -419,6 +419,7 @@ GPS an GPS aus + GPS fixiert Always show menu button From 34a42a29755a80f192367c2936966f1a63792ad2 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Tue, 24 Sep 2013 01:37:58 +0200 Subject: [PATCH 177/710] Updated French translation --- res/values-fr/strings.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 348cd5f588..b7d76d872b 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -76,6 +76,8 @@ Désactivé Normal Étendu + Rester allumé on + Rester allumé off Touches des paramètres rapides @@ -102,6 +104,8 @@ Réglages Volume Bureau étendu + Rester allumé + Capture d\'écran Sélecteur de couleur @@ -418,7 +422,8 @@ GPS on GPS off - + GPS connecté + Toujours afficher le bouton menu @@ -549,4 +554,19 @@ 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 + + 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 + 2G/2G+3G + + + Désactiver les notifications du GPS + + + Permettre toutes les rotations + From ce8a7855b5d55f4f0233473658cfeb28e84a144c Mon Sep 17 00:00:00 2001 From: ch-vox Date: Tue, 24 Sep 2013 02:24:16 +0200 Subject: [PATCH 178/710] Updated French translation #2 --- res/values-fr/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index b7d76d872b..ad6f2e6718 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -555,11 +555,11 @@ 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 - Follow stock battery color - Makes statusbar clock, percentage and circle battery use the color of stock battery icon. Applies when icon coloring is off. + Adopter la couleur de batterie d\'origine + Permet d\'utiliser la couleur de l\'icône de la batterie d\'origine dans la barre de statut pour l\'horloge, la batterie circulaire et le pourcentage. Valable lorsque la coloration personnalisée des icônes est désactivée - Network mode tile mode + Modalités touche mode réseau 2G/2G+3G/3G 2G/2G+3G From 918168a9722a9251ade25630e1f0a7ce986663ee Mon Sep 17 00:00:00 2001 From: ch-vox Date: Tue, 24 Sep 2013 02:25:14 +0200 Subject: [PATCH 179/710] Updated French translation #2 From bbacf8bf714fa54a40efa023b590c81880a5e476 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 08:35:30 +0200 Subject: [PATCH 180/710] Ringer mode tile: take into account whether device has vibrator --- .../quicksettings/RingerModeTile.java | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java index fd0e8aea3b..b680e4f59d 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java @@ -19,7 +19,7 @@ import android.widget.TextView; public class RingerModeTile extends AQuickSettingsTile { - private static final String TAG = "RingerModeTile"; + private static final String TAG = "GB:RingerModeTile"; private static final boolean DEBUG = false; public static final String SETTING_VIBRATE_WHEN_RINGING = "vibrate_when_ringing"; @@ -30,16 +30,13 @@ public class RingerModeTile extends AQuickSettingsTile { private final Ringer mVibrateRinger = new Ringer(AudioManager.RINGER_MODE_VIBRATE, true); private final Ringer mSoundRinger = new Ringer(AudioManager.RINGER_MODE_NORMAL, false); private final Ringer mSoundVibrateRinger = new Ringer(AudioManager.RINGER_MODE_NORMAL, true); - private final Ringer[] mRingers = new Ringer[] { - mSilentRinger, mVibrateRinger, mSoundRinger, mSoundVibrateRinger - }; + private Ringer[] mRingers; private int mRingersIndex; - private int[] mRingerValues = new int[] { - 0, 1, 2, 3 - }; + private int[] mRingerValues; private int mRingerValuesIndex; private TextView mTextView; + private boolean mHasVibrator; private AudioManager mAudioManager; private SettingsObserver mSettingsObserver; @@ -79,6 +76,24 @@ public boolean onLongClick(View v) { return true; } }; + + try { + Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); + mHasVibrator = v.hasVibrator(); + if (DEBUG) log("Device has vibrator: " + mHasVibrator); + } catch (Throwable t) { + log("Error checking if device has vibrator. Assuming it doesn't"); + mHasVibrator = false; + } + + if (mHasVibrator) { + mRingers = new Ringer[] { + mSilentRinger, mVibrateRinger, mSoundRinger, mSoundVibrateRinger }; + mRingerValues = new int[] { 0, 1, 2, 3 }; + } else { + mRingers = new Ringer[] { mSilentRinger, mSoundRinger }; + mRingerValues = new int[] { 0, 1 }; + } } @Override @@ -107,7 +122,8 @@ protected synchronized void updateTile() { mDrawableId = R.drawable.ic_qs_ring_off; break; case 1: - mDrawableId = R.drawable.ic_qs_vibrate_on; + mDrawableId = mHasVibrator ? + R.drawable.ic_qs_vibrate_on : R.drawable.ic_qs_ring_on; break; case 2: mDrawableId = R.drawable.ic_qs_ring_on; @@ -145,8 +161,8 @@ protected void toggleState() { private void findCurrentState() { ContentResolver resolver = mContext.getContentResolver(); - boolean vibrateWhenRinging = Settings.System.getInt(resolver, - SETTING_VIBRATE_WHEN_RINGING, 0) == 1; + boolean vibrateWhenRinging = mHasVibrator ? Settings.System.getInt(resolver, + SETTING_VIBRATE_WHEN_RINGING, 0) == 1 : false; int ringerMode = mAudioManager.getRingerMode(); Ringer ringer = new Ringer(ringerMode, vibrateWhenRinging); @@ -168,8 +184,10 @@ void observe() { ContentResolver resolver = mContext.getContentResolver(); resolver.registerContentObserver(Settings.System.getUriFor( SETTING_MODE_RINGER), false, this); - resolver.registerContentObserver(Settings.System.getUriFor( - SETTING_VIBRATE_WHEN_RINGING), false, this); + if (mHasVibrator) { + resolver.registerContentObserver(Settings.System.getUriFor( + SETTING_VIBRATE_WHEN_RINGING), false, this); + } } @Override From 100f36b07750663e022fe9c85af89d71a14eed47 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 08:41:51 +0200 Subject: [PATCH 181/710] Button backlight notif: make them lit for a bit longer --- src/com/ceco/gm2/gravitybox/ModDisplay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java index ce5cd52542..abd62bccb6 100644 --- a/src/com/ceco/gm2/gravitybox/ModDisplay.java +++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java @@ -134,7 +134,7 @@ public void run() { mPendingNotifColor = 0xff6e6e6e; XposedHelpers.callMethod(ls, "setLight_native", np, LIGHT_ID_BUTTONS, mPendingNotifColor, 0, 0, 0, 0); - mHandler.postDelayed(mPendingNotifRunnable, 200); + mHandler.postDelayed(mPendingNotifRunnable, 500); } else { mPendingNotifColor = 0; XposedHelpers.callMethod(ls, "setLight_native", From 1734692fdf5a0ba1ffafaf5ceff7bbe20e5df4f8 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 09:29:41 +0200 Subject: [PATCH 182/710] Navigation bar: fixed scaling of back button --- .../ceco/gm2/gravitybox/ModNavigationBar.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/ModNavigationBar.java b/src/com/ceco/gm2/gravitybox/ModNavigationBar.java index 79f0cd493d..4c7b9c8f68 100644 --- a/src/com/ceco/gm2/gravitybox/ModNavigationBar.java +++ b/src/com/ceco/gm2/gravitybox/ModNavigationBar.java @@ -4,6 +4,10 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.res.Resources; +import android.view.View; +import android.widget.ImageView; +import android.widget.ImageView.ScaleType; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; @@ -74,6 +78,25 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { param.args[0] = (Boolean) param.args[0] || mAlwaysShowMenukey; } }); + + XposedHelpers.findAndHookMethod(navbarViewClass, "onFinishInflate", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + final Resources res = ((View) param.thisObject).getContext().getResources(); + final int backButtonResId = res.getIdentifier("back", "id", PACKAGE_NAME); + final View[] rotatedViews = + (View[]) XposedHelpers.getObjectField(param.thisObject, "mRotatedViews"); + + if (backButtonResId != 0 && rotatedViews != null) { + for(View v : rotatedViews) { + ImageView backButton = (ImageView) v.findViewById(backButtonResId); + if (backButton != null) { + backButton.setScaleType(ScaleType.FIT_CENTER); + } + } + } + } + }); } catch(Throwable t) { XposedBridge.log(t); } From 40c583795b8172b6c9bddad22ef1aeaf8b11e44c Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Tue, 24 Sep 2013 11:46:05 +0300 Subject: [PATCH 183/710] Updated Russian translation --- res/values-ru/strings.xml | 51 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 416733c6a0..16b8822b81 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -76,6 +76,8 @@ Отключено Нормальный Расширенный + Не засыпать вкл. + Не засыпать выкл. Иконки быстрых настроек в статусбаре @@ -102,7 +104,9 @@ Настройки Звук Расширенный рабочий стол - + Не засыпать + Снимок экрана + Выбор цвета Нажмите на цвет для применения @@ -418,6 +422,7 @@ GPS вкл GPS выкл + GPS блок Всегда показывать "Меню" @@ -522,4 +527,46 @@ Скриншот в меню выключения - \ No newline at end of file + + Цели экрана блокировки + Включить цели экрана блокировки + Общий переключатель целей экрана блокировки + Целевое приложение %s + Нижнее смещение кольца разблокировки + + + Включить контроль яркости + Менять яркость слайдом вдоль статусбара + + + Телефония + Сообщения + Передача данных + + + Изменять unicode + Конвертирует unicode символы в обычные символы. Уменьшает общий размер сообщения. + Не изменять символы + Изменять некодируемые символы + Изменять все unicode символы + + + Отключить 2g предупреждение + Отключает предупреждение о низкойскорости передачи данных когда в быстрых настройках включен режим 2g для SIM-карты + + + Следовать цвету батареи + Позволяет часам в статусбаре, батарее и тексту с процентами использовать цвет стоковой батареи. Работает при выключенном изменении цветов иконок. + + + Режим тайла "Режим сети" + 2G/2G+3G/3G + 2G/2G+3G + + + Отключить GPS уведомления + + + Разрешить все повороты + + From 338cc2f657bebaf7a61522fa49bd4eb3a1b56a00 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 10:58:53 +0200 Subject: [PATCH 184/710] Version 2.5.0 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0d6b1ee1eb..0ecb7bbba0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="31" + android:versionName="2.5.0" > Date: Tue, 24 Sep 2013 15:11:34 +0200 Subject: [PATCH 185/710] Optimized tile visibility handling --- .../ceco/gm2/gravitybox/ModQuickSettings.java | 64 ++++--------------- 1 file changed, 11 insertions(+), 53 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index c7f87cbf48..75fea409b9 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -202,25 +202,26 @@ public void onReceive(Context context, Intent intent) { } }; - // TODO: quickfix that needs some optimizations - private static boolean isCustomizableTile(View view) { + private static String getTileKey(View view) { + if (view == null) return null; + Resources res = mContext.getResources(); for (String key : mCustomSystemTileKeys) { int resId = res.getIdentifier(key, "id", PACKAGE_NAME); if (view.findViewById(resId) != null || view.findViewWithTag(mAospTileTags.get(key)) != null) { - return true; + return key; } } res = mGbContext.getResources(); for (Integer key : mCustomGbTileKeys) { if (view.findViewById(key) != null) { - return true; + return res.getResourceEntryName(key); } } - return false; + return null; } private static void updateTileVisibility() { @@ -230,57 +231,14 @@ private static void updateTileVisibility() { return; } + // hide/unhide tiles according to preferences int tileCount = mContainerView.getChildCount(); - - // hide all tiles first for(int i = 0; i < tileCount; i++) { View view = mContainerView.getChildAt(i); - if (view != null && isCustomizableTile(view)) { - view.setVisibility(View.GONE); - } - } - - // unhide only those tiles present in mActiveTileKeys set - for(String tileKey : mActiveTileKeys) { - // search within mContext resources (system specific tiles) - View view = mContainerView.findViewById(mContext.getResources().getIdentifier( - tileKey, "id", PACKAGE_NAME)); - if (view == null) { - // search for tagged tiles - view = mContainerView.findViewWithTag(mAospTileTags.get(tileKey.toString())); - if (DEBUG) { - log("updateTileVisibility: findViewWithTag('" + tileKey + "') = " + - ((view == null) ? "null" : view.toString())); - } - if (view == null) { - // search within mGbContext (our additional GB specific tiles) - view = mContainerView.findViewById(mGbContext.getResources().getIdentifier( - tileKey, "id", GravityBox.PACKAGE_NAME)); - } - } - - if (view != null) { - if (DEBUG) { - log("updateTileVisibility: unhiding tile for key: " + tileKey + "; " + - "view=" + ((view == null) ? "null" : view.toString())); - } - - // bubble up in view hierarchy to find QuickSettingsTileView parent view - View rootView = view; - while (rootView != null && - rootView.getClass() != mQuickSettingsTileViewClass && - rootView.getClass() != mQuickSettingsBasicTileClass) { - rootView = (View) rootView.getParent(); - } - - if (DEBUG) { - log("updateTileVisibility: finished searching for root view; rootView=" + - ((rootView == null) ? "null" : rootView.toString())); - } - - if (rootView != null) { - rootView.setVisibility(View.VISIBLE); - } + final String key = getTileKey(view); + if (key != null) { + view.setVisibility(mActiveTileKeys.contains(key) ? + View.VISIBLE : View.GONE); } } } From f1c7198f6dcc6788fa59bdd56f9a2d02ea31ec84 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 15:32:49 +0200 Subject: [PATCH 186/710] Updated Chinese (Traditional) translations (thanks to Eric850130) --- res/values-zh-rTW/strings.xml | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 81ec6824c7..186f643629 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -523,4 +523,47 @@ 電源選單顯示螢幕截圖 + + + 螢幕鎖定目標 + 啟用螢幕鎖定目標 + 鎖定螢幕滑動主滑動 + 目標應用程式 %s + 解鎖環底部偏移 + + + 啟用亮度控制 + 調整滑動狀態列時的亮度 + + + 電話 + 訊息 + 行動資料 + + + 去除 unicode + 正常字符轉換成 unicode 字符。降低整體郵件大小. + 保留字符不變 + 去除非可編碼字符 + 去除所有 unicode 字符 + + + 停用 2G 網路延遲警告 + 停用當 SIM 卡處於 2G 模式下開啟行動資料時網路遲緩警告 + + + 按照預設電池顏色 + 當圖示自訂顏色停用時讓狀態列上的時鐘,電量百分比與圓形電池顯示預設電池顏色. + + + 網路模式瓷貼模式 + 2G/2G+3G/3G + 2G/2G+3G + + + 停用 GPS 通知 + + + 允許所有旋轉 + \ No newline at end of file From e36bc1683944d5e33a41e2c18a9d9581a9575c38 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 18:13:10 +0200 Subject: [PATCH 187/710] Fixed Lockscreen Targets crash - crashed due to inconsistency between shorcuts and accessibility data - added app names into accessibility descriptions so they can now be spoken e.g. when TalkBack is active --- .../ceco/gm2/gravitybox/ModLockscreen.java | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModLockscreen.java b/src/com/ceco/gm2/gravitybox/ModLockscreen.java index 23106ef511..e0bc0fb0ca 100644 --- a/src/com/ceco/gm2/gravitybox/ModLockscreen.java +++ b/src/com/ceco/gm2/gravitybox/ModLockscreen.java @@ -196,7 +196,13 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { final ArrayList targets = (ArrayList) XposedHelpers.getObjectField( gpView, "mTargetDrawables"); final ArrayList newTargets = new ArrayList(); + final ArrayList newDescriptions = new ArrayList(); + final ArrayList newDirections = new ArrayList(); final ArrayList appInfoList = new ArrayList(5); + final int unlockDescResId = res.getIdentifier("description_target_unlock", + "string", "android"); + final int unlockDirecResId = res.getIdentifier("description_direction_right", + "string", "android"); // fill appInfoList helper with apps from preferences for (int i=0; i<=4; i++) { @@ -210,30 +216,51 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { // get target from position 0 supposing it's unlock ring newTargets.add(targets.get(0)); + newDescriptions.add(unlockDescResId == 0 ? null : res.getString(unlockDescResId)); + newDirections.add(unlockDirecResId == 0 ? null : res.getString(unlockDirecResId)); // create and fill custom targets with proper layout based on number of targets switch(appInfoList.size()) { case 1: newTargets.add(createTargetDrawable(res, null)); + newDescriptions.add(null); + newDirections.add(null); newTargets.add(createTargetDrawable(res, appInfoList.get(0))); + newDescriptions.add(appInfoList.get(0).name); + newDirections.add(null); newTargets.add(createTargetDrawable(res, null)); + newDescriptions.add(null); + newDirections.add(null); break; case 2: newTargets.add(createTargetDrawable(res, appInfoList.get(0))); + newDescriptions.add(appInfoList.get(0).name); + newDirections.add(null); newTargets.add(createTargetDrawable(res, appInfoList.get(1))); + newDescriptions.add(appInfoList.get(1).name); + newDirections.add(null); newTargets.add(createTargetDrawable(res, null)); + newDescriptions.add(null); + newDirections.add(null); break; case 3: case 4: case 5: for (int i=0; i<=4; i++) { - newTargets.add(i >= appInfoList.size() ? - createTargetDrawable(res, null) : - createTargetDrawable(res, appInfoList.get(i))); + if (i >= appInfoList.size()) { + newTargets.add(createTargetDrawable(res, null)); + newDescriptions.add(null); + } else { + newTargets.add(createTargetDrawable(res, appInfoList.get(i))); + newDescriptions.add(appInfoList.get(i).name); + } + newDirections.add(null); } break; } XposedHelpers.setObjectField(gpView, "mTargetDrawables", newTargets); + XposedHelpers.setObjectField(gpView, "mTargetDescriptions", newDescriptions); + XposedHelpers.setObjectField(gpView, "mDirectionDescriptions", newDirections); XposedHelpers.callMethod(param.thisObject, "updateTargets"); } }); @@ -283,6 +310,7 @@ private static class AppInfo { public String key; public Intent intent; public Drawable icon; + public String name; } private static AppInfo getAppInfo(Context context, String app) { @@ -304,6 +332,7 @@ private static AppInfo getAppInfo(Context context, String app) { PackageManager pm = context.getPackageManager(); Resources res = context.getResources(); ActivityInfo ai = pm.getActivityInfo(cn, 0); + appInfo.name = (String) ai.loadLabel(pm); Bitmap appIcon = ((BitmapDrawable)ai.loadIcon(pm)).getBitmap(); int sizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, res.getDisplayMetrics()); From fa180c3c7dba699fa27c4594a0154a317ced8a9e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 24 Sep 2013 18:18:19 +0200 Subject: [PATCH 188/710] Version 2.5.1 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0ecb7bbba0..a282c3b4cf 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="32" + android:versionName="2.5.1" > Date: Wed, 25 Sep 2013 13:13:16 +0200 Subject: [PATCH 189/710] Reworked unicode stripping to support QuickMessage dialog --- src/com/ceco/gm2/gravitybox/ModMms.java | 145 +++++++++++++++--------- 1 file changed, 89 insertions(+), 56 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModMms.java b/src/com/ceco/gm2/gravitybox/ModMms.java index 40e63d66ac..107571084c 100644 --- a/src/com/ceco/gm2/gravitybox/ModMms.java +++ b/src/com/ceco/gm2/gravitybox/ModMms.java @@ -11,9 +11,12 @@ public class ModMms { public static final String PACKAGE_NAME = "com.android.mms"; private static final String TAG = "GB:ModMms"; private static final String CLASS_COMPOSE_MSG_ACTIVITY = "com.android.mms.ui.ComposeMessageActivity"; + private static final String CLASS_WORKING_MESSAGE = "com.android.mms.data.WorkingMessage"; + private static final String CLASS_DIALOG_MODE_ACTIVITY = "com.android.mms.ui.DialogModeActivity"; private static final boolean DEBUG = false; private static UnicodeFilter mUnicodeFilter; + private static XSharedPreferences mPrefs; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -21,72 +24,102 @@ private static void log(String message) { public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { try { + mPrefs = prefs; + final Class composeMsgActivityClass = XposedHelpers.findClass(CLASS_COMPOSE_MSG_ACTIVITY, classLoader); + final Class workingMessageClass = + XposedHelpers.findClass(CLASS_WORKING_MESSAGE, classLoader); XposedHelpers.findAndHookMethod(composeMsgActivityClass, - "onCreate", Bundle.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - prefs.reload(); - final String uniStrMode = prefs.getString( - GravityBoxSettings.PREF_KEY_MMS_UNICODE_STRIPPING, - GravityBoxSettings.UNISTR_LEAVE_INTACT); - - if (uniStrMode.equals(GravityBoxSettings.UNISTR_LEAVE_INTACT)) { - mUnicodeFilter = null; - if (DEBUG) log("onCreate: Unicode stripping disabled, returning"); - return; - } - - if (DEBUG) log("ComposeMessageActivity created. Hooking to TextEditorWatcher"); - - mUnicodeFilter = new UnicodeFilter( - uniStrMode.equals(GravityBoxSettings.UNISTR_NON_ENCODABLE)); - - final TextWatcher textEditorWatcher = (TextWatcher) XposedHelpers.getObjectField( - param.thisObject, "mTextEditorWatcher"); - if (textEditorWatcher != null) { - XposedHelpers.findAndHookMethod(textEditorWatcher.getClass(), "onTextChanged", - CharSequence.class, int.class, int.class, int.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param2) throws Throwable { - if (param2.thisObject != textEditorWatcher) return; - - CharSequence s = (CharSequence) param2.args[0]; - if (DEBUG) log ("TextEditorWatcher.onTextChanged: original ='" + s + "'"); - s = stripUnicode(s); - if (DEBUG) log ("TextEditorWatcher.onTextChanged: stripped ='" + s + "'"); - XposedHelpers.callMethod(param.thisObject, "updateCounter", - s, param2.args[1], param2.args[2], param2.args[3]); - } - }); - } - } - }); - - XposedHelpers.findAndHookMethod(composeMsgActivityClass, "sendMessage", - boolean.class, new XC_MethodHook() { - @Override - protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - if (DEBUG) log("ComposeMessageActivity.sendMessage called"); - Object workingMessage = XposedHelpers.getObjectField(param.thisObject, "mWorkingMessage"); - CharSequence msg = (CharSequence) XposedHelpers.callMethod(workingMessage, "getText"); - if (DEBUG) log("mWorkingMessage.getText returned: '" + msg + "'"); - msg = stripUnicode(msg); - if (DEBUG) log("Stripped message: '" + msg + "'"); - XposedHelpers.callMethod(workingMessage, "setText", msg); + "onCreate", Bundle.class, activityOnCreateHook); + + if (Utils.hasGeminiSupport()) { + XposedHelpers.findAndHookMethod(workingMessageClass, "send", + String.class, int.class, workingMessageSendHook); + try { + if (DEBUG) log ("Trying to hook on Dialog Mode activity (quickmessage)"); + final Class dialogModeActivityClass = XposedHelpers.findClass( + CLASS_DIALOG_MODE_ACTIVITY, classLoader); + XposedHelpers.findAndHookMethod(dialogModeActivityClass, "onCreate", + Bundle.class, activityOnCreateHook); + } catch (Throwable t) { + XposedBridge.log("Error hooking to quick message dialog. Ignoring."); } - }); + } else { + XposedHelpers.findAndHookMethod(workingMessageClass, "send", + String.class, workingMessageSendHook); + } + } catch (Throwable t) { XposedBridge.log(t); } } - private static CharSequence stripUnicode(CharSequence text) { - if (mUnicodeFilter != null) { - text = mUnicodeFilter.filter(text); + private static XC_MethodHook activityOnCreateHook = new XC_MethodHook() { + @Override + protected void afterHookedMethod(final MethodHookParam param) throws Throwable { + try { + if (!prepareUnicodeFilter()) return; + + if (DEBUG) log("ComposeMessageActivity created. Hooking to TextEditorWatcher"); + + final TextWatcher textEditorWatcher = (TextWatcher) XposedHelpers.getObjectField( + param.thisObject, "mTextEditorWatcher"); + if (textEditorWatcher != null) { + XposedHelpers.findAndHookMethod(textEditorWatcher.getClass(), "onTextChanged", + CharSequence.class, int.class, int.class, int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param2) throws Throwable { + if (param2.thisObject != textEditorWatcher) return; + + CharSequence s = (CharSequence) param2.args[0]; + if (DEBUG) log ("TextEditorWatcher.onTextChanged: original ='" + s + "'"); + s = mUnicodeFilter.filter(s); + if (DEBUG) log ("TextEditorWatcher.onTextChanged: stripped ='" + s + "'"); + XposedHelpers.callMethod(param.thisObject, "updateCounter", + s, param2.args[1], param2.args[2], param2.args[3]); + } + }); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }; + + private static XC_MethodHook workingMessageSendHook = new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + try { + if (mUnicodeFilter == null) return; + + CharSequence msg = (CharSequence) XposedHelpers.getObjectField(param.thisObject, "mText"); + if (DEBUG) log("WorkingMessage.send called; mText = '" + msg + "'"); + msg = mUnicodeFilter.filter(msg); + if (DEBUG) log("Stripped mText = '" + msg + "'"); + XposedHelpers.setObjectField(param.thisObject, "mText", msg); + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }; + + private static boolean prepareUnicodeFilter() { + mPrefs.reload(); + final String uniStrMode = mPrefs.getString( + GravityBoxSettings.PREF_KEY_MMS_UNICODE_STRIPPING, + GravityBoxSettings.UNISTR_LEAVE_INTACT); + + if (uniStrMode.equals(GravityBoxSettings.UNISTR_LEAVE_INTACT)) { + mUnicodeFilter = null; + if (DEBUG) log("prepareUnicodeFilter: Unicode stripping disabled"); + return false; + } else { + mUnicodeFilter = new UnicodeFilter(uniStrMode.equals( + GravityBoxSettings.UNISTR_NON_ENCODABLE)); + if (DEBUG) log("prepareUnicodeFilter: Unicode filter prepared; mode=" + uniStrMode); + return true; } - return text; } } From f09c082c07cb985c21f86df23c0a8d216dafccdc Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 25 Sep 2013 14:13:24 +0200 Subject: [PATCH 190/710] Updated German translations (thanks to peterhugelberg) --- res/values-de/strings.xml | 498 +++++++++++++++++++------------------- 1 file changed, 249 insertions(+), 249 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index e994c48a43..996689d375 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -3,61 +3,61 @@ GravityBox - Battery indicator style - Stock battery indicator - Circle battery - Circle battery with percentage - Battery percent text - None - - Volume keys skip track - Skip tracks on volume keys long-press while screen is off - - Low battery warning - Pop-up and sound - Pop-up only - Sound only - Off - - Change will be applied after reboot - - Auto-hide signal icons - 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 - Disable notifications - \"SIM not inserted\" notifications disabled - - Advanced reboot menu - Enables advanced reboot menu with option to reboot to recovery + Batterieanzeigen Stil + Original Batterieanzeige + runde Batterieanzeige + runde Batterieanzeige mit Prozentangaben + Batterieladung als Prozentanzeige + Keine + + Lautstärketasten überspringen Musiktitel + Überspringe Musiktitel durch langes drücken der Lautstärketasten während der Bildschirm aus ist + + Warnung bei niedrigem Batteriestand + Benachrichtigung und Warnton + Nur Benachrichtigung + Nur Warnton + Aus + + Änderungen werden nach einem Neustart übernommen + + Empfangsicons automatisch verstecken + Empfangsicons für ausgewählte Sim Karte verstecken, wenn diese nicht eingelegt ist, deaktiviert \"Steckplatz 2: Keine SIM-Karte erkannt\" benachrichtigung + Empfangsanzeige von SIM1 automatisch verstecken + Empfangsanzeige von SIM2 automatisch verstecken + Deaktiviere Benachrichtigungen + \"Keine SIM-Karte erkannt\" benachrichtungen deaktiviert + + Erweitertes Neustart Menü + Aktiviert erweitertes Neustart Menü mit der Option direkt die Recovery zu starten Recovery - Volume key cursor control - Controls cursor using volume keys in text fields - Disabled - Volume up/down moves cursor left/right - Volume up/down moves cursor right/left + 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 - Clear all recent tasks + Alle zuletzt geöffneten Anwendungen schließen - Fix Date&Time settings crash - Enable in case you experience crash while accessing Date&Time settings (requires reboot) + Datums&Zeit Einstellungs Absturz beheben + Aktivieren falls Abstürze beim aufrufen der Datums&Zeit Einstellungen auftreten (benötigt einen Neustart) - 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. + Anrufer ID für Anrufe beheben + Aktivieren falls der Kontaktname bei einem eingehenden Anruf nicht angezeigt wird (benötigt einen Neustart) + 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 von Contacts Provider zu löschen. - 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! + Anrufer ID für Nachrichten beheben + Aktivieren falls Nachrichten von einem Kontakt geteilt und nicht in einem Nachrichtenverlauf angezeigt werden (benötigt einen Neustart) + Nach dem Neustartt sollten alle geteilten Nachrichtenverläufe gelöscht werden damit die Änderung wirksam wird! - Fix calendar app - Enable in case you experience periodic self-turning on of the screen (requires reboot) + Probleme mit Kalendar App beheben + Aktivieren falls sich der Bildschirm sporadisch von selbst aktiviert (benötigt einen Reboot) - Important + Wichtig - Fullscreen caller photo - Displays fullscreen caller photo on incoming call screen + Foto des Anrufers im Vollbildmodus anzeigen + Zeigt das Foto des Anrufers im Vollbildmodus an Sync an @@ -79,8 +79,8 @@ Wach halten aus - Statusbar QuickSettings tiles - Allows to show or hide QuickSettings tiles in statusbar + Schnelleinstellungs-Verknüpfungen in der Statusleiste + Erlaubt es Schnelleinstellungs-Verknüppfungen in der Statusleiste anzuzeigen oder zu verstecken Benutzerprofil Flugmodus Akku @@ -105,36 +105,36 @@ Wach halten - Color Picker - Press on Color to apply + Farbwähler + Auf Farbe drücke zum bestätigen - Statusbar background color - Allows to set statusbar background color and transparency + Hintergrundfarbe der Statusleiste + Erlaubt es die Hintergrundfarbe und Transparenz der Statusleiste zu ändern - Fix speech settings - Unlocks voice search and text-to-speech settings in Language&Input (requires reboot) + Behebt Spracheingabe Einstellungen + Schaltet Sprachsuche und Text-vorlesen in den Sprache&Eingabe Einstellungen frei (benötigt einen Neustart) - Advanced developer options - Unlocks advanced developer options (requires reboot) + Erweiterte Entwickler Optionen + Schaltet erweiterte Entwickler Optionen frei (benötigt eine Neustart) - Statusbar tweaks - Contains various statusbar tweaks - Miscellaneous tweaks - Contains all other tweaks not falling into specific category - General fixes - Contains general MTK6589 specific fixes. Use only if needed. + Statusleisten Optimierungen + Beinhaltet einige Optionen um die Statusleiste anzupassen + Diverse Optimierungen + Beinhaltet alle Optimierungen die in keine speziellere Kategorie passen + Allgemeine Einstellungen + Beinhaltet allgemeine Einstellungen die Fehler beim MTK6589 beheben. Nur benutzen falls notwendigt. - About - Coded by C3C076@XDA. Touch to visit official thread. + Über + Programmiert von C3C076@XDA. Berühren um den offiziellen Forumseintrag zu öffnen. 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. + Programmiert von rovo89@XDA. Berühren um den offiziellen Forumseintrag zu öffnen. + Spenden + An mich Spenden, falls du glaubst die App ist es wert! Erwäge es auch an rovo89 für sein exzellentes Xposed Framework zu spenden. %s wird neu gestartet. @@ -142,207 +142,207 @@ %s startet in den Bootloader. - CRT screen off effect - Enables animation that simulates old CRT off effect when turning off the screen + Röhrenmonitor Effekt beim Ausschalten des Bildschirms + Aktiviert eine Animation die das Ausschalten eines Röhrenmonitors simuliert wenn der Bildschirm ausgeschaltet wird - Engineering mode - Launches Engineering mode application + Engineering Modus + Startet die Engineering Modus Anwendung - Dual SIM Ringer - Launches application that allows to set ringtone and notification sounds separately for each SIM + Dual SIM Lautstärke + Startet eine Anwendung die es erlaubt für die beiden SIM-Karten unterschiedliche Rufton- und Benachrichtigungslautstärken einzustellen - Lockscreen tweaks - Contains various lockscreen tweaks - Lockscreen background - Background style - Default wallpaper - Color fill - Custom image - Set custom color - Allows to set custom background color for lockscreen - Set custom image - Allows to set custom background image for lockscreen - Background changed - Background not changed - Other - Maximize widgets - When enabled, lockscreen widgets will be maximized by default + Sperrbildschirm Optimierungen + Beinhaltet einige Anpassungen für den Sperrbildschirm + Lockscreen 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 + anderer + Widgets Maximieren + Wenn aktiviert werden Widgets auf dem Sperrbildschirm maximiert - Power tweaks - Contains various power related tweaks + Ausschalt-Menü Optimierungen + Beinhaltet einige Energie bezogene Optimierungen - Disable LED flashing - Disables intrusive LED flashing when battery is low and not charging + Deaktiviere LED blinken + Deaktivert aufdringliches LED blinken wenn der Batteriestatus niedrig ist und nicht geladen wird. - Display tweaks - Contains various display tweaks + Bildschrim Optimierungen + Beinhaltet einige Bildschirm Optimierungen - Minimum brightness level - Allows to set minimum brightness level. Applies to manual brightness setting. (requires reboot) - Value from interval: 10 – 80 + Minimale Helligkeitsstufe + Erlaubt es die minimale Helligkeitsstufe zu ändern. Wirkt sich auf die manuelle Helligkeitseinstellung aus. (benötigt einen Neustart) + Wert zwischen: 10 – 80 - Autobrightness levels - Allows to set ambient light levels and corresponding LCD backlight values - Level + Automatische Helligkeitsstufen + Erlaubt es für bestimmte Umgebungshelligkeit die Bildschirmhelligkeit zu bestimmen + Helligkeitsstufe Lux max - Brightness (10 – 255) - Specified number is not valid - It is not recommended to set brightness below 10 - 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 + Helligkeit (10 – 255) + Eingebener Wert ist ungültig + Es ist nicht empfohlen die Helligkeitsstufe unter 10 zu setzen + Die Helligkeitsstufe kann nicht höher als 255 gesetzt werden + Werte können nicht weniger als 0 oder 0 betragen + 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 - Enable lockscreen rotation - WARNING: can swap unlock ring targets on some devices in case AOSP lockscreen has been modified by vendor + Aktiviere Sperrbildschirm Rotation + Achtung: Möglicherweise werden die Entsperr-Ring Anwendungen getauscht, wenn der AOSP Sperrbildschirm vom Hersteller verändert wurde - Enable menu key - Allows menu key to be used for quick-unlocking the device while on lockscreen (requires reboot) + Aktiviere Menü Taste + Wenn aktiviert kann die Menü Taste zum schnellen Entsperren genutzt werden. (benötigt einen Neustart) - Fix messaging wakelock - Prevents screen from turning on when new message arrives (requires reboot) + Behebt aufwachen durch Nachrichten + Hindert den Bildschirm daran sich anzuschalten wenn eine Nachricht eintrifft (benötigt einen Neustart) - Center clock + Uhrzeit in der Mitte - Media tweaks - Contains various tweaks for media and audio system + Medien Optimierungen + Beinhaltet einige Optimierungen für Medien und Audio Einstellungen - More music volume steps - Adds more volume steps for music stream (requires reboot) + Mehr Lautstärkestufen für Musiklautstärke + Fügt weitere Lautstärkestufen für Musik Wiedergabe hinzu (benötigt einen Neustart) - Safe headset media volume - Activates or deactivates safe headset media volume feature + Kopfhörer Lautstärke begrenzen + Aktiviert oder Deaktiviert die Lautstärkebegrenzung bei Kopfhörern - Disable charging LED - Disables LED while charging + Deaktiviere die Lade LED + Deaktiviert die LED während der Akku geladen wird - 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 - Application killed - There\'s nothing to kill - No previous app found + Hardware Tastenbelegung + Erlaubt es die Hardwaretasten benutzerdefiniert zu belegen + Aktion beim lange drücken der Menütaste + Aktion beim doppelt drücken der Menütaste + Aktion beim lange drücken der Zurücktaste + 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 Doppelt drücken gewertet wird. + Anwendung beendet + Nichts zu beenden + Keine vorherige Apps gefunden - Phone tweaks - Contains various telephony tweaks + Anruf Optimierungen + Beinhaltet einige Anruf bezogene Optimierungen - 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 + Umdreh Aktion bei Anruf + Erlaubt es einzustellen was für eine Aktion durchgeführt wird, wenn das Telefon bei einem eingehendem Anruf umgedreht wird (Bildschirm nach unten) + Nichts tun + Auf Lautlos stellen + Anruf ablehnen - Disable vibrate on call connect - Disables vibration that is triggered when call is connected + Deaktiviere Vibration wenn Anruf angenommen wird + Deaktiviert Vibration die beim Annehmen eines Anrufs ausgelöst wird Sanfter Neustart - Solid black background - Use solid black background for default Holo system theme instead of black-grey gradient (requires reboot) + Schwarzer Hintergrund + Benutze einen schwarzen Hintergrund für das Holo System Theme anstelle des Schwarz-Grau Verlaufs (benötigt einen Neustart) - Tiles per row - Defines how many QuickSettings tiles to display per one row. Tiles will be resized accordingly. Applies to portrait mode. + Verknüpfungen pro Reihe + Lege 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). - Show day of week + Zeige den Tag der Woche an - Expandable volume panel - Enables expandable volume panel with ability to set volumes for different streams + Erweiterbare Lautstärke Anzeige + Aktiviert eine erweiterbare Lautstärke Anzeige, die es ermöglicht unterschiedliche Lautstärkestufen für die verschiedenen Quellen einzustellen (Benachrichtigun, Anrufton) - Link ringtone & notifications volumes - When disabled, volumes for ringtone and notifications can be set independently + Verbinde Anruf & Benachrichtigungs Lautstärke + Wenn deaktiviert lassen sich die Lautstärkestufen für Anrufe und Benachrichtigungen separat einstellen - Auto-switch QuickSettings - QuickSettings will show automatically when status bar is pulled down while there are no notifications + Automatisch zu Schnelleinstellungen wechseln + Schnelleinstellungen werden automatisch angezeigt, wenn die Benachrichtigungsleiste heruntergezogen wird und keine Benachrichtigungen vorliegen - Quick pulldown - Edge of the status bar pulls down QuickSettings - Off - Right - Left + Schnelleinstellungen herunterziehen + Wenn die Statusbar an der Ecke heruntergezogen wird, werden automatisch die Schnelleinstellungen angezeigt + Aus + Rechts + Links - Disable volume rocker wake - For devices like Jiayu G3s,G4 where volume keys turn on screen + Deaktiviert aufwachen durch Lautstärketasten + Für Geräget wie das Jiayu G3s, G4 bei denen die Lautstärketasten den Bildschirm anschalten - Statusbar colors + Farbe der Statusleiste - Enable icon colors + Aktiviere farbige Icons - Statusbar icon color - Sets color for statusbar icons and clock + Farbe der Statusleisten Icons + Wähle Farbe für die Icons und die Uhr in der Statusleiste - Data activity color - Sets color for data activity indicators + Farbe für aktivität der Datenverbindung + Wählt die Farbe für die aktivität der Datenverbindung - QuickSettings management + Schnelleinstellungen anpassen - Notification drawer style + Stil der Benachrichtigungsleiste - Notification drawer background - Default background - Color fill - Custom image - Set background color - Set portrait image - Set landscape image - Background transparency - Background mode - Overlay - Underlay + Hintergrund der Benachrichtigungsleiste + Standard Hintergrund + benutzerdefinierte Farbe + benutzerdefiniertes Bild + Wähle Hintergrundfarbe + Wähle Portrait (Hochformat) Bild + Wähle Landscape (Querformat) Bild + Hintergrund Transparenz + Hintergrund Modus + über benachrichtigungen + unter benachrichtigungen - Disable roaming indicators - When disabled, R indicator will not be visible while roaming. Use with caution. + Deaktiviere Roaming Icons + Wenn deaktiviert wird das R Icon während dem Roaming nicht angezeigt. Mit Vorsicht benutzen. Lädt (%d%%) @@ -356,65 +356,65 @@ Pie controls - Enable pie controls - Show search button - Navigation key size - Trigger positions - Left screen border - Bottom screen border - Right screen border - Top screen border + Aktiviere pie controls + Zeige Suchen Button + Navigationstasten größe + Auslöse Positionen + linker Bildschirmrand + unterer Bildschirmrand + rechter Bildschirmrand + oberer Bildschirmrand - 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. + Tasten Hintergrundbeleuchtung + Standard + Deaktiviere Tasten Hintergrundbeleuchtung + Immer an wenn der Bildschirm an ist + An wenn Benachrichtigungen vorliegen + EXPERIMENTAL! Blinkt wenn eine Benachrichtigung vorliegt. Als Alternative für Geräte ohne Benachrichtigungs LED. Erhöht Batterieverbrauch. - Hide navigation bar - Hides navigation bar while Pie Controls are enabled (for devices that have navigation bar, requires reboot) + Verstecke Navigationsleiste + Verstekct die Navigationsleiste wenn Pie Controls aktiviert sind (für Geräte die eine Navigationsbar haben, benötigt einen Neustart) - Dithered Holo background - Replaces standard Holo background with dithered one to suppress color banding (requires reboot) + geditherter Holo Hintergrund + Ersetzt den Standard Holo Hintergrund mit einem geditherten um Farbstreifenbildung zu minimieren (benötigt einen Neustart) - Disable hardware keys - Disables MENU, BACK, HOME while Pie Controls are enabled. HW keys actions will still work. (for devices having HW keys) + Deaktiviert Hardwaretasten + Deaktiviert die Menü, Zurück, Home tasten wenn Pie Controls aktiviert sind. Hardwaretastenbelegung funktioniert weiterhin (lange drücken, doppelt drücken). (Für Geräte die Hardwaretasten besitzen) - Use Holo Dark theme - Switches GB UI to use Holo Dark theme instead of Holo Light + Benutze dunkles Holo Theme + Ändert das GB UI auf ein dunkles Holo Theme - Off - Top left - Top right - Bottom left - Bottom right + Aus + Oben links + Oben rechts + Unten links + Unten rechts - Adjust top margin + oberen Rand einstellen - Disable roaming warnings - Disables roaming warnings when sending messages or making phone calls while roaming + Deaktiviere Roaming Warnungen + Deaktiviert Roaming Warnungen wenn eine Nachricht gesendet oder ein Anruf getätigt wird während des Roamings - Search - (None) + Suche + (keine) - 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 + Schnelleinstellungen + Schnelleinstellungs Verknüpfungen anpassen + Haupt Anwendung + App 1 lange drücken + App 2 lange drücken + App 3 lange drücken + App 4 lange drücken GPS an @@ -422,47 +422,47 @@ GPS fixiert - Always show menu button + Menü Button immer anzeigen Klingelmodus - Clock settings + Uhr Einstellungen - Hide AM/PM + Verstecke AM/PM - Hide clock + Verstecke Uhr - Trigger size + Auslösungsgröße - Transparency management - Statusbar transparency for launcher - Statusbar transparency for lockscreen - Navbar transparency for launcher - Navbar transparency for lockscreen + Transparenz Einstellungen + Statusleisten Transparenz für den Launcher + Statusleisten Transparenz für den Sperrbildschirm + Navigationsleisten Transparenz für den Launcher + Navigationsleisten Transparenz für den Sperrbildschirm - Hide alarm icon + Verstecke Wecker Icon - Screen dim level - Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + Bildschirm abdunkelstärke + Wie stark der Bildschirm abgedunkelt wird bevor er sich ausschaltet (benötigt einen Neustart) Telefon Tablet - Expanded desktop mode - Disabled - Hide statusbar - Hide navigation bar - Hide both + Erweiterter Desktop Modus + Deaktiviert + Verstecke Statusleiste + Verstecke Navigationsleiste + Verstecke beide Erweiterter Desktop Erweiterter Desktop ist AN Erweiterter Desktop ist AUS From 1dc8c8447bcf3ea0b85bc084bf4b1ba753035b3d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 25 Sep 2013 14:16:48 +0200 Subject: [PATCH 191/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 86a59c99fb..1c9ec0b120 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -59,6 +59,8 @@ Wyłączony Normalny Rozszerzony + Blokowanie uśpienia włączone + Blokowanie uśpienia wyłączone Kafelki Szybkich Ustawień Pozwala wyświetlić lub ukryć Kafelki Szybkich Ustawień na pasku statusu Profil użytkownika @@ -83,10 +85,12 @@ Ustawienia Głośność Rozszerzony pulpit + Blokowanie uśpienia + Zrzut ekranu Wybór koloru Naciś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 statusu Napraw ustawienia mowy Odblokowuje Wyszukiwanie Głosowe i Przetwarzanie Tekstu Na Mowę w ustawieniach Język, Klawiatura, Głos (wymagany restart) Zaawansowane opcje deweloperskie @@ -268,7 +272,7 @@ Dolny Lewy Dolny Prawy Ustaw górny margines - Wyłacz ostrzeżenia o roamingu + Wyłącz ostrzeżenia o roamingu Wyłącza ostrzeżenia podczas wysyłania wiadomości lub wykonywania połączeń telefonicznych w roamingu Wyszukaj (Żadna) @@ -281,6 +285,7 @@ Naciśnij długo slot 4 apl. GPS włączony GPS wyłączony + GPS zablokowany Zawsze pokazuj przycisk menu Tryb dwonka Ustawienia Zegara @@ -338,4 +343,28 @@ Dotyczy orientacji poziomej Zawsze pokazuj klawisz menu Zrzut ekranu w menu zasilania + Cele Ekranu Blokady + Włącz Cele Ekranu blokady + Główny wyłącznik Celów Ekranu Blokady + Aplikacja docelowa %s + Przesunięcie pierścienia odblokowania + 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 + 2G/2G+3G + Wyłącz powiadomienia GPS + Zezwalaj na pełen obrót From 071917ce00cf1e1c0e08cce456171341974cc51c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 25 Sep 2013 14:18:11 +0200 Subject: [PATCH 192/710] Updated Indonesian translations (thanks to awaaas) --- res/values-in/strings.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 98b91bc190..2b7e45a004 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -76,6 +76,8 @@ Dimatikan Normal Diperluas + Tetap menyala hidup + Tetap menyala mati Kotak-kotak QuickSettings Statusbar @@ -102,6 +104,8 @@ Setting Volume Perluasan Desktop + Tetap menyala + Screenshot Pilihan Warna @@ -418,6 +422,7 @@ GPS hidup GPS mati + GPS terkunci Selalu tampilkan tombol menu @@ -549,4 +554,19 @@ Hilangkan peringatan koneksi 2G yang lambat Mematikan peringatan tentang lambatnya koneksi ketika menghidupkan paket data untuk SIM dalam mode 2G di QuickSettings - \ No newline at end of file + + 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 + 2G/2G+3G + + + Matikan notifikasi GPS + + + Bolehkan semua rotasi + + From 249194acae368fd51cc7daa5884177b9b18adad8 Mon Sep 17 00:00:00 2001 From: pitone02 Date: Wed, 25 Sep 2013 16:09:03 +0200 Subject: [PATCH 193/710] Update strings.xml Updated italian translation to 2.5.1 --- res/values-it/strings.xml | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 4a692ec779..57a193d6f4 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -512,6 +512,50 @@ Applica alla visualizzazione orizzontale Mostra sempre tasto menu + + Abilita Fotografa schermo nel menu apegnimento + + + Applicazioni in Lockscreen + Abilita app in lockscreen + Attivazione Applicazioni in Lockscreen + Applicazione %s + Scostamento dell\'anello di sblocco, margine inferiore + + + Abilita controllo luminosità + Adjusts brightness by sliding over statusbar + + + 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 nel relativo tile dei quicksetting + 2G/2G+3G/3G + 2G/2G+3G + + + Disabilita notifiche GPS + + + Abilita tutte le rotazioni + From e559410cda8718fb83e251f857fb05bc9a363733 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Wed, 25 Sep 2013 23:18:16 +0100 Subject: [PATCH 194/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 201 +++++++++++++++++++--------------- 1 file changed, 113 insertions(+), 88 deletions(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 07acab1fb3..0f5739d7ea 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -21,10 +21,10 @@ As alterações serão aplicadas após reiniciar o sistema - Esconder 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 barras de sinal do cartão SIM 1 - Esconder 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 2 Desativar notificações Notificações \"O SIM não está inserido.\" desativadas @@ -68,12 +68,22 @@ PA Wi-Fi desligado Lanterna ligada Lanterna 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 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 utilizador Modo de avião Estado da bateria Wi-Fi @@ -90,6 +100,13 @@ Ponto de Acesso Wi-Fi Lanterna GravityBox + Hibernar + Gravação rápida + Definições + Volume + Ambiente de trabalho expandido + Manter ligado + Captura de ecrã Escolher cor @@ -223,20 +240,21 @@ Desativa a luz vermelha quando a bateria está a carregar - Ações teclas físicas + Ações para teclas físicas Permite personalizar ações para as teclas físicas - Menu key long-press action - Menu key double-tap action - Back key long-press action + Ação ao manter pressionada tecla Menu + Ação após duplo toque na tecla Menu + Ação ao manter pressionada tecla Atrás Por defeito Pesquisa Pesquisa por voz Mudar para a aplicação anterior Fechar aplicação em curso - 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 + 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 do duplo toque + Aplicável à ação após duplo toque na tecla Menu. Permite definir o tempo máximo admissível entre toques Aplicação fechada Nenhuma aplicação por fechar Nenhuma aplicação anterior encontrada @@ -297,11 +315,11 @@ Cores da Barra de Status - Ativar coloração de símbolos + Ativar coloração de indicadores - Cor dos símbolos - Permite escolher a cor dos símbolos e do relógio + Cor dos indicadores + Permite escolher a cor dos indicadores e do relógio Cor da atividade de dados @@ -336,40 +354,40 @@ %d%% restante - Sem serviço + Fora de serviço Modo de avião ativado Apenas chamadas de emergência - Pie controls - Enable pie controls - Show search button - Navigation key size - Trigger positions - Left screen border - Bottom screen border - Right screen border - Top screen border + Controlos Pie + Ativar controlos Pie + Mostrar botão Pesquisa + 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. + 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) - Hide navigation bar - Hides navigation bar while Pie Controls are enabled (for devices that have navigation bar, requires reboot) + 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) - Dithered Holo background - Replaces standard Holo background with dithered one to suppress color banding (requires reboot) + Fundo pontilhado + Substituir o fundo do tema Holo predefinido por um pontilhado por forma a evitar o efeito de bandas de cores (necessário reiniciar) - Disable hardware keys - Disables MENU, BACK, HOME while Pie Controls are enabled. HW keys actions will still work. (for devices having HW keys) + Desativar teclas físicas + Desativa as teclas de Menu, Atrás e Casa quando os controlos Pie estão ativados. As teclas físicas continuam a funcionar (para dispositivos com teclas físicas) Utilizar tema escuro @@ -386,7 +404,7 @@ Ajustar margem superior - Desativa avisos de roaming + Desativar avisos de roaming Desativa os avisos de roaming aquando do envio de mensagens ou realização de chamadas em roaming @@ -405,38 +423,39 @@ GPS ativado GPS desativado + GPS fixado - Always show menu button + Mostrar sempre botão Menu - Ringer mode + Modo de Toque Definições do relógio - Esconder AM/PM + Ocultar AM/PM - Esconder relógio + Ocultar relógio - Trigger size + Limite mínimo para ativação - Transparency management - Statusbar transparency for launcher - Statusbar transparency for lockscreen - Navbar transparency for launcher - Navbar transparency for lockscreen + Gestão de transparências + 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 - Esconder símbolo de alarme + Ocultar indicador de alarme - Screen dim level - Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + 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 @@ -451,7 +470,7 @@ Mostrar aplicações recentes - Home key long-press action + Ação ao manter pressionada tecla Casa Iniciar aplicação 1 @@ -466,22 +485,22 @@ Associar relógio do painel de notificações a uma aplicação específica em vez das Definições de data e hora - Waiting for response from GravityBox system framework… - GravityBox system framework not responding. Exiting. + A aguardar resposta da estrutura de sistema do GravityBox… + Estrutura de sistema do GravityBox não responde. A sair. - National data roaming - Connect to data services when nationally roaming + Roaming de dados nacionais + Permite o estabelecimento de ligação de dados durante roaming em território nacional - Expanded desktop mode - Disabled - Hide statusbar - Hide navigation bar - Hide both - Expanded desktop - Expanded desktop is ON - Expanded desktop is OFF + 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ã @@ -490,19 +509,19 @@ Mostrar menu - Toggle expanded desktop - Expanded desktop mode is disabled! + 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 + Ativação global dos ajustes da Barra de Navegação (necessário reiniciar) + Ativar Barra de Navegação Necessário reiniciar - Altura da barra de navegação + Altura da Barra de Navegação Aplicável à orientação de ecrã vertical - Largura da barra de navegação + Largura da Barra de Navegação Aplicável à orientação de ecrã horizontal Mostar sempre botão Menu @@ -510,11 +529,11 @@ Captura de ecrã no Menu Desligar - Lockscreen targets - Enable lockscreen targets - Master switch for lockscreen targets - Target application %s - Unlock ring bottom offset + Alvos 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 do anel de desbloqueio da margem inferior Ativar controlo de brilho @@ -526,23 +545,29 @@ 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 + 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 - Disable slow 2G data warning - Disables warning about slow data speed when turning on mobile data in QuickSettings for SIM in 2G mode + 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 - Follow stock battery color - Makes statusbar clock, percentage and circle battery use the color of stock battery icon. Applies when icon coloring is off. + Associar cor pré-definida da bateria + Força o uso da cor pré-definida 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. - Network mode tile mode + Modo do painel Modo de Rede 2G/2G+3G/3G 2G/2G+3G + + Desativar notificações GPS + + + Permitir todas as orientações + From 5d42c5bb8d0ada9ded07f8bccd6b9face1982746 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 09:35:31 +0200 Subject: [PATCH 195/710] Option for overriding default touch/long-touch behaviour of tiles - wifi on/off on touch; wifi settings on long-touch - BT on/off on touch; BT settinngs on long-touch - RSSI (mobile signal): data on/off on touch; data usage on long-touch - Airplane mode: turn on/off on touch --- res/values/arrays.xml | 14 ++ res/values/strings.xml | 4 + res/xml/gravitybox.xml | 10 +- .../ConnectivityServiceWrapper.java | 71 ++++++++ src/com/ceco/gm2/gravitybox/GravityBox.java | 1 + .../gm2/gravitybox/GravityBoxSettings.java | 9 +- .../ceco/gm2/gravitybox/ModQuickSettings.java | 152 ++++++++++++++---- .../gm2/gravitybox/WifiManagerWrapper.java | 18 +++ .../gravitybox/quicksettings/WifiApTile.java | 4 +- 9 files changed, 248 insertions(+), 35 deletions(-) create mode 100644 src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 62bc06aac5..5c22b084a6 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -161,6 +161,20 @@ gravitybox_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 diff --git a/res/values/strings.xml b/res/values/strings.xml index 1e35e554bd..486429ac2a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -569,4 +569,8 @@ Allow all rotations + + Override default tile behaviour + Overrides touch/long-touch behaviour for selected tiles (requires reboot) + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index e663be4fee..3bcf815ddd 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -119,7 +119,7 @@ android:key="pref_quick_settings" android:title="@string/quick_settings_title" android:summary="@string/quick_settings_summary" /> - + + + diff --git a/src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java b/src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java new file mode 100644 index 0000000000..793f396b55 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java @@ -0,0 +1,71 @@ +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 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"); + 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/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index 62f60d9ef3..a6e6e668fe 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -69,6 +69,7 @@ public void initZygote(StartupParam startupParam) throws Throwable { PatchMasterKey.initZygote(); ModPhone.initZygote(prefs); ModExpandedDesktop.initZygote(prefs); + ConnectivityServiceWrapper.initZygote(); } @Override diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index 97ce08fe90..a633969a69 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -340,6 +340,8 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece "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"; + private static final List rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -356,7 +358,8 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece PREF_KEY_SCREEN_DIM_LEVEL, PREF_KEY_BRIGHTNESS_MASTER_SWITCH, PREF_KEY_NAVBAR_OVERRIDE, - PREF_KEY_NAVBAR_ENABLE + PREF_KEY_NAVBAR_ENABLE, + PREF_KEY_QS_TILE_BEHAVIOUR_OVERRIDE )); private static final class SystemProperties { @@ -550,6 +553,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private PreferenceCategory mPrefCatPhoneTelephony; private PreferenceCategory mPrefCatPhoneMobileData; private ListPreference mPrefNetworkModeTileMode; + private MultiSelectListPreference mPrefQsTileBehaviourOverride; @SuppressWarnings("deprecation") @Override @@ -692,6 +696,8 @@ public void onCreate(Bundle savedInstanceState) { mPrefMobileDataSlow2gDisable = (CheckBoxPreference) findPreference(PREF_KEY_MOBILE_DATA_SLOW2G_DISABLE); mPrefNetworkModeTileMode = (ListPreference) findPreference(PREF_KEY_NETWORK_MODE_TILE_MODE); + mPrefQsTileBehaviourOverride = + (MultiSelectListPreference) findPreference(PREF_KEY_QS_TILE_BEHAVIOUR_OVERRIDE); // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { @@ -725,6 +731,7 @@ public void onCreate(Bundle savedInstanceState) { 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 diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index 75fea409b9..f0bca5a581 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -28,12 +28,17 @@ import com.ceco.gm2.gravitybox.quicksettings.VolumeTile; import com.ceco.gm2.gravitybox.quicksettings.WifiApTile; +import android.annotation.SuppressLint; +import android.bluetooth.BluetoothAdapter; 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.res.Configuration; import android.content.res.Resources; +import android.net.ConnectivityManager; import android.os.Build; import android.os.IBinder; import android.provider.Settings; @@ -52,13 +57,12 @@ import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam; public class ModQuickSettings { - private static final String TAG = "ModQuickSettings"; + private static final String TAG = "GB:ModQuickSettings"; public static final String PACKAGE_NAME = "com.android.systemui"; private static final String CLASS_QUICK_SETTINGS = "com.android.systemui.statusbar.phone.QuickSettings"; private static final String CLASS_PHONE_STATUSBAR = "com.android.systemui.statusbar.phone.PhoneStatusBar"; private static final String CLASS_PANEL_BAR = "com.android.systemui.statusbar.phone.PanelBar"; private static final String CLASS_QS_TILEVIEW = "com.android.systemui.statusbar.phone.QuickSettingsTileView"; - private static final String CLASS_QS_BASIC_TILE = "com.android.systemui.statusbar.phone.QuickSettingsBasicTile"; private static final String CLASS_NOTIF_PANELVIEW = "com.android.systemui.statusbar.phone.NotificationPanelView"; private static final String CLASS_QS_CONTAINER_VIEW = "com.android.systemui.statusbar.phone.QuickSettingsContainerView"; private static final String CLASS_QS_MODEL = "com.android.systemui.statusbar.phone.QuickSettingsModel"; @@ -75,7 +79,6 @@ public class ModQuickSettings { private static Object mStatusBar; private static Set mActiveTileKeys; private static Class mQuickSettingsTileViewClass; - private static Class mQuickSettingsBasicTileClass; private static Object mSimSwitchPanelView; private static int mNumColumns = 3; private static int mLpOriginalHeight = -1; @@ -85,6 +88,9 @@ public class ModQuickSettings { private static List mCustomSystemTileKeys; private static List mCustomGbTileKeys; private static Map mAospTileTags; + private static Object mQuickSettings; + private static WifiManagerWrapper mWifiManager; + private static Set mOverrideTileKeys; private static ArrayList mTiles; @@ -145,7 +151,7 @@ private static void log(String message) { @Override public void onReceive(Context context, Intent intent) { - log("received broadcast: " + intent.toString()); + if (DEBUG) log("received broadcast: " + intent.toString()); if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_QUICKSETTINGS_CHANGED)) { if (intent.hasExtra(GravityBoxSettings.EXTRA_QS_PREFS)) { String[] qsPrefs = intent.getStringArrayExtra(GravityBoxSettings.EXTRA_QS_PREFS); @@ -227,7 +233,7 @@ private static String getTileKey(View view) { private static void updateTileVisibility() { if (mActiveTileKeys == null) { - log("updateTileVisibility: mActiveTileKeys is null - skipping"); + if (DEBUG) log("updateTileVisibility: mActiveTileKeys is null - skipping"); return; } @@ -298,7 +304,7 @@ public static void initResources(XSharedPreferences prefs, InitPackageResourcesP } public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { - log("init"); + if (DEBUG) log("init"); try { final ThreadLocal removeNotificationState = @@ -307,7 +313,12 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL prefs.reload(); mActiveTileKeys = prefs.getStringSet(GravityBoxSettings.PREF_KEY_QUICK_SETTINGS, null); - log("got tile prefs: mActiveTileKeys = " + (mActiveTileKeys == null ? "null" : mActiveTileKeys.toString())); + if (DEBUG) log("got tile prefs: mActiveTileKeys = " + + (mActiveTileKeys == null ? "null" : mActiveTileKeys.toString())); + mOverrideTileKeys = prefs.getStringSet( + GravityBoxSettings.PREF_KEY_QS_TILE_BEHAVIOUR_OVERRIDE, new HashSet()); + if (DEBUG) log("got tile override prefs: mOverrideTileKeys = " + + (mOverrideTileKeys == null ? "null" : mOverrideTileKeys.toString())); try { mNumColumns = Integer.valueOf(prefs.getString( @@ -330,8 +341,6 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL final Class panelBarClass = XposedHelpers.findClass(CLASS_PANEL_BAR, classLoader); mQuickSettingsTileViewClass = XposedHelpers.findClass(CLASS_QS_TILEVIEW, classLoader); methodGetColumnSpan = mQuickSettingsTileViewClass.getDeclaredMethod("getColumnSpan"); - mQuickSettingsBasicTileClass = Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1 ? - XposedHelpers.findClass(CLASS_QS_BASIC_TILE, classLoader) : mQuickSettingsTileViewClass; final Class notifPanelViewClass = XposedHelpers.findClass(CLASS_NOTIF_PANELVIEW, classLoader); final Class quickSettingsContainerViewClass = XposedHelpers.findClass(CLASS_QS_CONTAINER_VIEW, classLoader); @@ -360,17 +369,13 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL XposedHelpers.findAndHookMethod(phoneStatusBarClass, "removeNotification", IBinder.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - if (DEBUG) { - log("removeNotification method ENTER"); - } + if (DEBUG) log("removeNotification method ENTER"); removeNotificationState.set(MethodState.METHOD_ENTERED); } @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - if (DEBUG) { - log("removeNotification method EXIT"); - } + if (DEBUG) log("removeNotification method EXIT"); removeNotificationState.set(MethodState.METHOD_EXITED); } }); @@ -379,7 +384,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { if (removeNotificationState.get().equals(MethodState.METHOD_ENTERED)) { - log("animateCollapsePanels called from removeNotification method"); + if (DEBUG) log("animateCollapsePanels called from removeNotification method"); boolean hasFlipSettings = XposedHelpers.getBooleanField(param.thisObject, "mHasFlipSettings"); boolean animating = Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1 ? false : @@ -392,7 +397,8 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable if (ndSize == 0 && !animating && !isShowingSettings) { // let the original method finish its work } else { - log("animateCollapsePanels: all notifications removed but showing QuickSettings - do nothing"); + if (DEBUG) log("animateCollapsePanels: all notifications removed " + + "but showing QuickSettings - do nothing"); param.setResult(null); } } @@ -407,11 +413,13 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - log("QuickSettings constructed - initializing local members"); + if (DEBUG) log("QuickSettings constructed - initializing local members"); + mQuickSettings = param.thisObject; mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); mGbContext = mContext.createPackageContext(GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY); mContainerView = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, "mContainerView"); + mWifiManager = new WifiManagerWrapper(mContext); IntentFilter intentFilter = new IntentFilter(GravityBoxSettings.ACTION_PREF_QUICKSETTINGS_CHANGED); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_QUICKAPP_CHANGED); @@ -423,7 +431,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mPanelBar = param.args[0]; - log("mPanelBar set"); + if (DEBUG) log("mPanelBar set"); } }; @@ -431,14 +439,14 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mStatusBar = param.args[0]; - log("mStatusBar set"); + if (DEBUG) log("mStatusBar set"); } }; private static XC_MethodHook quickSettingsAddSystemTilesHook = new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - log("about to add tiles"); + if (DEBUG) log("about to add tiles"); try { LayoutInflater inflater = (LayoutInflater) param.args[1]; @@ -467,7 +475,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { syncTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(syncTile); - WifiApTile wifiApTile = new WifiApTile(mContext, mGbContext, mStatusBar, mPanelBar); + WifiApTile wifiApTile = new WifiApTile(mContext, mGbContext, mStatusBar, mPanelBar, mWifiManager); wifiApTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(wifiApTile); @@ -513,9 +521,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { private static XC_MethodHook quickSettingsUpdateResourcesHook = new XC_MethodHook() { @Override protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { - if (DEBUG) { - log("updateResources - updating all tiles"); - } + if (DEBUG) log("updateResources - updating all tiles"); for (AQuickSettingsTile t : mTiles) { t.updateResources(); @@ -600,7 +606,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { Object toolbarView = XposedHelpers.getObjectField(param.thisObject, "mToolBarView"); if (toolbarView != null) { mSimSwitchPanelView = XposedHelpers.getObjectField(toolbarView, "mSimSwitchPanelView"); - log("makeStatusBarView: SimSwitchPanelView found"); + if (DEBUG) log("makeStatusBarView: SimSwitchPanelView found"); } } catch (NoSuchFieldError e) { // @@ -612,7 +618,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { private static XC_MethodHook qsContainerViewUpdateResources = new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - if (DEBUG ) log("qsContainerView updateResources called"); + if (DEBUG) log("qsContainerView updateResources called"); // do this only for portrait mode FrameLayout fl = (FrameLayout) param.thisObject; final int orientation = fl.getContext().getResources().getConfiguration().orientation; @@ -758,7 +764,25 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { CLASS_QS_TILEVIEW, CLASS_QS_MODEL_RCB, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - ((View)param.args[0]).setTag(mAospTileTags.get("wifi_textview")); + final View tile = (View) param.args[0]; + tile.setTag(mAospTileTags.get("wifi_textview")); + if (mOverrideTileKeys.contains("wifi_textview")) { + tile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mWifiManager.toggleWifiEnabled(); + } + }); + tile.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + XposedHelpers.callMethod(mQuickSettings, "startSettingsActivity", + android.provider.Settings.ACTION_WIFI_SETTINGS); + tile.setPressed(false); + return true; + } + }); + } } }); } catch (Throwable t) { @@ -770,7 +794,33 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { CLASS_QS_TILEVIEW, CLASS_QS_MODEL_RCB, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - ((View)param.args[0]).setTag(mAospTileTags.get("rssi_textview")); + final View tile = (View) param.args[0]; + tile.setTag(mAospTileTags.get("rssi_textview")); + if (mOverrideTileKeys.contains("rssi_textview")) { + tile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final ConnectivityManager cm = + (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + final boolean mobileDataEnabled = + (Boolean) XposedHelpers.callMethod(cm, "getMobileDataEnabled"); + Intent intent = new Intent(ConnectivityServiceWrapper.ACTION_SET_MOBILE_DATA_ENABLED); + intent.putExtra(ConnectivityServiceWrapper.EXTRA_ENABLED, !mobileDataEnabled); + mContext.sendBroadcast(intent); + } + }); + tile.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Intent intent = new Intent(); + intent.setComponent(new ComponentName("com.android.settings", + "com.android.settings.Settings$DataUsageSummaryActivity")); + XposedHelpers.callMethod(mQuickSettings, "startSettingsActivity", intent); + tile.setPressed(false); + return true; + } + }); + } } }); } catch (Throwable t) { @@ -806,7 +856,24 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { CLASS_QS_TILEVIEW, CLASS_QS_MODEL_RCB, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - ((View)param.args[0]).setTag(mAospTileTags.get("airplane_mode_textview")); + final View tile = (View) param.args[0]; + tile.setTag(mAospTileTags.get("airplane_mode_textview")); + if (mOverrideTileKeys.contains("airplane_mode_textview")) { + tile.setOnClickListener(new View.OnClickListener() { + @SuppressLint("NewApi") + @Override + public void onClick(View v) { + final ContentResolver cr = mContext.getContentResolver(); + final boolean amOn = Settings.Global.getInt(cr, + Settings.Global.AIRPLANE_MODE_ON, 0) == 1; + Settings.Global.putInt(cr, Settings.Global.AIRPLANE_MODE_ON, + amOn ? 0 : 1); + Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); + intent.putExtra("state", !amOn); + mContext.sendBroadcast(intent); + } + }); + } } }); } catch (Throwable t) { @@ -818,7 +885,30 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { CLASS_QS_TILEVIEW, CLASS_QS_MODEL_RCB, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - ((View)param.args[0]).setTag(mAospTileTags.get("bluetooth_textview")); + final View tile = (View) param.args[0]; + tile.setTag(mAospTileTags.get("bluetooth_textview")); + if (mOverrideTileKeys.contains("bluetooth_textview")) { + tile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); + if (btAdapter.isEnabled()) { + btAdapter.disable(); + } else { + btAdapter.enable(); + } + } + }); + tile.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + XposedHelpers.callMethod(mQuickSettings, "startSettingsActivity", + android.provider.Settings.ACTION_BLUETOOTH_SETTINGS); + tile.setPressed(false); + return true; + } + }); + } } }); } catch (Throwable t) { diff --git a/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java b/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java index 3f48e0df35..bf1fcdd9bb 100644 --- a/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java +++ b/src/com/ceco/gm2/gravitybox/WifiManagerWrapper.java @@ -10,6 +10,7 @@ import android.content.IntentFilter; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; +import android.os.AsyncTask; import android.os.Build; import android.provider.Settings; @@ -94,6 +95,23 @@ public void setWifiEnabled(boolean enable) { mWifiManager.setWifiEnabled(enable); } + public void toggleWifiEnabled() { + final boolean enable = + (getWifiState() != WifiManagerWrapper.WIFI_STATE_ENABLED); + new AsyncTask() { + @Override + protected Void doInBackground(Void... args) { + final int wifiApState = getWifiApState(); + if (enable && (wifiApState == WifiManagerWrapper.WIFI_AP_STATE_ENABLING + || wifiApState == WifiManagerWrapper.WIFI_AP_STATE_ENABLED)) { + setWifiApEnabled(false); + } + setWifiEnabled(enable); + return null; + } + }.execute(); + } + public boolean isWifiApEnabled() { return (getWifiApState() == WIFI_AP_STATE_ENABLED); } diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/WifiApTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/WifiApTile.java index 369756f284..658d69b6cb 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/WifiApTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/WifiApTile.java @@ -17,10 +17,10 @@ public class WifiApTile extends AQuickSettingsTile implements WifiApStateChangeL private TextView mTextView; public WifiApTile(Context context, Context gbContext, Object statusBar, - Object panelBar) { + Object panelBar, WifiManagerWrapper wifiManager) { super(context, gbContext, statusBar, panelBar); - mWifiManager = new WifiManagerWrapper(mContext); + mWifiManager = wifiManager; mOnClick = new View.OnClickListener() { From 108ef0bb018eca21c10ae943dfbcf2da8618733e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 09:49:03 +0200 Subject: [PATCH 196/710] Fixed errors in Italian translations --- res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 57a193d6f4..4a2e792ce5 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -543,7 +543,7 @@ 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. + 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 nel relativo tile dei quicksetting From 34dfb81380ade2593418c833cf94bb33fd810c6f Mon Sep 17 00:00:00 2001 From: ch-vox Date: Thu, 26 Sep 2013 10:01:11 +0200 Subject: [PATCH 197/710] Updated French translation --- res/values-fr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index ad6f2e6718..4f614bfbbf 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -569,4 +569,8 @@ 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) + From b230a87eab49632b55f7be48e41f6903810c9b18 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 10:11:45 +0200 Subject: [PATCH 198/710] Make alternative GPS and Ringer mode tiles available also for MTK Why not? These can be used to replace standard GPS tile and Audio Profile tile. --- res/values/arrays.xml | 4 ++++ res/values/strings.xml | 1 + .../ceco/gm2/gravitybox/ModQuickSettings.java | 22 ++++++++----------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 5c22b084a6..b601902867 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -62,10 +62,12 @@ @string/qs_tile_wifi @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 @@ -89,10 +91,12 @@ wifi_textview bluetooth_textview gps_textview + gps_tileview data_conn_textview network_mode_tileview rssi_textview audio_profile_textview + ringer_mode_tileview volume_tileview brightness_textview timeout_textview diff --git a/res/values/strings.xml b/res/values/strings.xml index 486429ac2a..f8a6900c6c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -88,6 +88,7 @@ Wi-Fi Bluetooth GPS + GPS (CM style) Mobile data Network mode Data usage diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index f0bca5a581..1d0ff9a1ae 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -123,12 +123,10 @@ public class ModQuickSettings { R.id.volume_tileview, R.id.expanded_tileview, R.id.stay_awake_tileview, - R.id.screenshot_tileview + R.id.screenshot_tileview, + R.id.gps_tileview, + R.id.ringer_mode_tileview )); - if (!Utils.isMtkDevice()) { - mCustomGbTileKeys.add(R.id.gps_tileview); - mCustomGbTileKeys.add(R.id.ringer_mode_tileview); - } Map tmpMap = new HashMap(); tmpMap.put("user_textview", 1); @@ -453,15 +451,13 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mTiles = new ArrayList(); - if (!Utils.isMtkDevice()) { - GpsTile gpsTile = new GpsTile(mContext, mGbContext, mStatusBar, mPanelBar); - gpsTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(gpsTile); + GpsTile gpsTile = new GpsTile(mContext, mGbContext, mStatusBar, mPanelBar); + gpsTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(gpsTile); - RingerModeTile rmTile = new RingerModeTile(mContext, mGbContext, mStatusBar, mPanelBar); - rmTile.setupQuickSettingsTile(mContainerView, inflater); - mTiles.add(rmTile); - } + RingerModeTile rmTile = new RingerModeTile(mContext, mGbContext, mStatusBar, mPanelBar); + rmTile.setupQuickSettingsTile(mContainerView, inflater); + mTiles.add(rmTile); VolumeTile volTile = new VolumeTile(mContext, mGbContext, mStatusBar, mPanelBar); volTile.setupQuickSettingsTile(mContainerView, inflater); From 0b01145ff1f4bdee7ac31bbc78bfe3b2e3c77a9d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 10:45:07 +0200 Subject: [PATCH 199/710] Network mode tile: added 2G/3G mode option - plus added (LTE) to strings for users with devices having LTE to better understand how modes work --- res/values/arrays.xml | 2 ++ res/values/strings.xml | 5 +++-- .../quicksettings/NetworkModeTile.java | 21 +++++++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index b601902867..0ecb8493eb 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -452,11 +452,13 @@ @string/nm_tile_mode1 @string/nm_tile_mode2 + @string/nm_tile_mode3 0 1 + 2 diff --git a/res/values/strings.xml b/res/values/strings.xml index f8a6900c6c..6407f1b12a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -561,8 +561,9 @@ Network mode tile mode - 2G/2G+3G/3G - 2G/2G+3G + 2G/2G+3G/3G/(LTE) + 2G/2G+3G/(LTE) + 2G/3G/(LTE) Disable GPS notifications diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java index ad6b8cfd9a..99b0f26209 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java @@ -25,6 +25,7 @@ public class NetworkModeTile extends AQuickSettingsTile { private int mNetworkType; private int mDefaultNetworkType; private boolean mAllow3gOnly; + private boolean mAllow2g3g; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -51,8 +52,7 @@ public void onChange(boolean selfChange) { ContentResolver cr = mContext.getContentResolver(); mNetworkType = Settings.Global.getInt(cr, PhoneWrapper.PREFERRED_NETWORK_MODE, PhoneWrapper.NT_WCDMA_PREFERRED); - mAllow3gOnly = Settings.System.getInt(cr, - SETTING_NETWORK_MODE_TILE_MODE, 0) == 0; + updateFlags(Settings.System.getInt(cr, SETTING_NETWORK_MODE_TILE_MODE, 0)); log("SettingsObserver onChange; mNetworkType = " + mNetworkType + "; mAllow3gOnly = " + mAllow3gOnly); @@ -77,8 +77,12 @@ public void onClick(View v) { PhoneWrapper.NT_GSM_ONLY); break; case PhoneWrapper.NT_WCDMA_ONLY: - i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, - PhoneWrapper.NT_WCDMA_PREFERRED); + if (!mAllow2g3g) { + i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, + hasLte() ? mDefaultNetworkType : PhoneWrapper.NT_GSM_ONLY); + } else { + i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, PhoneWrapper.NT_WCDMA_PREFERRED); + } break; case PhoneWrapper.NT_GSM_ONLY: i.putExtra(PhoneWrapper.EXTRA_NETWORK_TYPE, mAllow3gOnly ? @@ -115,13 +119,18 @@ protected void onTileCreate() { ContentResolver cr = mContext.getContentResolver(); mNetworkType = Settings.Global.getInt(cr, PhoneWrapper.PREFERRED_NETWORK_MODE, mDefaultNetworkType); - mAllow3gOnly = Settings.System.getInt(cr, - SETTING_NETWORK_MODE_TILE_MODE, 0) == 0; + + updateFlags(Settings.System.getInt(cr, SETTING_NETWORK_MODE_TILE_MODE, 0)); SettingsObserver observer = new SettingsObserver(new Handler()); observer.observe(); } + private void updateFlags(int nmMode) { + mAllow3gOnly = (nmMode == 0) || (nmMode == 2); + mAllow2g3g = (nmMode < 2); + } + @Override protected synchronized void updateTile() { From f485b8dd888d63ac53a8c80accf44a2b782798bb Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 13:00:47 +0200 Subject: [PATCH 200/710] Network mode tile: option to choose SIM Slot to which tile applies (MTK Dual SIM specific) --- res/values/arrays.xml | 10 +++++ res/values/strings.xml | 6 +++ res/xml/gravitybox.xml | 7 ++++ src/com/ceco/gm2/gravitybox/GravityBox.java | 2 +- .../gm2/gravitybox/GravityBoxSettings.java | 19 ++++++++++ src/com/ceco/gm2/gravitybox/PhoneWrapper.java | 37 ++++++++++++++----- 6 files changed, 71 insertions(+), 10 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 0ecb8493eb..dc23022dca 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -461,4 +461,14 @@ 2 + + @string/sim_slot1 + @string/sim_slot2 + + + + 0 + 1 + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 6407f1b12a..b2a5806794 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -575,4 +575,10 @@ 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 + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 3bcf815ddd..b8ba760cb2 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -174,6 +174,13 @@ android:entryValues="@array/network_mode_tile_mode_values" android:defaultValue="0" /> + + rebootKeys = new ArrayList(Arrays.asList( PREF_KEY_FIX_DATETIME_CRASH, PREF_KEY_FIX_CALENDAR, @@ -554,6 +559,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private PreferenceCategory mPrefCatPhoneMobileData; private ListPreference mPrefNetworkModeTileMode; private MultiSelectListPreference mPrefQsTileBehaviourOverride; + private ListPreference mPrefQsNetworkModeSimSlot; @SuppressWarnings("deprecation") @Override @@ -698,6 +704,7 @@ public void onCreate(Bundle savedInstanceState) { 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); // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { @@ -714,12 +721,14 @@ public void onCreate(Bundle savedInstanceState) { mQuickSettings.setEntries(R.array.qs_tile_aosp_entries); mQuickSettings.setEntryValues(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); } // Remove preferences not needed for ZTE V987 @@ -940,6 +949,12 @@ private void updatePreferences(String key) { 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())); + } } @Override @@ -1159,6 +1174,10 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 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"))); } if (intent.getAction() != null) { getActivity().sendBroadcast(intent); diff --git a/src/com/ceco/gm2/gravitybox/PhoneWrapper.java b/src/com/ceco/gm2/gravitybox/PhoneWrapper.java index 29245256bb..7a58273009 100644 --- a/src/com/ceco/gm2/gravitybox/PhoneWrapper.java +++ b/src/com/ceco/gm2/gravitybox/PhoneWrapper.java @@ -9,11 +9,13 @@ import android.os.Message; import android.provider.Settings; 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; public class PhoneWrapper { - private static final String TAG = "PhoneWrapper"; + private static final String TAG = "GB:PhoneWrapper"; + private static final boolean DEBUG = false; public static final int NT_WCDMA_PREFERRED = 0; public static final int NT_GSM_ONLY = 1; @@ -34,6 +36,7 @@ public class PhoneWrapper { private static Class mClsPhoneFactory; private static Class mSystemProperties; private static Context mContext; + private static int mSimSlot; private static void log(String msg) { XposedBridge.log(TAG + ": " + msg); @@ -46,26 +49,40 @@ public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION_CHANGE_NETWORK_TYPE) && intent.hasExtra(EXTRA_NETWORK_TYPE)) { int networkType = intent.getIntExtra(EXTRA_NETWORK_TYPE, NT_WCDMA_PREFERRED); - log("received ACTION_CHANGE_NETWORK_TYPE broadcast: networkType = " + networkType); + if (DEBUG) log("received ACTION_CHANGE_NETWORK_TYPE broadcast: networkType = " + networkType); setPreferredNetworkType(networkType); } + if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_QS_NETWORK_MODE_SIM_SLOT_CHANGED)) { + mSimSlot = intent.getIntExtra(GravityBoxSettings.EXTRA_SIM_SLOT, 0); + if (DEBUG) log("received ACTION_PREF_QS_NETWORK_MODE_SIM_SLOT_CHANGED broadcast: " + + "mSimSlot = " + mSimSlot); + } } }; - public static void initZygote() { - log("Entering init state"); + public static void initZygote(final XSharedPreferences prefs) { + if (DEBUG) log("Entering init state"); try { mClsPhoneFactory = XposedHelpers.findClass("com.android.internal.telephony.PhoneFactory", null); mSystemProperties = XposedHelpers.findClass("android.os.SystemProperties", null); - String methodName = Utils.isMtkDevice() ? "makeDefaultPhones" : "makeDefaultPhone"; + mSimSlot = 0; + try { + mSimSlot = Integer.valueOf(prefs.getString( + GravityBoxSettings.PREF_KEY_QS_NETWORK_MODE_SIM_SLOT, "0")); + } catch (NumberFormatException nfe) { + log("Invalid value for SIM Slot preference: " + nfe.getMessage()); + } + if (DEBUG) log("mSimSlot = " + mSimSlot); + + String methodName = Utils.hasGeminiSupport() ? "makeDefaultPhones" : "makeDefaultPhone"; XposedHelpers.findAndHookMethod(mClsPhoneFactory, methodName, Context.class, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mContext = (Context) param.args[0]; - log("PhoneFactory makeDefaultPhones - phone wrapper initialized"); + if (DEBUG) log("PhoneFactory makeDefaultPhones - phone wrapper initialized"); onInitialize(); } }); @@ -77,6 +94,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { private static void onInitialize() { if (mContext != null) { IntentFilter intentFilter = new IntentFilter(ACTION_CHANGE_NETWORK_TYPE); + intentFilter.addAction(GravityBoxSettings.ACTION_PREF_QS_NETWORK_MODE_SIM_SLOT_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter); } } @@ -87,12 +105,13 @@ private static void setPreferredNetworkType(int networkType) { if (defPhone == null) return; try { - if (Utils.isMtkDevice()) { + if (Utils.hasGeminiSupport()) { Class[] paramArgs = new Class[3]; paramArgs[0] = int.class; paramArgs[1] = Message.class; paramArgs[2] = int.class; - XposedHelpers.callMethod(defPhone, "setPreferredNetworkTypeGemini", paramArgs, networkType, null, 0); + XposedHelpers.callMethod(defPhone, "setPreferredNetworkTypeGemini", + paramArgs, networkType, null, mSimSlot); } else { if (Build.VERSION.SDK_INT > 16) { Settings.Global.putInt(mContext.getContentResolver(), PREFERRED_NETWORK_MODE, networkType); @@ -114,7 +133,7 @@ public static int getDefaultNetworkType() { try { int mode = (Integer) XposedHelpers.callStaticMethod(mSystemProperties, "getInt", "ro.telephony.default_network", NT_WCDMA_PREFERRED); - log("getDefaultNetworkMode: mode=" + mode); + if (DEBUG) log("getDefaultNetworkMode: mode=" + mode); return mode; } catch (Throwable t) { XposedBridge.log(t); From 1308d89ef29e07d579a1ceca3f1cbf96252b5203 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 14:00:20 +0200 Subject: [PATCH 201/710] Improved option for disabling slow 2G tile warnings --- src/com/ceco/gm2/gravitybox/ModMtkToolbar.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java b/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java index 8d9ae38648..97d2392667 100644 --- a/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java +++ b/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java @@ -1,5 +1,9 @@ package com.ceco.gm2.gravitybox; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import android.content.Context; import android.content.res.Resources; import de.robv.android.xposed.XC_MethodHook; @@ -15,6 +19,13 @@ public class ModMtkToolbar { private static final String CLASS_MOBILE_STATE_TRACKER = "com.android.systemui.statusbar.toolbar.QuickSettingsConnectionModel$MobileStateTracker"; + private static List mSlow2gStrings = new ArrayList(Arrays.asList( + "gemini_3g_disable_warning", + "gemini_3g_disable_warning_cu", + "gemini_3g_disable_warning_case1", + "gemini_3g_disable_warning_case2" + )); + private static void log(String message) { XposedBridge.log(TAG + ": " + message); } @@ -42,8 +53,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { final String msgResName = res.getResourceEntryName(msgResId); if (DEBUG) log("Message resource name: " + msgResName); - if ("gemini_3g_disable_warning_case1".equals(msgResName) - || "gemini_3g_disable_warning_case2".equals(msgResName)) { + if (mSlow2gStrings.contains(msgResName)) { if (DEBUG) log("Skipping slow data warning dialog"); param.setResult(-1); } From add708a3af5a8358337b90aa981904bc678a6df6 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 15:53:16 +0200 Subject: [PATCH 202/710] Make Pie Controls more intelligent Linked to Expanded Desktop. Allow 4 Pie Controls modes 1) Disabled - completely off 2) Always - always on 3) When expanded desktop on - when expanded desktop turned on regardless in what mode 4) Only when expanded desktop is set to hide navigation bar --- res/values/arrays.xml | 14 +++++++ res/values/strings.xml | 6 +++ res/xml/gravitybox.xml | 8 ++-- .../gm2/gravitybox/GravityBoxSettings.java | 17 ++++---- .../ceco/gm2/gravitybox/ModPieControls.java | 39 +++++++++++++++---- 5 files changed, 67 insertions(+), 17 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index dc23022dca..6ae6a04f0e 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -471,4 +471,18 @@ 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 + + diff --git a/res/values/strings.xml b/res/values/strings.xml index b2a5806794..3d082a9d10 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -581,4 +581,10 @@ SIM slot 1 SIM slot 2 + + Never + Always + When expanded desktop on + When expanded desktop hides navigation bar + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index b8ba760cb2..774af9b893 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -326,10 +326,12 @@ android:key="pref_cat_pie_control" android:title="@string/pie_control_title"> - + android:entries="@array/pie_controls_enable_entries" + android:entryValues="@array/pie_controls_enable_values" + android:defaultValue="0" /> Разрешить все повороты - + + + Заменить стандартное поведение тайлов + Заменяет поведение касания/долгого касания для выбранных тайлов (необходима перезагрузка) + From 2601568d9145e1bd6d5a67c6e8aa8bd9ff127696 Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Thu, 26 Sep 2013 17:19:36 +0300 Subject: [PATCH 204/710] Updated Russian translation 2.5.5 --- res/values-ru/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 4bb6f8bafd..d495f36cd6 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -573,4 +573,16 @@ Заменить стандартное поведение тайлов Заменяет поведение касания/долгого касания для выбранных тайлов (необходима перезагрузка) + + Слот SIM для тайла Режим сети + Определяет слот, для которого работает тайл Режим сети (%s) + SIM slot 1 + SIM slot 2 + + + Никогда + Всегда + При включенном расширенном дисплее + Когда расширенный дисплей без панели навигации + From 679c8bbff60c117e7c19ce0891bda6fd9b01a341 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 26 Sep 2013 16:42:33 +0200 Subject: [PATCH 205/710] Move navbar transparency settings under Navbar tweaks section --- res/xml/gravitybox.xml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 774af9b893..b11bf978ed 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -254,24 +254,6 @@ monitorBoxEnabled="true" monitorBoxUnit="%" /> - - - - + + + + Date: Thu, 26 Sep 2013 21:18:22 +0100 Subject: [PATCH 206/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 0f5739d7ea..ea88d45702 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -570,4 +570,20 @@ Permitir todas as orientações + + Substituir comportamento padrão dos painéis + Permite substituir o comportamento padrão dos painéis seleccionados 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 + From 9c62b89d9c96c1add008822c68f1873f83e3b374 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Thu, 26 Sep 2013 21:18:37 +0100 Subject: [PATCH 207/710] Coherent menu levels for transparency management - Statusbar transparency management was already under "Transparency management" menu - Navbar transparency management moved also to same menu level --- res/xml/gravitybox.xml | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index b11bf978ed..f17c574e75 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -476,24 +476,30 @@ android:title="@string/pref_navbar_menukey_title" android:defaultValue="false" /> - + - + + + + + Date: Thu, 26 Sep 2013 21:40:08 +0100 Subject: [PATCH 208/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index ea88d45702..8b188b1602 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -40,7 +40,6 @@ 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 só vez na janela de tarefas recentes Corrigir problema nas definições de data e hora Selecionar caso tenha problemas ao aceder à configuração de data e hora nas definições do telefone (necessário reiniciar) @@ -89,6 +88,7 @@ Wi-Fi Bluetooth GPS + GPS (estilo CM) Dados 3G Modo de Rede Utilização de dados From f3c72a967f1af7383d3b8aeea3762800664b5c30 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Fri, 27 Sep 2013 06:07:26 +0200 Subject: [PATCH 209/710] Updated French translation 2.5.5 --- res/values-fr/strings.xml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 4f614bfbbf..2056b0cff9 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -88,6 +88,7 @@ Wi-Fi Bluetooth GPS + GPS (style CM) Connexion de données Mode réseau Consommation de données @@ -560,8 +561,9 @@ Modalités touche mode réseau - 2G/2G+3G/3G - 2G/2G+3G + 2G/2G+3G/3G/(LTE) + 2G/2G+3G/(LTE) + 2G/3G/(LTE) Désactiver les notifications du GPS @@ -573,4 +575,16 @@ 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 + From 2b0411c72704bbcbb2923dec90d26a330dc957cf Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 07:42:29 +0200 Subject: [PATCH 210/710] 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 --- res/values/strings.xml | 4 ++++ res/xml/gravitybox.xml | 6 +++++ .../gm2/gravitybox/GravityBoxSettings.java | 9 ++++++++ .../gm2/gravitybox/ModStatusbarColor.java | 22 +++++++++++++------ 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3d082a9d10..7f1f0dd565 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -587,4 +587,8 @@ 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 + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index f17c574e75..064ca88b3c 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -230,6 +230,12 @@ android:summary="@string/pref_statusbar_data_activity_color_summary" android:defaultValue="@integer/COLOR_WHITE" /> + + phoneWindowManagerClass = XposedHelpers.findClass(CLASS_PHONE_WINDOW_MANAGER, null); - log("replacing getSystemDecorRectLw method"); + if (DEBUG) log("replacing getSystemDecorRectLw method"); XposedHelpers.findAndHookMethod(phoneWindowManagerClass, "getSystemDecorRectLw", Rect.class, new XC_MethodReplacement() { @@ -195,6 +202,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL XposedHelpers.findClass(CLASS_NOTIF_PANEL_VIEW, classLoader) : null; mIconColorEnabled = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE, false); + mSkipBatteryIcon = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_COLOR_SKIP_BATTERY, false); mIconManager.setIconColor( prefs.getInt(GravityBoxSettings.PREF_KEY_STATUSBAR_ICON_COLOR, mIconManager.getDefaultIconColor())); @@ -227,7 +235,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { mSignalClusterView = param.thisObject; - log("SignalClusterView constructed - mSignalClusterView set"); + if (DEBUG) log("SignalClusterView constructed - mSignalClusterView set"); } }); @@ -292,7 +300,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); mBatteryPlugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; - if (mIconColorEnabled && mBattery != null) { + if (mIconColorEnabled && !mSkipBatteryIcon && mBattery != null) { Drawable d = mIconManager.getBatteryIcon(mBatteryLevel, mBatteryPlugged); if (d != null) mBattery.setImageDrawable(d); } @@ -518,7 +526,7 @@ private static void setStatusbarBgColor(int color) { ColorDrawable colorDrawable = new ColorDrawable(); colorDrawable.setColor(color); mPanelBar.setBackground(colorDrawable); - log("statusbar background color set to: " + color); + if (DEBUG) log("statusbar background color set to: " + color); } private static void applyIconColors() { From 32d8459698c415de45a9dd56cc1af7ebfaaad9d5 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 07:55:09 +0200 Subject: [PATCH 211/710] Lockscreen targets: option for unlock ring right offset --- res/values/strings.xml | 1 + res/xml/gravitybox.xml | 10 ++++++++++ src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 5 +++++ src/com/ceco/gm2/gravitybox/ModLockscreen.java | 7 +++++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7f1f0dd565..5bb21f2de1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -534,6 +534,7 @@ Master switch for lockscreen targets Target application %s Unlock ring bottom offset + Unlock ring right offset Enable brightness control diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 064ca88b3c..a48bb982a9 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -51,6 +51,16 @@ monitorBoxUnit="px" android:defaultValue="0" /> + + Date: Fri, 27 Sep 2013 08:56:32 +0200 Subject: [PATCH 212/710] Better descriptions for navbar dimension settings --- res/values-cs/strings.xml | 4 ++-- res/values-sk/strings.xml | 4 ++-- res/values/strings.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index ce977cd18b..cfb42d9f3b 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -516,9 +516,9 @@ Povolit navigační lištu Vyžaduje restart Výška navigační lišty - Pro orientaci na výšku + Pro horizontální navigační lištu Šířka navigační lišty - Pro orientaci na šířku + Pro vertikální navigační lištu Vždy zobrazit menu tlačítko diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 19580622a0..572a05ac29 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -512,9 +512,9 @@ Povoliť navigačnú lištu Vyžaduje reštart Výška navigačnej lišty - Pre orientáciu na výšku + Pre horizontálnu navigačnú lištu Šírka navigačnej lišty - Pre orientáciu na šírku + Pre vertikálnu navigačnú lištu Vždy zobraziť menu tlačidlo diff --git a/res/values/strings.xml b/res/values/strings.xml index 5bb21f2de1..ca17d55b41 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -520,9 +520,9 @@ Enable navigation bar Requires reboot Navigation bar height - Applies to portrait orientation + Applies to horizontal navigation bar Navigation bar width - Applies to landscape orientation + Applies to vertical navigation bar Always show menu key From bf12ac60fb4d8b872cff87eff6bf636dfa6519b9 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 09:30:46 +0200 Subject: [PATCH 213/710] Option for navigation bar height for landscape orientation --- res/values-cs/strings.xml | 3 ++- res/values-sk/strings.xml | 3 ++- res/values/strings.xml | 3 ++- res/xml/gravitybox.xml | 11 +++++++++++ src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 9 +++++++++ src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java | 9 ++++++++- 6 files changed, 34 insertions(+), 4 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index cfb42d9f3b..331787e494 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -516,7 +516,8 @@ Povolit navigační lištu Vyžaduje restart Výška navigační lišty - Pro horizontální navigační lištu + 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 diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 572a05ac29..728503971f 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -512,7 +512,8 @@ Povoliť navigačnú lištu Vyžaduje reštart Výška navigačnej lišty - Pre horizontálnu navigačnú lištu + 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 diff --git a/res/values/strings.xml b/res/values/strings.xml index ca17d55b41..79c9fe9245 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -520,7 +520,8 @@ Enable navigation bar Requires reboot Navigation bar height - Applies to horizontal navigation bar + 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 diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index a48bb982a9..4301253402 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -476,6 +476,17 @@ monitorBoxUnit="%" android:defaultValue="100" /> + + Date: Fri, 27 Sep 2013 09:43:55 +0200 Subject: [PATCH 214/710] Move navbar transparency management category to top --- res/xml/gravitybox.xml | 48 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 4301253402..da312fc35a 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -454,6 +454,30 @@ android:title="@string/pref_cat_navigation_bar_title" android:summary="@string/pref_cat_navigation_bar_summary"> + + + + + + + + - - - - - - - - Date: Fri, 27 Sep 2013 10:34:06 +0200 Subject: [PATCH 215/710] Quiet down a lot of logging. Only exceptions will be logged when DEBUG is false. Also use better TAG to distinguish GB from other modules. --- src/com/ceco/gm2/gravitybox/FixCalendar.java | 4 +- .../ceco/gm2/gravitybox/FixCallerIdMms.java | 2 +- .../ceco/gm2/gravitybox/FixCallerIdPhone.java | 8 ++-- .../ceco/gm2/gravitybox/FixDateTimeCrash.java | 7 ++-- .../ceco/gm2/gravitybox/FixDevOptions.java | 16 ++++---- .../ceco/gm2/gravitybox/FixMmsWakelock.java | 39 ++++++++++--------- .../ceco/gm2/gravitybox/FixTraceFlood.java | 5 ++- .../ceco/gm2/gravitybox/FixTtsSettings.java | 7 ++-- src/com/ceco/gm2/gravitybox/GravityBox.java | 22 +++++------ src/com/ceco/gm2/gravitybox/ModAudio.java | 17 ++++---- .../ceco/gm2/gravitybox/ModAudioSettings.java | 8 ++-- .../ceco/gm2/gravitybox/ModBatteryStyle.java | 26 ++++++++----- src/com/ceco/gm2/gravitybox/ModCallCard.java | 13 ++++--- .../gm2/gravitybox/ModCellConnService.java | 2 +- .../gm2/gravitybox/ModClearAllRecents.java | 9 +++-- src/com/ceco/gm2/gravitybox/ModDisplay.java | 20 +++++----- .../ceco/gm2/gravitybox/ModElectronBeam.java | 2 +- src/com/ceco/gm2/gravitybox/ModHwKeys.java | 22 +++++------ .../gm2/gravitybox/ModLowBatteryWarning.java | 10 ++--- src/com/ceco/gm2/gravitybox/ModPhone.java | 16 ++++---- .../ceco/gm2/gravitybox/ModPieControls.java | 8 ++-- src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 5 --- src/com/ceco/gm2/gravitybox/ModSettings.java | 5 ++- .../gm2/gravitybox/ModSignalIconHide.java | 25 ++++++++---- src/com/ceco/gm2/gravitybox/ModStatusBar.java | 8 ++-- .../ceco/gm2/gravitybox/ModVolKeyCursor.java | 15 ++++--- .../gm2/gravitybox/NotificationWallpaper.java | 3 +- .../ceco/gm2/gravitybox/PatchMasterKey.java | 2 +- .../gravitybox/SystemPropertyProvider.java | 7 ++-- .../gm2/gravitybox/TransparencyManager.java | 2 +- src/com/ceco/gm2/gravitybox/Utils.java | 16 +++++--- .../gm2/gravitybox/pie/PieController.java | 2 +- .../ceco/gm2/gravitybox/pie/PieLayout.java | 2 +- .../quicksettings/NetworkModeTile.java | 5 ++- .../quicksettings/QuickAppTile.java | 5 ++- .../quicksettings/QuickRecordTile.java | 9 +++-- 36 files changed, 203 insertions(+), 171 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/FixCalendar.java b/src/com/ceco/gm2/gravitybox/FixCalendar.java index 8a419cceed..4c79f06dea 100644 --- a/src/com/ceco/gm2/gravitybox/FixCalendar.java +++ b/src/com/ceco/gm2/gravitybox/FixCalendar.java @@ -9,7 +9,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 +24,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); diff --git a/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java b/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java index dadc3563ff..b56606e77c 100644 --- a/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java +++ b/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java @@ -10,7 +10,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; diff --git a/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java b/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java index aae75c83fc..d87c6a88a2 100644 --- a/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java +++ b/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java @@ -7,17 +7,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 +31,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 diff --git a/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java b/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java index 775d331568..bd7a9279d6 100644 --- a/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java +++ b/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java @@ -9,12 +9,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 +27,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). diff --git a/src/com/ceco/gm2/gravitybox/FixDevOptions.java b/src/com/ceco/gm2/gravitybox/FixDevOptions.java index cd47d7cc25..4922fbd256 100644 --- a/src/com/ceco/gm2/gravitybox/FixDevOptions.java +++ b/src/com/ceco/gm2/gravitybox/FixDevOptions.java @@ -18,12 +18,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 +45,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,7 +66,7 @@ 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; } @@ -102,13 +102,13 @@ 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); } }); } diff --git a/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java b/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java index f75f6d4438..46fa8350cb 100644 --- a/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java +++ b/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java @@ -13,12 +13,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 +39,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,7 +57,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mMmsPmHook.unhook(); mMmsPmHook = null; } - log("MmsReceiver onReceive EXITED"); + if (DEBUG) log("MmsReceiver onReceive EXITED"); } }); } catch (Throwable t) { @@ -69,14 +70,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,7 +88,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mSmsPmHook.unhook(); mSmsPmHook = null; } - log("smsReceiver beginStartingService EXITED"); + if (DEBUG) log("smsReceiver beginStartingService EXITED"); } }); } catch (Throwable t) { @@ -102,14 +103,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,7 +121,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mCbPmHook.unhook(); mCbPmHook = null; } - log("CBMessagingNotification updateNotification EXITED"); + if (DEBUG) log("CBMessagingNotification updateNotification EXITED"); } }); } catch (Throwable t) { @@ -133,14 +134,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 +152,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mMnotifPmHook1.unhook(); mMnotifPmHook1 = null; } - log("MessagingNotification notifyClassZeroMessage EXITED"); + if (DEBUG) log("MessagingNotification notifyClassZeroMessage EXITED"); } }); @@ -159,14 +160,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 +178,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mMnotifPmHook2.unhook(); mMnotifPmHook2 = null; } - log("MessagingNotification notifyFailed EXITED"); + if (DEBUG) log("MessagingNotification notifyFailed EXITED"); } }); @@ -186,14 +187,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,7 +205,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mMnotifPmHook3.unhook(); mMnotifPmHook3 = null; } - log("MessagingNotification updateNotification EXITED"); + if (DEBUG) log("MessagingNotification updateNotification EXITED"); } }); } catch (Throwable t) { diff --git a/src/com/ceco/gm2/gravitybox/FixTraceFlood.java b/src/com/ceco/gm2/gravitybox/FixTraceFlood.java index 37bccb414c..d06849a8ae 100644 --- a/src/com/ceco/gm2/gravitybox/FixTraceFlood.java +++ b/src/com/ceco/gm2/gravitybox/FixTraceFlood.java @@ -5,11 +5,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); diff --git a/src/com/ceco/gm2/gravitybox/FixTtsSettings.java b/src/com/ceco/gm2/gravitybox/FixTtsSettings.java index d191ddd35e..3971f67819 100644 --- a/src/com/ceco/gm2/gravitybox/FixTtsSettings.java +++ b/src/com/ceco/gm2/gravitybox/FixTtsSettings.java @@ -8,9 +8,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 +22,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 +32,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; diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index d833bf6f87..ab3c081d3a 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -20,17 +20,17 @@ public void initZygote(StartupParam startupParam) throws Throwable { prefs = new XSharedPreferences(PACKAGE_NAME); prefs.makeWorldReadable(); - 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("Device type: " + (Utils.isTablet() ? "tablet" : "phone")); - XposedBridge.log("Is MTK device: " + Utils.isMtkDevice()); - XposedBridge.log("Has Gemini support: " + Utils.hasGeminiSupport()); - XposedBridge.log("Android SDK: " + Build.VERSION.SDK_INT); - XposedBridge.log("Android Release: " + Build.VERSION.RELEASE); - XposedBridge.log("ROM: " + Build.DISPLAY); + 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: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); diff --git a/src/com/ceco/gm2/gravitybox/ModAudio.java b/src/com/ceco/gm2/gravitybox/ModAudio.java index 835054d11e..a924d2fdd8 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudio.java +++ b/src/com/ceco/gm2/gravitybox/ModAudio.java @@ -12,13 +12,14 @@ import de.robv.android.xposed.XposedHelpers; public class ModAudio { - private static final String TAG = "ModAudio"; + private static final String TAG = "GB:ModAudio"; private static final String CLASS_REMOTE_PLAYBACK_STATE = "android.media.AudioService$RemotePlaybackState"; private static final String CLASS_VOLUME_STREAM_STATE = "android.media.AudioService$VolumeStreamState"; private static final String CLASS_AUDIO_SYSTEM = "android.media.AudioSystem"; private static final String CLASS_AUDIO_SERVICE = "android.media.AudioService"; private static final int STREAM_MUSIC = 3; - private static final int VOLUME_STEPS = 30; + private static final int VOLUME_STEPS = 30; + private static final boolean DEBUG = false; private static boolean mSafeMediaVolumeEnabled; @@ -30,11 +31,11 @@ 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(GravityBoxSettings.ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED)) { mSafeMediaVolumeEnabled = intent.getBooleanExtra( GravityBoxSettings.EXTRA_SAFE_MEDIA_VOLUME_ENABLED, false); - log("Safe headset media volume set to: " + mSafeMediaVolumeEnabled); + if (DEBUG) log("Safe headset media volume set to: " + mSafeMediaVolumeEnabled); } } }; @@ -58,14 +59,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(GravityBoxSettings.ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED); context.registerReceiver(mBroadcastReceiver, intentFilter); - log("AudioService constructed. Broadcast receiver registered"); + if (DEBUG) log("AudioService constructed. Broadcast receiver registered"); } }); 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); - log("Safe headset media volume set to: " + mSafeMediaVolumeEnabled); + if (DEBUG) log("Safe headset media volume set to: " + mSafeMediaVolumeEnabled); XposedHelpers.findAndHookMethod(classAudioService, "enforceSafeMediaVolume", new XC_MethodHook() { @Override @@ -108,7 +109,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); } }); @@ -121,7 +122,7 @@ 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); } } }); diff --git a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java index c2ca7da71e..010993fd33 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java @@ -10,7 +10,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"; @@ -93,7 +93,7 @@ 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: " + + if (DEBUG) log("setVolume: mAudioManager.setAudioProfileStreamVolume: " + "Attempt to set volume of foreign Stream Type - ignoring"); param2.args[0] = streamType; } @@ -128,7 +128,7 @@ 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: " + + if (DEBUG) log("revertVolume: setStreamVolume: " + "Attempt to set volume of foreign Stream Type - ignoring"); param2.args[1] = streamType; } @@ -162,7 +162,7 @@ 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: " + + if (DEBUG) log("saveVolume: setStreamVolume: " + "Attempt to set volume of foreign Stream Type - ignoring"); param2.args[1] = streamType; } diff --git a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java index fe4abbf250..29a81dd4f8 100644 --- a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java +++ b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java @@ -24,14 +24,20 @@ 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"; + private static final boolean DEBUG = false; private static int mBatteryStyle; private static boolean mBatteryPercentText; private static Object mBatteryController; + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override @@ -39,11 +45,11 @@ 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); + if (DEBUG) log("mBatteryPercentText changed to: " + mBatteryPercentText); } updateBatteryStyle(); } @@ -76,7 +82,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { android.R.color.holo_blue_dark)); percText.setVisibility(View.GONE); vg.addView(percText); - XposedBridge.log("ModBatteryStyle: Battery percent text injected"); + if (DEBUG) log("Battery percent text injected"); } else { percText.setTag("percentage"); } @@ -86,7 +92,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { ImageView exView = (ImageView) vg.findViewById(liparam.res.getIdentifier( "circle_battery", "id", PACKAGE_NAME)); if (exView != null) { - XposedBridge.log("ModBatteryStyle: circle_battery view found - removing"); + if (DEBUG) log("circle_battery view found - removing"); vg.removeView(exView); } @@ -100,7 +106,7 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { circleBattery.setVisibility(View.GONE); ModStatusbarColor.setCircleBattery(circleBattery); vg.addView(circleBattery); - XposedBridge.log("ModBatteryStyle: CmCircleBattery injected"); + if (DEBUG) log("CmCircleBattery injected"); // find battery ImageView battery = (ImageView) vg.findViewById( @@ -119,8 +125,8 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable { public static void init(final XSharedPreferences prefs, ClassLoader classLoader) { - XposedBridge.log("ModBatteryStyle: init"); - + if (DEBUG) log("init"); + try { Class phoneStatusBarClass = findClass(CLASS_PHONE_STATUSBAR, classLoader); @@ -137,7 +143,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { ImageView circleBattery = (ImageView) mStatusBarView.findViewWithTag("circle_battery"); if (circleBattery != null) { XposedHelpers.callMethod(mBatteryController, "addIconView", circleBattery); - XposedBridge.log("ModBatteryStyle: BatteryController.addIconView(circleBattery)"); + if (DEBUG) log("BatteryController.addIconView(circleBattery)"); } TextView percText = (TextView) mStatusBarView.findViewWithTag("percentage"); @@ -155,7 +161,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } if (!percentTextExists) { XposedHelpers.callMethod(mBatteryController, "addLabelView", percText); - XposedBridge.log("ModBatteryStyle: BatteryController.addLabelView(percText)"); + if (DEBUG) log("BatteryController.addLabelView(percText)"); } } } @@ -180,7 +186,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { intentFilter.addAction(GravityBoxSettings.ACTION_PREF_BATTERY_STYLE_CHANGED); context.registerReceiver(mBroadcastReceiver, intentFilter); - XposedBridge.log("ModBatteryStyle: BatteryController constructed"); + if (DEBUG) log("BatteryController constructed"); } }); diff --git a/src/com/ceco/gm2/gravitybox/ModCallCard.java b/src/com/ceco/gm2/gravitybox/ModCallCard.java index 66d9e6b965..650aa3807b 100644 --- a/src/com/ceco/gm2/gravitybox/ModCallCard.java +++ b/src/com/ceco/gm2/gravitybox/ModCallCard.java @@ -12,7 +12,7 @@ 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 = Build.VERSION.SDK_INT > 16 ? @@ -20,13 +20,14 @@ public class ModCallCard { "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() { try { - XposedBridge.log(TAG + ": initZygote"); + if (DEBUG) XposedBridge.log(TAG + ": initZygote"); phoneConstStateClass = XposedHelpers.findClass(CLASS_PHONE_CONSTANTS_STATE, null); callClass = XposedHelpers.findClass(CLASS_CALL, null); } catch (Throwable t) { @@ -35,7 +36,7 @@ public static void initZygote() { } 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); @@ -48,7 +49,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 = @@ -67,7 +68,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"); @@ -94,7 +95,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); diff --git a/src/com/ceco/gm2/gravitybox/ModCellConnService.java b/src/com/ceco/gm2/gravitybox/ModCellConnService.java index c1bf8813ec..5b5d6d6759 100644 --- a/src/com/ceco/gm2/gravitybox/ModCellConnService.java +++ b/src/com/ceco/gm2/gravitybox/ModCellConnService.java @@ -9,7 +9,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; diff --git a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java index c8c3796591..164a573278 100644 --- a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java +++ b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java @@ -21,11 +21,12 @@ 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; @@ -59,7 +60,7 @@ 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); } } @@ -85,7 +86,7 @@ public void onClick(View v) { }); imgView.setVisibility(View.GONE); vg.addView(imgView); - log("clearAllButton ImageView injected"); + if (DEBUG) log("clearAllButton ImageView injected"); updateButtonLayout((View) param.thisObject, imgView); } }); @@ -170,7 +171,7 @@ private static void handleDismissChild(final MethodHookParam param) { 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(); diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java index abd62bccb6..adb91e1d89 100644 --- a/src/com/ceco/gm2/gravitybox/ModDisplay.java +++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java @@ -20,7 +20,7 @@ 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"; @@ -50,7 +50,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"); @@ -167,17 +167,17 @@ public static void initZygote(final XSharedPreferences prefs) { int brightnessMin = prefs.getInt(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, 20); XResources.setSystemWideReplacement( "android", "integer", "config_screenBrightnessSettingMinimum", brightnessMin); - log("Minimum brightness value set to: " + brightnessMin); + if (DEBUG) log("Minimum brightness value set to: " + brightnessMin); int screenDim = prefs.getInt(GravityBoxSettings.PREF_KEY_SCREEN_DIM_LEVEL, 10); XResources.setSystemWideReplacement( "android", "integer", "config_screenBrightnessDim", screenDim); - log("Screen dim level set to: " + screenDim); + if (DEBUG) log("Screen dim level set to: " + screenDim); XposedBridge.hookAllConstructors(classDisplayPowerController, new XC_MethodHook() { @Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { - log("DisplayPowerController constructed"); + if (DEBUG) log("DisplayPowerController constructed"); if (param.args.length < 2) { log("Unsupported parameters. Aborting."); return; @@ -245,7 +245,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { intentFilter.addAction(Intent.ACTION_SCREEN_ON); intentFilter.addAction(Intent.ACTION_SCREEN_OFF); context.registerReceiver(mBroadcastReceiver, intentFilter); - log("LightsService constructed. Broadcast receiver registered."); + if (DEBUG) log("LightsService constructed. Broadcast receiver registered."); } } }); @@ -258,7 +258,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable if (mHandler == null) mHandler = new Handler(); 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]); @@ -287,7 +287,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable if (id == LIGHT_ID_NOTIFICATIONS || id == LIGHT_ID_ATTENTION) { if ((Integer)param.args[0] != 0) { if (!mPendingNotif) { - log("New notification. Entering PendingNotif state"); + if (DEBUG) log("New notification. Entering PendingNotif state"); mPendingNotif = true; mWakeLock = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "GbModDisplay"); mWakeLock.acquire(3600000); @@ -295,7 +295,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable mHandler.post(mPendingNotifRunnable); } } else if (mPendingNotif) { - log("Notification dismissed. Leaving PendingNotif state"); + if (DEBUG) log("Notification dismissed. Leaving PendingNotif state"); mPendingNotif = false; if (mWakeLock.isHeld()) { mWakeLock.release(); @@ -340,6 +340,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 009c2be8d3..f0d4e1f64e 100644 --- a/src/com/ceco/gm2/gravitybox/ModElectronBeam.java +++ b/src/com/ceco/gm2/gravitybox/ModElectronBeam.java @@ -7,7 +7,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"; diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index 4136af1eec..c227682399 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -32,7 +32,7 @@ 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"; @@ -91,7 +91,7 @@ private static enum HwKeyTrigger { @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; @@ -101,26 +101,26 @@ 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)) { mHomeLongpressAction = value; - log("Home long-press action set to: " + value); + if (DEBUG) log("Home long-press action set to: " + value); } 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_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); + if (DEBUG) 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); @@ -346,7 +346,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { intentFilter.addAction(GravityBoxSettings.ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter); - log("Phone window manager initialized"); + if (DEBUG) log("Phone window manager initialized"); } }; @@ -493,7 +493,7 @@ public void run() { !appInfo.processName.equals("com.android.systemui") && !appInfo.processName.equals("com.mediatek.bluetooth") && !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; break; diff --git a/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java b/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java index 48bc6fcd95..bcdb480b31 100644 --- a/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java +++ b/src/com/ceco/gm2/gravitybox/ModLowBatteryWarning.java @@ -11,7 +11,7 @@ import de.robv.android.xposed.XposedHelpers; public class ModLowBatteryWarning { - private static final String TAG = "ModLowBatteryWarning"; + private static final String TAG = "GB:ModLowBatteryWarning"; public static final String PACKAGE_NAME = "com.android.systemui"; private static final String CLASS_POWER_UI = "com.android.systemui.power.PowerUI"; private static final String CLASS_LIGHT_SERVICE_LIGHT = "com.android.server.LightsService$Light"; @@ -25,7 +25,7 @@ private static void log(String message) { } public static void initZygote(final XSharedPreferences prefs) { - log("initZygote"); + if (DEBUG) log("initZygote"); try { final Class lightServiceClass = XposedHelpers.findClass(CLASS_LIGHT_SERVICE_LIGHT, null); final Class batteryServiceClass = XposedHelpers.findClass(CLASS_BATTERY_SERVICE_LED, null); @@ -93,7 +93,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { static void init(final XSharedPreferences prefs, ClassLoader classLoader) { try { - log("init"); + if (DEBUG) log("init"); Class classPowerUI = findClass(CLASS_POWER_UI, classLoader); @@ -118,7 +118,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { prefs.getString(GravityBoxSettings.PREF_KEY_LOW_BATTERY_WARNING_POLICY, "3")); final boolean playSound = ((batteryWarningPolicy & GravityBoxSettings.BATTERY_WARNING_SOUND) != 0); - log("playLowBatterySound called; playSound = " + playSound); + if (DEBUG) log("playLowBatterySound called; playSound = " + playSound); if (!playSound) param.setResult(null); @@ -135,7 +135,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { prefs.getString(GravityBoxSettings.PREF_KEY_LOW_BATTERY_WARNING_POLICY, "3")); final boolean showPopup = ((batteryWarningPolicy & GravityBoxSettings.BATTERY_WARNING_POPUP) != 0); - log("showLowBatteryWarning called; showPopup = " + showPopup); + if (DEBUG) log("showLowBatteryWarning called; showPopup = " + showPopup); if (!showPopup) param.setResult(null); diff --git a/src/com/ceco/gm2/gravitybox/ModPhone.java b/src/com/ceco/gm2/gravitybox/ModPhone.java index d5cf7e42e5..c45698ce4b 100644 --- a/src/com/ceco/gm2/gravitybox/ModPhone.java +++ b/src/com/ceco/gm2/gravitybox/ModPhone.java @@ -16,7 +16,7 @@ import de.robv.android.xposed.XposedHelpers; public class ModPhone { - private static final String TAG = "ModPhone"; + private static final String TAG = "GB:ModPhone"; public static final String PACKAGE_NAME = "com.android.phone"; private static final String CLASS_IN_CALL_SCREEN = "com.android.phone.InCallScreen"; private static final String ENUM_PHONE_STATE = Build.VERSION.SDK_INT > 16 ? @@ -44,23 +44,23 @@ private static void log(String message) { @Override public void onFaceUp() { - log("PhoneSensorEventListener.onFaceUp"); + if (DEBUG) log("PhoneSensorEventListener.onFaceUp"); // do nothing } @Override public void onFaceDown() { - log("PhoneSensorEventListener.onFaceDown"); + if (DEBUG) log("PhoneSensorEventListener.onFaceDown"); if (mInCallScreen == null) return; try { switch (mFlipAction) { case GravityBoxSettings.PHONE_FLIP_ACTION_MUTE: - log("Muting call"); + if (DEBUG) log("Muting call"); XposedHelpers.callMethod(mInCallScreen, "internalSilenceRinger"); break; case GravityBoxSettings.PHONE_FLIP_ACTION_DISMISS: - log("Dismissing call"); + if (DEBUG) log("Dismissing call"); XposedHelpers.callMethod(mInCallScreen, "internalHangup"); break; case GravityBoxSettings.PHONE_FLIP_ACTION_NONE: @@ -84,7 +84,7 @@ private static void attachSensorListener() { SensorManager.SENSOR_DELAY_NORMAL); mSensorListenerAttached = true; - log("Sensor listener attached"); + if (DEBUG) log("Sensor listener attached"); } private static void detachSensorListener() { @@ -93,7 +93,7 @@ private static void detachSensorListener() { mSensorManager.unregisterListener(mPhoneSensorEventListener); mSensorListenerAttached = false; - log("Sensor listener detached"); + if (DEBUG) log("Sensor listener detached"); } public static void initZygote(final XSharedPreferences prefs) { @@ -231,7 +231,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - log("Vibrator: vibrate called from CallNotifier - ignoring"); + if (DEBUG) log("Vibrator: vibrate called from CallNotifier - ignoring"); param.setResult(null); } }); diff --git a/src/com/ceco/gm2/gravitybox/ModPieControls.java b/src/com/ceco/gm2/gravitybox/ModPieControls.java index 1a847c9dce..e3fa736ded 100644 --- a/src/com/ceco/gm2/gravitybox/ModPieControls.java +++ b/src/com/ceco/gm2/gravitybox/ModPieControls.java @@ -28,7 +28,7 @@ import de.robv.android.xposed.XposedHelpers; public class ModPieControls { - private static final String TAG = "ModPieController"; + private static final String TAG = "GB:ModPieController"; public static final String PACKAGE_NAME = "com.android.systemui"; private static final boolean DEBUG = false; private static final boolean DEBUG_INPUT = false; @@ -72,7 +72,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()); ContentResolver cr = mContext.getContentResolver(); if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_PIE_CHANGED)) { if (intent.hasExtra(GravityBoxSettings.EXTRA_PIE_ENABLE)) { @@ -207,7 +207,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - log("BaseStatusBar starting..."); + if (DEBUG) log("BaseStatusBar starting..."); mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext"); mGbContext = mContext.createPackageContext(GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY); mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); @@ -300,7 +300,7 @@ void observe() { @Override public void onChange(boolean selfChange) { - log("PieSettingsObserver onChange()"); + if (DEBUG) log("PieSettingsObserver onChange()"); mPieTriggerSlots = Settings.System.getInt(mContext.getContentResolver(), SETTING_PIE_GRAVITY, Position.BOTTOM.FLAG); diff --git a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java index ef3b58e826..e8601d299a 100644 --- a/src/com/ceco/gm2/gravitybox/ModPowerMenu.java +++ b/src/com/ceco/gm2/gravitybox/ModPowerMenu.java @@ -10,19 +10,14 @@ import android.app.AlertDialog; -import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.ServiceConnection; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.IBinder; -import android.os.Message; -import android.os.Messenger; import android.os.PowerManager; -import android.os.RemoteException; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; diff --git a/src/com/ceco/gm2/gravitybox/ModSettings.java b/src/com/ceco/gm2/gravitybox/ModSettings.java index 497970658f..038ffdfe86 100644 --- a/src/com/ceco/gm2/gravitybox/ModSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModSettings.java @@ -9,9 +9,10 @@ import de.robv.android.xposed.XposedHelpers; public class ModSettings { - private static final String TAG = "ModSettings"; + private static final String TAG = "GB:ModSettings"; public static final String PACKAGE_NAME = "com.android.settings"; private static final String CLASS_PU_SUMMARY = "com.android.settings.fuelgauge.PowerUsageSummary"; + private static final boolean DEBUG = false; private static void log (String message) { XposedBridge.log(TAG + ": " + message); @@ -36,7 +37,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { // TODO: make this more bullet-proof Preference pref = appListGroup.getPreference(i); if (pref != null && pref instanceof CheckBoxPreference) { - log("CheckBoxPreference found: " + pref.getTitle() + " - removing"); + if (DEBUG) log("CheckBoxPreference found: " + pref.getTitle() + " - removing"); appListGroup.removePreference(pref); break; } diff --git a/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java b/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java index deda661be8..b42e791fc6 100644 --- a/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java +++ b/src/com/ceco/gm2/gravitybox/ModSignalIconHide.java @@ -18,23 +18,30 @@ import de.robv.android.xposed.XposedHelpers; public class ModSignalIconHide { + private static final String TAG = "GB:ModSignalIconHide"; public static final String PACKAGE_NAME = "com.android.systemui"; private static final String CLASS_SIGNAL_CLUSTER_VIEW = "com.android.systemui.statusbar.SignalClusterViewGemini"; private static final String CLASS_UICC_CONTROLLER = Build.VERSION.SDK_INT > 16 ? "com.android.internal.telephony.uicc.UiccController" : "com.android.internal.telephony.IccCard"; + private static final boolean DEBUG = false; + private static boolean autohideSlot1; private static boolean autohideSlot2; + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + public static void init(final XSharedPreferences prefs, ClassLoader classLoader) { - XposedBridge.log("ModSignalIconHide: init"); + if (DEBUG) log("init"); try { Set autoHidePrefs = prefs.getStringSet(GravityBoxSettings.PREF_KEY_SIGNAL_ICON_AUTOHIDE, null); autohideSlot1 = (autoHidePrefs != null && autoHidePrefs.contains("sim1")); autohideSlot2 = (autoHidePrefs != null && autoHidePrefs.contains("sim2")); - XposedBridge.log("ModSignalIconHide: autohideSlot1 = " + autohideSlot1 + "; autohideSlot2 = " + autohideSlot2); + if (DEBUG) log("autohideSlot1 = " + autohideSlot1 + "; autohideSlot2 = " + autohideSlot2); Class signalClusterViewClass = XposedHelpers.findClass(CLASS_SIGNAL_CLUSTER_VIEW, classLoader); @@ -47,15 +54,17 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_SIGNAL_ICON_AUTOHIDE_CHANGED)) { - XposedBridge.log("ModSignalIconHide: ACTION_PREF_SIGNAL_ICON_AUTOHIDE_CHANGED broadcast received"); + if (DEBUG) log("ACTION_PREF_SIGNAL_ICON_AUTOHIDE_CHANGED broadcast received"); String[] autohidePrefs = intent.getStringArrayExtra("autohidePrefs"); autohideSlot1 = autohideSlot2 = false; for (String str: autohidePrefs) { autohideSlot1 |= str.equals("sim1"); autohideSlot2 |= str.equals("sim2"); } - XposedBridge.log("ModSignalIconHide: autohideSlot1 = " + autohideSlot1 + "; autohideSlot2 = " + autohideSlot2); - XposedBridge.log("ModSignalIconHide: invoking apply() method"); + if (DEBUG) { + log("autohideSlot1 = " + autohideSlot1 + "; autohideSlot2 = " + autohideSlot2); + log("invoking apply() method"); + } XposedHelpers.callMethod(param.thisObject, "apply"); } } @@ -97,7 +106,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } public static void initZygote(final XSharedPreferences prefs) { - XposedBridge.log("ModSignalIconHide: initZygote"); + if (DEBUG) log("initZygote"); try { Class uiccControllerClass = findClass(CLASS_UICC_CONTROLLER, null); @@ -105,11 +114,11 @@ public static void initZygote(final XSharedPreferences prefs) { XposedHelpers.findAndHookMethod(uiccControllerClass, "setNotification", int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - XposedBridge.log("ModSignalIconHide: UiccController.setNotification(" + param.args[0] + ")"); + if (DEBUG) log("UiccController.setNotification(" + param.args[0] + ")"); prefs.reload(); Set autohidePrefs = prefs.getStringSet(GravityBoxSettings.PREF_KEY_SIGNAL_ICON_AUTOHIDE, null); if (autohidePrefs != null && autohidePrefs.contains("notifications_disabled")) { - XposedBridge.log("ModSignalIconHide: SIM not inserted notifications disabled - skipping method"); + if (DEBUG) log("SIM not inserted notifications disabled - skipping method"); param.setResult(null); } } diff --git a/src/com/ceco/gm2/gravitybox/ModStatusBar.java b/src/com/ceco/gm2/gravitybox/ModStatusBar.java index ed3051408c..e95f90478b 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusBar.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusBar.java @@ -98,7 +98,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(GravityBoxSettings.ACTION_PREF_CLOCK_CHANGED)) { if (intent.hasExtra(GravityBoxSettings.EXTRA_CENTER_CLOCK)) { setClockPosition(intent.getBooleanExtra(GravityBoxSettings.EXTRA_CENTER_CLOCK, false)); @@ -237,7 +237,7 @@ public void onClick(View v) { mLayoutClock.setGravity(Gravity.CENTER); mLayoutClock.setVisibility(View.GONE); mRootView.addView(mLayoutClock); - log("mLayoutClock injected"); + if (DEBUG) log("mLayoutClock injected"); XposedHelpers.findAndHookMethod(mClock.getClass(), "getSmallTime", new XC_MethodHook() { @Override @@ -526,7 +526,7 @@ private static void setClockPosition(boolean center) { mIconArea.removeView(mClock); mLayoutClock.addView(mClock); mLayoutClock.setVisibility(View.VISIBLE); - log("Clock set to center position"); + if (DEBUG) log("Clock set to center position"); } else { mClock.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); mClock.setLayoutParams(new LinearLayout.LayoutParams( @@ -535,7 +535,7 @@ private static void setClockPosition(boolean center) { mLayoutClock.removeView(mClock); mIconArea.addView(mClock); mLayoutClock.setVisibility(View.GONE); - log("Clock set to normal position"); + if (DEBUG) log("Clock set to normal position"); } mClockCentered = center; diff --git a/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java b/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java index c079c9da68..b10adff579 100644 --- a/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java +++ b/src/com/ceco/gm2/gravitybox/ModVolKeyCursor.java @@ -8,12 +8,17 @@ import de.robv.android.xposed.XposedHelpers; public class ModVolKeyCursor { - public static final String TAG = "ModVolKeyCursor"; + public static final String TAG = "GB:ModVolKeyCursor"; public static final String CLASS_IME_SERVICE = "android.inputmethodservice.InputMethodService"; private static int mVolKeyCursorControl = GravityBoxSettings.VOL_KEY_CURSOR_CONTROL_OFF; + private static final boolean DEBUG = false; + + private static void log (String message) { + XposedBridge.log(TAG + ": " + message); + } public static void initZygote(final XSharedPreferences prefs) { - XposedBridge.log(TAG + ": initZygote"); + if (DEBUG) log("initZygote"); try { final Class imeClass = XposedHelpers.findClass(CLASS_IME_SERVICE, null); @@ -24,7 +29,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable prefs.reload(); mVolKeyCursorControl = Integer.valueOf(prefs.getString(GravityBoxSettings.PREF_KEY_VOL_KEY_CURSOR_CONTROL, "0")); - XposedBridge.log(TAG + ": onShowInputRequested: refreshing configuartion; " + + if (DEBUG) log("onShowInputRequested: refreshing configuartion; " + "mVolKeyCursorControl = " + mVolKeyCursorControl); } }); @@ -34,7 +39,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { InputMethodService imeService = (InputMethodService) param.thisObject; if (imeService == null) { - XposedBridge.log(TAG + ": failed to cast param.thisObject to InputMethodService"); + if (DEBUG) log("failed to cast param.thisObject to InputMethodService"); return; } @@ -72,7 +77,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { InputMethodService imeService = (InputMethodService) param.thisObject; if (imeService == null) { - XposedBridge.log(TAG + ": failed to cast param.thisObject to InputMethodService"); + log("failed to cast param.thisObject to InputMethodService"); return; } diff --git a/src/com/ceco/gm2/gravitybox/NotificationWallpaper.java b/src/com/ceco/gm2/gravitybox/NotificationWallpaper.java index 53d7a6ab72..610b9edb47 100644 --- a/src/com/ceco/gm2/gravitybox/NotificationWallpaper.java +++ b/src/com/ceco/gm2/gravitybox/NotificationWallpaper.java @@ -9,7 +9,6 @@ import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.PorterDuff; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -23,7 +22,7 @@ class NotificationWallpaper extends FrameLayout { - private static final String TAG = "NotificationWallpaper"; + private static final String TAG = "GB:NotificationWallpaper"; private ImageView mNotificationWallpaperImage; private String mNotifBgImagePathPortrait; diff --git a/src/com/ceco/gm2/gravitybox/PatchMasterKey.java b/src/com/ceco/gm2/gravitybox/PatchMasterKey.java index 7f070a7af1..20f735a631 100644 --- a/src/com/ceco/gm2/gravitybox/PatchMasterKey.java +++ b/src/com/ceco/gm2/gravitybox/PatchMasterKey.java @@ -23,7 +23,7 @@ import libcore.io.Streams; public class PatchMasterKey { - private static final String TAG = "PatchMasterKey"; + private static final String TAG = "GB:PatchMasterKey"; private static final long CENSIG = 0x2014b50; private static final int GPBF_ENCRYPTED_FLAG = 1 << 0; diff --git a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java index abe1b9d725..88de83b4ca 100644 --- a/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java +++ b/src/com/ceco/gm2/gravitybox/SystemPropertyProvider.java @@ -12,8 +12,9 @@ import de.robv.android.xposed.XposedHelpers; public class SystemPropertyProvider { - private static final String TAG = "SystemPropertyProvider"; + private static final String TAG = "GB:SystemPropertyProvider"; public static final String PACKAGE_NAME = "com.android.systemui"; + private static final boolean DEBUG = false; public static final String ACTION_GET_SYSTEM_PROPERTIES = "gravitybox.intent.action.ACTION_GET_SYSTEM_PROPERTIES"; @@ -32,13 +33,13 @@ public static void init(final ClassLoader classLoader) { protected void afterHookedMethod(final MethodHookParam param) throws Throwable { Context context = (Context) param.thisObject; if (context != null) { - log("SystemUIService created. Registering BroadcastReceiver"); + if (DEBUG) log("SystemUIService created. Registering BroadcastReceiver"); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ACTION_GET_SYSTEM_PROPERTIES); context.registerReceiver(new BroadcastReceiver() { @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_SYSTEM_PROPERTIES) && intent.hasExtra("receiver")) { final Resources res = context.getResources(); diff --git a/src/com/ceco/gm2/gravitybox/TransparencyManager.java b/src/com/ceco/gm2/gravitybox/TransparencyManager.java index 10016c317b..c9fe437ca7 100644 --- a/src/com/ceco/gm2/gravitybox/TransparencyManager.java +++ b/src/com/ceco/gm2/gravitybox/TransparencyManager.java @@ -32,7 +32,7 @@ public class TransparencyManager { public static final float KEYGUARD_ALPHA = 0.44f; - private static final String TAG = "TransparencyManager"; + private static final String TAG = "GB:TransparencyManager"; Object mNavbar; Object mStatusbar; diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 33bf7267ab..a2de76ac1b 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -10,6 +10,8 @@ import static de.robv.android.xposed.XposedHelpers.findClass; public class Utils { + private static final String TAG = "GB:Utils"; + private static final boolean DEBUG = false; // Device types private static final int DEVICE_PHONE = 0; @@ -27,6 +29,10 @@ public class Utils { new String[] {"mt6575","mt6577","mt6589","mt8389"} )); + private static void log(String message) { + XposedBridge.log(TAG + ": " + message); + } + private static int getScreenType(Context con) { if (mDeviceType == -1) { WindowManager wm = (WindowManager)con.getSystemService(Context.WINDOW_SERVICE); @@ -114,7 +120,7 @@ public static String get(String key) { Class classSystemProperties = findClass("android.os.SystemProperties", null); ret = (String) callStaticMethod(classSystemProperties, "get", key); } catch (Throwable t) { - XposedBridge.log("Utils: SystemProp.get failed: " + t.getMessage()); + log("SystemProp.get failed: " + t.getMessage()); ret = null; } return ret; @@ -131,7 +137,7 @@ public static String get(String key, String def) { Class classSystemProperties = findClass("android.os.SystemProperties", null); ret = (String) callStaticMethod(classSystemProperties, "get", key, def); } catch (Throwable t) { - XposedBridge.log("Utils: SystemProp.get failed: " + t.getMessage()); + log("SystemProp.get failed: " + t.getMessage()); ret = def; } return ret; @@ -148,7 +154,7 @@ public static Integer getInt(String key, Integer def) { Class classSystemProperties = findClass("android.os.SystemProperties", null); ret = (Integer) callStaticMethod(classSystemProperties, "getInt", key, def); } catch (Throwable t) { - XposedBridge.log("Utils: SystemProp.getInt failed: " + t.getMessage()); + log("SystemProp.getInt failed: " + t.getMessage()); ret = def; } return ret; @@ -165,7 +171,7 @@ public static Long getLong(String key, Long def) { Class classSystemProperties = findClass("android.os.SystemProperties", null); ret = (Long) callStaticMethod(classSystemProperties, "getLong", key, def); } catch (Throwable t) { - XposedBridge.log("Utils: SystemProp.getLong failed: " + t.getMessage()); + log("SystemProp.getLong failed: " + t.getMessage()); ret = def; } return ret; @@ -185,7 +191,7 @@ public static Boolean getBoolean(String key, boolean def) { Class classSystemProperties = findClass("android.os.SystemProperties", null); ret = (Boolean) callStaticMethod(classSystemProperties, "getBoolean", key, def); } catch (Throwable t) { - XposedBridge.log("Utils: SystemProp.getBoolean failed: " + t.getMessage()); + log("SystemProp.getBoolean failed: " + t.getMessage()); ret = def; } return ret; diff --git a/src/com/ceco/gm2/gravitybox/pie/PieController.java b/src/com/ceco/gm2/gravitybox/pie/PieController.java index 2262b6b8d0..3f6edb294f 100644 --- a/src/com/ceco/gm2/gravitybox/pie/PieController.java +++ b/src/com/ceco/gm2/gravitybox/pie/PieController.java @@ -73,7 +73,7 @@ */ public class PieController implements PieLayout.OnSnapListener, PieItem.PieOnClickListener { public static final String PACKAGE_NAME = "com.android.systemui"; - public static final String TAG = "PieController"; + public static final String TAG = "GB:PieController"; private static final String CLASS_BASE_STATUSBAR = "com.android.systemui.statusbar.BaseStatusBar"; public static final boolean DEBUG = false; diff --git a/src/com/ceco/gm2/gravitybox/pie/PieLayout.java b/src/com/ceco/gm2/gravitybox/pie/PieLayout.java index c64198d0d3..b9d39692a9 100644 --- a/src/com/ceco/gm2/gravitybox/pie/PieLayout.java +++ b/src/com/ceco/gm2/gravitybox/pie/PieLayout.java @@ -51,7 +51,7 @@ * (It handles the events for the snap points, too.) */ public class PieLayout extends FrameLayout implements View.OnTouchListener { - public static final String TAG = "PieLayout"; + public static final String TAG = "GB:PieLayout"; public static final boolean DEBUG = false; public static final boolean DEBUG_INPUT = false; diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java index 99b0f26209..78a441bc4d 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/NetworkModeTile.java @@ -17,7 +17,8 @@ import android.widget.TextView; public class NetworkModeTile extends AQuickSettingsTile { - private static final String TAG = "NetworkModeTile"; + private static final String TAG = "GB:NetworkModeTile"; + private static final boolean DEBUG = false; public static final String SETTING_NETWORK_MODE_TILE_MODE = "gb_network_mode_tile_mode"; @@ -54,7 +55,7 @@ public void onChange(boolean selfChange) { PhoneWrapper.PREFERRED_NETWORK_MODE, PhoneWrapper.NT_WCDMA_PREFERRED); updateFlags(Settings.System.getInt(cr, SETTING_NETWORK_MODE_TILE_MODE, 0)); - log("SettingsObserver onChange; mNetworkType = " + mNetworkType + + if (DEBUG) log("SettingsObserver onChange; mNetworkType = " + mNetworkType + "; mAllow3gOnly = " + mAllow3gOnly); updateResources(); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/QuickAppTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/QuickAppTile.java index dc31e2b2a8..6a051ded23 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/QuickAppTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/QuickAppTile.java @@ -32,8 +32,9 @@ import android.widget.TextView; public class QuickAppTile extends AQuickSettingsTile { - private static final String TAG = "QuickAppTile"; + private static final String TAG = "GB:QuickAppTile"; private static final String SEPARATOR = "#C3C0#"; + private static final boolean DEBUG = false; public static final String SETTING_QUICKAPP_DEFAULT = "quick_app_default"; public static final String SETTING_QUICKAPP_SLOT1 = "quick_app_slot1"; @@ -157,7 +158,7 @@ void observe() { @Override public void onChange(boolean selfChange) { - log("SettingsObserver onChange()"); + if (DEBUG) log("SettingsObserver onChange()"); String value; AppInfo ai; ContentResolver cr = mContext.getContentResolver(); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/QuickRecordTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/QuickRecordTile.java index f0fa4dcea6..26e5659821 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/QuickRecordTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/QuickRecordTile.java @@ -22,7 +22,8 @@ import android.widget.TextView; public class QuickRecordTile extends AQuickSettingsTile { - private static final String TAG = "QuickRecordTile"; + private static final String TAG = "GB:QuickRecordTile"; + private static final boolean DEBUG = false; private static final int STATE_IDLE = 0; private static final int STATE_PLAYING = 1; @@ -48,7 +49,7 @@ public void onReceive(Context context, Intent intent) { intent.hasExtra(RecordingService.EXTRA_RECORDING_STATUS)) { int recordingStatus = intent.getIntExtra( RecordingService.EXTRA_RECORDING_STATUS, RecordingService.RECORDING_STATUS_IDLE); - log("Broadcast received: recordingStatus = " + recordingStatus); + if (DEBUG) log("Broadcast received: recordingStatus = " + recordingStatus); switch (recordingStatus) { case RecordingService.RECORDING_STATUS_IDLE: mRecordingState = STATE_IDLE; @@ -57,12 +58,12 @@ public void onReceive(Context context, Intent intent) { case RecordingService.RECORDING_STATUS_STARTED: mRecordingState = STATE_RECORDING; mHandler.postDelayed(autoStopRecord, 3600000); - log("Audio recording started"); + if (DEBUG) log("Audio recording started"); break; case RecordingService.RECORDING_STATUS_STOPPED: mRecordingState = STATE_JUST_RECORDED; mHandler.removeCallbacks(autoStopRecord); - log("Audio recording stopped"); + if (DEBUG) log("Audio recording stopped"); break; case RecordingService.RECORDING_STATUS_ERROR: default: From f7b1b5ba35f7ecc76e79036f6a6b951909dd06ce Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 10:53:51 +0200 Subject: [PATCH 216/710] Removed lower limits for navbar dimensions (allow 0% size) --- res/xml/gravitybox.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index da312fc35a..13c5910fed 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -493,7 +493,7 @@ android:key="pref_navbar_height" android:title="@string/pref_navbar_height_title" android:summary="@string/pref_navbar_height_summary" - minimum="50" + minimum="0" maximum="150" interval="1" monitorBoxEnabled="true" @@ -504,7 +504,7 @@ android:key="pref_navbar_height_landscape" android:title="@string/pref_navbar_height_title" android:summary="@string/pref_navbar_height_landscape_summary" - minimum="50" + minimum="0" maximum="150" interval="1" monitorBoxEnabled="true" @@ -515,7 +515,7 @@ android:key="pref_navbar_width" android:title="@string/pref_navbar_width_title" android:summary="@string/pref_navbar_width_summary" - minimum="50" + minimum="0" maximum="150" interval="1" monitorBoxEnabled="true" From 1869e1b488fd5134f5732d2ddf1c4ddf48efd69c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 11:06:35 +0200 Subject: [PATCH 217/710] Updated Slovak translations --- res/values-sk/strings.xml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 728503971f..cea548d343 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -87,6 +87,7 @@ Wi-Fi Bluetooth GPS + GPS (CM štýl) Mobilné dáta Typ siete Využitie dát @@ -527,6 +528,7 @@ Hlavný vypínač pre skratky obrazovky uzamknutia Aplikácia pre skratku %s Spodný okraj prstenca + Pravý okraj prstenca Povoliť ovládanie jasu @@ -554,8 +556,6 @@ Režim dlaždice typu mobilnej siete - 2G/2G+3G/3G - 2G/2G+3G Skryť GPS notifikácie @@ -563,4 +563,24 @@ 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) + From 92c89e8a0407a4ea1cdc544b87d60c2b41bfab49 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 11:11:32 +0200 Subject: [PATCH 218/710] Updated Czech translations --- res/values-cs/strings.xml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 331787e494..41069fbd44 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -91,6 +91,7 @@ Wi-Fi Bluetooth GPS + GPS (CM styl) Mobilní data Typ síte Využití dat @@ -531,6 +532,7 @@ Hlavní vypínač pro zkratky obrazovky uzamčení Aplikace pro zkratku %s Spodní okraj prstence + Pravý okraj prstence Povolit ovládání jasu @@ -567,4 +569,24 @@ 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) + From 0c5159e0ed27274e819df3893bfecf5d076e4d5a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 11:32:13 +0200 Subject: [PATCH 219/710] Updated Spanish translations (thanks to moxtrom) --- res/values-es/strings.xml | 382 ++++++++++++++++++++++++++++++++++---- 1 file changed, 346 insertions(+), 36 deletions(-) diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 824633812d..35135ec7d9 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -1,51 +1,85 @@ + GravityBox + Indicador de batería Indicador por defecto - Circular con porcentaje - Solo texto grande + Circular + Circular con porcentaje + Porcentaje de bateria en texto Ninguno + Teclas de volumen para cambiar la pista Pulsación larga de las teclas de volumen cambia la pista, mientras la pantalla está apagada + Alarma de batería baja Notificación y sonido Solo notificación Solo sonido Desactivado + Los cambios se aplicarán después de reiniciar + Ocultar iconos de señal Ocultar iconos de señal para las ranuras SIM cuando no hay SIM insertada, desactiva las notificaciones \"SIM no insertada\" Ocultar ranura SIM 1 Ocultar ranura SIM 2 Desactivar notificaciones Desactivar las notificaciones \"SIM no insertada\" + Menú avanzado de apagado Habilita el menú avanzado de apagado, con la opción de reiniciar en modo recuperación Modo recuperación + Bootloader + Control del cursor con las teclas de volumen Controlar el cursor con las teclas de volumen, en campos de texto Deshabilitado El cursor se mueve izquierda/derecha El cursor se mueve derecha/izquierda - Borrado de tareas recientes - Parche para el error de Fecha y Hora + + Borrar todas las tareas recientes + + Reparar error de Fecha y Hora Habilitar en caso de experimentar errores al acceder a la configuración de Fecha y Hora (requiere reiniciar) + Parche para el ID de llamada Habilitar 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. + Parche para el ID de contacto en mensajes Habilitar 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 calendario Habilitar en caso de experimentar encendidos esporádicos de la pantalla (requiere reiniciar) + Importante + Fotografía a pantalla completa del contacto Muestra la fotografía del contacto a pantalla completa en la pantalla de llamada entrante + + Sincronización activada Sincronización desactivada Wi-Fi AP activado Wi-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 Permite seleccionar los íconos que se muestran en el cajón Perfil de usuario @@ -54,7 +88,9 @@ Wi-Fi Bluetooth GPS + GPS (Estilo CM) Datos móviles + Modo de Red Uso de datos Perfiles de audio Brillo @@ -62,39 +98,70 @@ Auto rotación Sincronización Punto de acceso Wi-Fi + Linterna GravityBox + Apagar pantalla + Grabación rapida + Ajustes + Volumen + Escritorio Expandido + Mantener encendido + Captura de pantalla + + Selección de color Toque en el color para seleccionar + + Color de fondo de la barra de estado Permite seleccionar el color de la barra de estado y su transparencia + + Parche para las preferencias de habla Habilita la busqueda por voz y los ajustes de texto-a-voz&en entrada. (requiere reiniciar) + + Opciones avanzadas de desarrolador Habilita las opciones avanzadas de desarrolador (requiere reinicio) + + Personalización de la barra de estado Personalizaciones varias de la barra de estado Personalizaciones varias Personalizaciones que no tienen cabida en otras categorias Parches generales Parches para MTK6589. Usar solo en caso necesario. + + Acerca de Programado por C3C076@XDA. Toque para visitar el foro oficial. Xposed framework Programado por rovo89@XDA. Toque para visitar el foro oficial. Donar Hazme 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 %s se reiniciará - El %s se reiniciaré en modo de restauración - Efecto de CRT al apagar la pantalla + El %s se reiniciará en modo de restauración + El %s se reiniciará al bootloader. + + + Efecto de CRT al apagar la pantalla Habilita la animación de apagado de pantalla que simula una pantalla antigua + + Modo ingeniero Accede al codo ingeniero + + Timbre Dual SIM Permite configurar el tono de llamada y de notificación para cada SIM por separado - Configuración de la Pantalla de Bloqueo + + + Configuración de la pantalla de bloqueo Configuraciones varias de la pantalla de bloqueo Color de fondo de la pantalla de bloqueo - Color de Fondo + Color de fondo Imagen de fondo por defecto Color de relleno Imagen predeterminada @@ -107,18 +174,25 @@ Otro Maximizar Widgets Cuando está habilitado, los Widgets de la pantalla de bloqueo serán maximizados por defecto - Opciones de Energía + + + Opciones de energía Contiene varias opciones relacionadas con el uso de la energía + + Deshabilitar el parpadeo del LED de notificaciones Deshabilita el LED de notificaciones cuando queda poca carga en la batería y no se está cargando - Habilita el botón para borrar todas las tareas recientes a la vez - Personalizaciones - Parches - Activar solo en caso necesario - Mostrar ajustes + + + Mostrar ajustes 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) Valor de intervalo: 10 – 80 + + Niveles de brillo automático Permite ajustar los niveles de luz ambiental y los valores de retroiluminación LCD correspondientes Nivel @@ -133,22 +207,40 @@ 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) - Salva el volumen de auriculares - Activa y desactiva la función de volumen seguro en auriculares + + + 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 hardware keys + + + Acciones teclas de hardware Permite configurar acciones personalizadas en las teclas de hardware Menú tecla larga pulsación Menú tecla de acción doble toque @@ -166,63 +258,109 @@ Aplicación 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 llamar + Descartar llamada + + Desactivar la vibración en llamada conectada Desactiva la vibración que se activa cuando se conecta llamada - Software reboot + + + 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 hay notificaciones - Desplegable Rápido - El borde de la barra de estado baja en configuración Rápida - Apagadof + 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 con volumen - Para dispositivos como Jiayu G3, G4, donde las teclas de volumen a su vez en la pantalla + + + Desactivar despertar con teclas de volumen + Para dispositivos como Jiayu G3, G4, 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 Cajones de Notificación - Fondo del cajón de notificación + + + 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 retrato - Ajuste la imagen del paisaje + 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 - habilitados controles Pie + Habilitar controles Pie Mostrar el botón de búsqueda Tamaño de las teclas de navegación Posiciones del disparador @@ -230,52 +368,224 @@ 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. + ¡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 nervioso + + + Fondo Holo interpolado Sustituye fondo Holo estándar interpolado para suprimir bandas de color (requiere reinicio) + + Deshabilitar teclas de hardware - Deshabilitados botones MENU, BACK, HOME mientras que los controles PIE están habilitados. HW keys actions will still work. (for devices having HW keys) + Deshabilitados botones MENU, BACK, HOME mientras que los controles PIE están habilitados. Acciones con los botones de hardware seguirán funcionando. + + Usar Dark theme Holo Switches GB UI utilizar Holo Dark theme en vez de Holo Light - Off + + + 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 app3 + Pulsación larga en ranura de app 4 + + GPS encendido - GPS apagadof + 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 - \ No newline at end of file + 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 boton 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 barra de notificación + Continene 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) + + + Deshabilitar notificaciones de GPS + + + 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 + + + \ No newline at end of file From 1392cd66ae9a7854582b17f0e6a090e10534dd20 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 11:38:51 +0200 Subject: [PATCH 220/710] Fixed minor GPS Tile bug --- src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java index 44510a51a0..353de2eabf 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java @@ -36,7 +36,7 @@ public void onReceive(Context context, Intent intent) { if (action.equals(LocationManager.PROVIDERS_CHANGED_ACTION)) { mGpsEnabled = Settings.Secure.isLocationProviderEnabled( mContext.getContentResolver(), LocationManager.GPS_PROVIDER); - mGpsFixed &= mGpsEnabled; + mGpsFixed = false; } else if (action.equals(GPS_FIX_CHANGE_ACTION)) { mGpsFixed = intent.getBooleanExtra(EXTRA_GPS_ENABLED, false); } From 70ca04434d342408485340bc9d0fee21a11d9864 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 27 Sep 2013 13:18:32 +0100 Subject: [PATCH 221/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 8b188b1602..be11c02d65 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -4,7 +4,7 @@ GravityBox Estilo do indicador de bateria - Indicador de bateria pré-definido + Indicador de bateria padrão Indicador de bateria circular Indicador de bateria circular com percentagem Texto de percentagem de bateria @@ -162,7 +162,7 @@ Contém vários ajustes relacionados com o ecrã de bloqueio Fundo do ecrã de bloqueio Estilo do fundo - Fundo pré-definido + Fundo padrão Preencher com cor Imagem personalizada Escolher cor @@ -279,7 +279,7 @@ Fundo preto sólido - Utilizar fundo preto sólido no tema Holo predefinido em vez do gradiente preto-cinzento (necessário reiniciar) + Utilizar fundo preto sólido no tema padrão em vez do gradiente preto-cinzento (necessário reiniciar) Painéis por linha @@ -333,7 +333,7 @@ Fundo do painel de notificações - Fundo pré-definido + Fundo padrão Preencher com cor Imagem personalizada Escolher cor @@ -383,7 +383,7 @@ Fundo pontilhado - Substituir o fundo do tema Holo predefinido por um pontilhado por forma a evitar o efeito de bandas de cores (necessário reiniciar) + Substituir o fundo do tema padrão por um pontilhado por forma a evitar o efeito de bandas de cores (necessário reiniciar) Desativar teclas físicas @@ -520,9 +520,10 @@ Ativar Barra de Navegação Necessário reiniciar Altura da Barra de Navegação - Aplicável à orientação de ecrã vertical + 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 à orientação de ecrã horizontal + Aplicável à barra vertical Mostar sempre botão Menu @@ -533,7 +534,8 @@ Ativar alvos do anel de desbloqueio Permite definir até cinco aplicações como alvo no anel de desbloqueio Aplicação %s - Desvio do anel de desbloqueio da margem inferior + Desvio do anel em relação à margem inferior + Desvio do anel em relação à margem direita Ativar controlo de brilho @@ -556,13 +558,14 @@ 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 pré-definida da bateria - Força o uso da cor pré-definida 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. + Associar cor padrão da bateria + Força 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 2G/2G+3G + 2G/3G/4G Desativar notificações GPS @@ -586,4 +589,8 @@ 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 + From 56d5c828d19f1f558a33e30660b271b1a8bd5192 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 15:11:52 +0200 Subject: [PATCH 222/710] Lockscreen targets: change options to control bottom/right margins to control vertical/horizontal offset --- res/values-cs/strings.xml | 4 ++-- res/values-sk/strings.xml | 4 ++-- res/values/strings.xml | 4 ++-- res/xml/gravitybox.xml | 12 ++++++------ src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 4 ++-- src/com/ceco/gm2/gravitybox/ModLockscreen.java | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 41069fbd44..28d77fb102 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -531,8 +531,8 @@ Povolit zkratky Hlavní vypínač pro zkratky obrazovky uzamčení Aplikace pro zkratku %s - Spodní okraj prstence - Pravý okraj prstence + Vertikální ofset prstence + Horizontální ofset prstence Povolit ovládání jasu diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index cea548d343..a2787afa0a 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -527,8 +527,8 @@ Povoliť skratky Hlavný vypínač pre skratky obrazovky uzamknutia Aplikácia pre skratku %s - Spodný okraj prstenca - Pravý okraj prstenca + Vertikálny ofset prstenca + Horizontálny ofset prstenca Povoliť ovládanie jasu diff --git a/res/values/strings.xml b/res/values/strings.xml index 79c9fe9245..04554ae0ef 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -534,8 +534,8 @@ Enable lockscreen targets Master switch for lockscreen targets Target application %s - Unlock ring bottom offset - Unlock ring right offset + Unlock ring vertical offset + Unlock ring horizontal offset Enable brightness control diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 13c5910fed..1dba4b6f63 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -42,20 +42,20 @@ android:summary="@string/app_picker_none" /> Date: Fri, 27 Sep 2013 15:20:24 +0200 Subject: [PATCH 223/710] Make transparency sliders accept 1% step --- res/xml/gravitybox.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 1dba4b6f63..3d1370ff22 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -257,7 +257,7 @@ android:title="@string/pref_tm_statusbar_launcher_title" minimum="0" maximum="100" - interval="5" + interval="1" monitorBoxEnabled="true" monitorBoxUnit="%" /> @@ -266,7 +266,7 @@ android:title="@string/pref_tm_statusbar_lockscreen_title" minimum="0" maximum="100" - interval="5" + interval="1" monitorBoxEnabled="true" monitorBoxUnit="%" /> @@ -463,7 +463,7 @@ android:title="@string/pref_tm_navbar_launcher_title" minimum="0" maximum="100" - interval="5" + interval="1" monitorBoxEnabled="true" monitorBoxUnit="%" /> @@ -472,7 +472,7 @@ android:title="@string/pref_tm_navbar_lockscreen_title" minimum="0" maximum="100" - interval="5" + interval="1" monitorBoxEnabled="true" monitorBoxUnit="%" /> From c4932d353f030596d95c5cc874d6eba06dd7b75f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 18:19:58 +0200 Subject: [PATCH 224/710] Final fix for GPS Tile --- src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java index 353de2eabf..82fa36f113 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java @@ -17,6 +17,7 @@ public class GpsTile extends AQuickSettingsTile { private static final String TAG = "GB:GpsTile"; private static final boolean DEBUG = false; + public static final String GPS_ENABLED_CHANGE_ACTION = "android.location.GPS_ENABLED_CHANGE"; public static final String GPS_FIX_CHANGE_ACTION = "android.location.GPS_FIX_CHANGE"; public static final String EXTRA_GPS_ENABLED = "enabled"; @@ -32,16 +33,20 @@ private static void log(String message) { @Override public void onReceive(Context context, Intent intent) { + if (DEBUG) log("Broadcast received: " + intent.toString()); final String action = intent.getAction(); + if (action.equals(LocationManager.PROVIDERS_CHANGED_ACTION)) { mGpsEnabled = Settings.Secure.isLocationProviderEnabled( mContext.getContentResolver(), LocationManager.GPS_PROVIDER); mGpsFixed = false; } else if (action.equals(GPS_FIX_CHANGE_ACTION)) { mGpsFixed = intent.getBooleanExtra(EXTRA_GPS_ENABLED, false); + } else if (action.equals(GPS_ENABLED_CHANGE_ACTION)) { + mGpsFixed = false; } - if (DEBUG) log("Broadcast received: mGpsEnabled = " + mGpsEnabled + - "; mGpsFixed = " + mGpsFixed); + + if (DEBUG) log("mGpsEnabled = " + mGpsEnabled + "; mGpsFixed = " + mGpsFixed); updateResources(); } }; @@ -83,6 +88,7 @@ protected void onTileCreate() { protected void onTilePostCreate() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION); + intentFilter.addAction(GPS_ENABLED_CHANGE_ACTION); intentFilter.addAction(GPS_FIX_CHANGE_ACTION); mContext.registerReceiver(mLocationManagerReceiver, intentFilter); From 06a6b9af3be43716079527e79f156c40b5954b0d Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Fri, 27 Sep 2013 17:37:27 +0100 Subject: [PATCH 225/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index be11c02d65..8223e9b467 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -534,8 +534,8 @@ Ativar alvos do anel de desbloqueio Permite definir até cinco aplicações como alvo no anel de desbloqueio Aplicação %s - Desvio do anel em relação à margem inferior - Desvio do anel em relação à margem direita + Desvio vertical do anel de desbloqueio + Desvio horizontal do anel de desbloqueio Ativar controlo de brilho From b3d600ea093c188da9367f1849181e62f596fe59 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 18:50:12 +0200 Subject: [PATCH 226/710] AppPickerPreference: loading app icons using AsyncTask was more expensive than simply loading them on demand from package manager. --- .../gravitybox/preference/AppIconLoader.java | 76 ---------------- .../preference/AppPickerPreference.java | 86 +++++++++---------- 2 files changed, 42 insertions(+), 120 deletions(-) delete mode 100644 src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java diff --git a/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java b/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java deleted file mode 100644 index 7aae5f8293..0000000000 --- a/src/com/ceco/gm2/gravitybox/preference/AppIconLoader.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.ceco.gm2.gravitybox.preference; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.graphics.Bitmap; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.os.AsyncTask; -import android.util.LruCache; -import android.util.TypedValue; - -public class AppIconLoader extends AsyncTask { - - private Context mContext; - private int mSizePx; - private AppIconLoaderListener mListener; - private static LruCache sAppIconCache; - - static { - final int cacheSize = Math.min((int)Runtime.getRuntime().maxMemory() / 6, 4194304); - sAppIconCache = new LruCache(cacheSize) { - @Override - protected int sizeOf(String key, BitmapDrawable d) { - return d.getBitmap().getByteCount(); - } - }; - } - - public interface AppIconLoaderListener { - String getCachedIconKey(); - void onAppIconLoaded(Drawable icon); - } - - public AppIconLoader(Context context, int size, AppIconLoaderListener listener) { - mContext = context; - if (mContext == null) { - throw new IllegalArgumentException("GravityBox AppIconLoader: context cannot be null"); - } - - mSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, size, - mContext.getResources().getDisplayMetrics()); - - mListener = listener; - if (mListener == null) { - throw new IllegalArgumentException("GravityBox AppIconLoader: listener cannot be null"); - } - } - - public static Drawable getCachedIcon(String key) { - return (key == null) ? null : sAppIconCache.get(key); - } - - @Override - protected BitmapDrawable doInBackground(ResolveInfo... params) { - if (params[0] == null) return null; - - try { - PackageManager pm = mContext.getPackageManager(); - Bitmap bitmap = ((BitmapDrawable)params[0].loadIcon(pm)).getBitmap(); - bitmap = Bitmap.createScaledBitmap(bitmap, mSizePx, mSizePx, true); - BitmapDrawable appIcon = new BitmapDrawable(mContext.getResources(), bitmap); - bitmap = null; - return appIcon; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - @Override - protected void onPostExecute(BitmapDrawable icon) { - sAppIconCache.put(mListener.getCachedIconKey(), icon); - mListener.onAppIconLoaded(icon); - } -} diff --git a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java index e3faaf7f7e..0924a742b8 100644 --- a/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java +++ b/src/com/ceco/gm2/gravitybox/preference/AppPickerPreference.java @@ -16,13 +16,18 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.preference.DialogPreference; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; +import android.util.LruCache; +import android.util.TypedValue; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -40,18 +45,30 @@ public class AppPickerPreference extends DialogPreference implements OnItemClick private ProgressBar mProgressBar; private AsyncTask mAsyncTask; private String mDefaultSummaryText; - - private enum AppIconLoadingState { - NOT_LOADED, - LOADING, - LOADED + private int mAppIconSizePx; + private PackageManager mPackageManager; + private Resources mResources; + + private static LruCache sAppIconCache; + static { + final int cacheSize = Math.min((int)Runtime.getRuntime().maxMemory() / 6, 4194304); + sAppIconCache = new LruCache(cacheSize) { + @Override + protected int sizeOf(String key, BitmapDrawable d) { + return d.getBitmap().getByteCount(); + } + }; } public AppPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; + mResources = mContext.getResources(); mDefaultSummaryText = (String) getSummary(); + mAppIconSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, + mResources.getDisplayMetrics()); + mPackageManager = mContext.getPackageManager(); setDialogLayoutResource(R.layout.app_picker_preference); setPositiveButtonText(null); @@ -129,26 +146,25 @@ protected void onPreExecute() @Override protected Void doInBackground(Void... arg0) { - PackageManager pm = mContext.getPackageManager(); List appList = new ArrayList(); - List packages = pm.getInstalledPackages(0); + List packages = mPackageManager.getInstalledPackages(0); Intent mainIntent = new Intent(Intent.ACTION_MAIN); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); for(PackageInfo pi : packages) { if (this.isCancelled()) break; mainIntent.setPackage(pi.packageName); - List activityList = pm.queryIntentActivities(mainIntent, 0); + List activityList = mPackageManager.queryIntentActivities(mainIntent, 0); for(ResolveInfo ri : activityList) { appList.add(ri); } } - Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm)); + Collections.sort(appList, new ResolveInfo.DisplayNameComparator(mPackageManager)); mListData.add(new AppItem(mContext.getString(R.string.app_picker_none), null)); for (ResolveInfo ri : appList) { if (this.isCancelled()) break; - String appName = ri.loadLabel(pm).toString(); + String appName = ri.loadLabel(mPackageManager).toString(); AppItem ai = new AppItem(appName, ri); mListData.add(ai); } @@ -183,24 +199,22 @@ private String getAppNameFromValue(String value) { if (value == null) return null; try { - PackageManager pm = mContext.getPackageManager(); String[] splitValue = value.split(SEPARATOR); ComponentName cn = new ComponentName(splitValue[0], splitValue[1]); - ActivityInfo ai = pm.getActivityInfo(cn, 0); - return (ai.loadLabel(pm).toString()); + ActivityInfo ai = mPackageManager.getActivityInfo(cn, 0); + return (ai.loadLabel(mPackageManager).toString()); } catch (Exception e) { e.printStackTrace(); return null; } } - class AppItem implements IIconListAdapterItem, AppIconLoader.AppIconLoaderListener { + class AppItem implements IIconListAdapterItem { private String mPackageName; private String mClassName; private String mAppName; - private Drawable mAppIcon; + private BitmapDrawable mAppIcon; private ResolveInfo mResolveInfo; - private AppIconLoadingState mIconLoadingState; public AppItem(String appName, ResolveInfo ri) { mAppName = appName; @@ -209,7 +223,6 @@ public AppItem(String appName, ResolveInfo ri) { mPackageName = mResolveInfo.activityInfo.packageName; mClassName = mResolveInfo.activityInfo.name; } - mIconLoadingState = AppIconLoadingState.NOT_LOADED; } public String getPackageName() { @@ -242,39 +255,24 @@ public String getSubText() { @Override public Drawable getIconLeft() { - if (mIconLoadingState == AppIconLoadingState.LOADED) return mAppIcon; - if (mIconLoadingState == AppIconLoadingState.LOADING - || mResolveInfo == null) return null; - - mAppIcon = AppIconLoader.getCachedIcon(getCachedIconKey()); - if (mAppIcon != null) { - mIconLoadingState = AppIconLoadingState.LOADED; - return mAppIcon; - } else { - mIconLoadingState = AppIconLoadingState.LOADING; - AppIconLoader iconLoader = new AppIconLoader(mContext, 40, this); - iconLoader.execute(mResolveInfo); - return null; + if (mResolveInfo == null) return null; + + if (mAppIcon == null) { + final String key = getValue(); + mAppIcon = sAppIconCache.get(key); + if (mAppIcon == null) { + Bitmap bitmap = ((BitmapDrawable)mResolveInfo.loadIcon(mPackageManager)).getBitmap(); + bitmap = Bitmap.createScaledBitmap(bitmap, mAppIconSizePx, mAppIconSizePx, false); + mAppIcon = new BitmapDrawable(mResources, bitmap); + sAppIconCache.put(key, mAppIcon); + } } + return mAppIcon; } @Override public Drawable getIconRight() { return null; } - - @Override - public void onAppIconLoaded(Drawable icon) { - mIconLoadingState = AppIconLoadingState.LOADED; - mAppIcon = icon; - if (mListView.getAdapter() != null) { - ((IconListAdapter)mListView.getAdapter()).notifyDataSetChanged(); - } - } - - @Override - public String getCachedIconKey() { - return getValue(); - } } } From 40df4f7aa2fd422765eebfe792376798720a60cf Mon Sep 17 00:00:00 2001 From: ch-vox Date: Fri, 27 Sep 2013 19:41:07 +0200 Subject: [PATCH 227/710] Updated French translation 2.5.5 #2 --- res/values-fr/strings.xml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 2056b0cff9..e857e82666 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -520,9 +520,10 @@ Activer la barre de navigation Redémarrage nécessaire Hauteur barre de navigation - Valable pour l\'orientation portrait + 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 l\'orientation paysage + Valable pour la barre de navigation verticale Toujours afficher la touche menu @@ -533,7 +534,8 @@ 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 inférieure anneau de déverrouillage + Marge verticale anneau de déverrouillage + Marge horizontale anneau de déverrouillage Activer le contrôle de la luminosité @@ -587,4 +589,8 @@ 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 + From 9f9c907fa59653a1a4fabb1932ca269934608a15 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 27 Sep 2013 21:28:56 +0200 Subject: [PATCH 228/710] Removed unneeded resource --- .../stat_sys_gemini_signal_searching.png | Bin 772 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 res/drawable-xhdpi/stat_sys_gemini_signal_searching.png 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 ef529d376a2d409a5d1277386f2b2a3a206ac5b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^>Oic*!3-pAUtV6xz`&>w;1lBd|Nnm%askjNWUbE5 z&c?>ZKtXkNb$xw(8yg#-thu?lsj2C@b?e@~eQRlHX>D!o;NbB2^XCsAKFpajXa4;8 z_V)H0H*Qo?QqtDe*3!~4F){h}?c4V4+x7JH)YR0vy1IY{YHDf%jRGFDSf85se^t*oq8tXKi`$b<|b8>P5nqzBg3*-Wg1+sw*Ao=j&Lo+iopxc04Lqo$;r%s(ee;&yG>(6QrlujrK z@(X5QFfe}m;lJf)PN#%#nI1p=ctTtm!vA8+O{!D6QR^<;$&)bWxPhKIw}iQQ!v5Wr^A(>l9@Et+ zYJ7Zbr>b3l;b|L|zBOyOnj#dG?@IAEDqpG!oYvjt;O6iDGI=S}({l=MI+Er`i%)O6yt`;++&aZK9k+LG{Bqmcal`MB^WPmTFPG>n z{`29)y|R_CA7_n)%A?a^MzdF06< QU{o=9y85}Sb4q9e0P-PVPXGV_ From 5463a5c5f0a4790a63d401c02d8e1d3d1fd344f4 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 00:05:25 +0200 Subject: [PATCH 229/710] Make wifi tile active in airplane mode (MTK) --- src/com/ceco/gm2/gravitybox/ModMtkToolbar.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java b/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java index 97d2392667..82c259d14f 100644 --- a/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java +++ b/src/com/ceco/gm2/gravitybox/ModMtkToolbar.java @@ -7,6 +7,7 @@ import android.content.Context; import android.content.res.Resources; 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; @@ -18,6 +19,8 @@ public class ModMtkToolbar { private static final String CLASS_MOBILE_STATE_TRACKER = "com.android.systemui.statusbar.toolbar.QuickSettingsConnectionModel$MobileStateTracker"; + private static final String CLASS_WIFI_STATE_TRACKER = + "com.android.systemui.statusbar.toolbar.QuickSettingsConnectionModel$WifiStateTracker"; private static List mSlow2gStrings = new ArrayList(Arrays.asList( "gemini_3g_disable_warning", @@ -34,6 +37,8 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL try { final Class mobileStateTrackerClass = XposedHelpers.findClass(CLASS_MOBILE_STATE_TRACKER, classLoader); + final Class wifiStateTrackerClass = + XposedHelpers.findClass(CLASS_WIFI_STATE_TRACKER, classLoader); XposedHelpers.findAndHookMethod(mobileStateTrackerClass, "dataSwitchConfirmDlgMsg", long.class, new XC_MethodHook() { @@ -59,6 +64,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); + + XposedHelpers.findAndHookMethod(wifiStateTrackerClass, "isClickable", + XC_MethodReplacement.returnConstant(true)); + } catch (Throwable t) { XposedBridge.log(t); } From 7b2a4c9b2cb8056c2bbfa18faa6746c245cc2934 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 28 Sep 2013 00:18:19 +0100 Subject: [PATCH 230/710] Reorganized lockscreen tweaks category - "Lockscreen targets" renamed to "Unlock ring settings" because already contained more than just the setup of custom targets - Vertical and horizontal offset can now be adjusted even if custom targets are not enabled --- res/values-cs/strings.xml | 14 +++---- res/values-es/strings.xml | 12 +++--- res/values-fr/strings.xml | 14 +++---- res/values-in/strings.xml | 12 +++--- res/values-it/strings.xml | 12 +++--- res/values-pl/strings.xml | 10 ++--- res/values-pt-rPT/strings.xml | 14 +++---- res/values-ru/strings.xml | 12 +++--- res/values-sk/strings.xml | 14 +++---- res/values-zh-rTW/strings.xml | 12 +++--- res/values/strings.xml | 14 +++---- res/xml/gravitybox.xml | 38 +++++++++---------- .../gm2/gravitybox/GravityBoxSettings.java | 28 +++++++------- .../ceco/gm2/gravitybox/ModLockscreen.java | 9 +++-- 14 files changed, 108 insertions(+), 107 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 28d77fb102..05a982bbdd 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -526,13 +526,13 @@ Screenshot v menu napájení - - Zkratky obrazovky uzamčení - Povolit zkratky - Hlavní vypínač pro zkratky obrazovky uzamčení - Aplikace pro zkratku %s - Vertikální ofset prstence - Horizontální ofset prstence + + Zkratky obrazovky uzamčení + 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 diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 35135ec7d9..2f3b517dfa 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -528,12 +528,12 @@ 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 + + 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 diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index e857e82666..657a03a26c 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -529,13 +529,13 @@ 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 + + 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é diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 2b7e45a004..76fd7021a6 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -527,12 +527,12 @@ Screenshot di menu power - - Target Lockscreen - Hidupkan target lockscreen - Hidupkan pengaturan target lockscreen - Aplikasi target %s - Jarak bawah cincin unlock + + Target Lockscreen + Hidupkan target lockscreen + Hidupkan pengaturan target lockscreen + Aplikasi target %s + Jarak bawah cincin unlock Hidupkan kontrol kecerahan diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 4a2e792ce5..9f401ef896 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -515,12 +515,12 @@ Abilita Fotografa schermo nel menu apegnimento - - Applicazioni in Lockscreen - Abilita app in lockscreen - Attivazione Applicazioni in Lockscreen - Applicazione %s - Scostamento dell\'anello di sblocco, margine inferiore + + Applicazioni in Lockscreen + Abilita app in lockscreen + Attivazione Applicazioni in Lockscreen + Applicazione %s + Scostamento dell\'anello di sblocco, margine inferiore Abilita controllo luminosità diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 1c9ec0b120..30a7c51bb6 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -343,11 +343,11 @@ Dotyczy orientacji poziomej Zawsze pokazuj klawisz menu Zrzut ekranu w menu zasilania - Cele Ekranu Blokady - Włącz Cele Ekranu blokady - Główny wyłącznik Celów Ekranu Blokady - Aplikacja docelowa %s - Przesunięcie pierścienia odblokowania + Cele Ekranu Blokady + Włącz Cele Ekranu blokady + Główny wyłącznik Celów Ekranu Blokady + Aplikacja docelowa %s + Przesunięcie pierścienia odblokowania Włącz kontrolę jasności Regulacja jasności przy przesuwaniu palcem na pasku stanu Telefon diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 8223e9b467..b2e34e4ad7 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -529,13 +529,13 @@ Captura de ecrã no Menu Desligar - - Alvos 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 + + 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 diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index d495f36cd6..8bbb21d1f0 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -527,12 +527,12 @@ Скриншот в меню выключения - - Цели экрана блокировки - Включить цели экрана блокировки - Общий переключатель целей экрана блокировки - Целевое приложение %s - Нижнее смещение кольца разблокировки + + Цели экрана блокировки + Включить цели экрана блокировки + Общий переключатель целей экрана блокировки + Целевое приложение %s + Нижнее смещение кольца разблокировки Включить контроль яркости diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index a2787afa0a..26a281c61b 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -522,13 +522,13 @@ Screenshot v menu napájania - - Skratky obrazovky uzamknutia - Povoliť skratky - Hlavný vypínač pre skratky obrazovky uzamknutia - Aplikácia pre skratku %s - Vertikálny ofset prstenca - Horizontálny ofset prstenca + + Skratky obrazovky uzamknutia + 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 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 186f643629..ef0ef8fd1f 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -524,12 +524,12 @@ 電源選單顯示螢幕截圖 - - 螢幕鎖定目標 - 啟用螢幕鎖定目標 - 鎖定螢幕滑動主滑動 - 目標應用程式 %s - 解鎖環底部偏移 + + 螢幕鎖定目標 + 啟用螢幕鎖定目標 + 鎖定螢幕滑動主滑動 + 目標應用程式 %s + 解鎖環底部偏移 啟用亮度控制 diff --git a/res/values/strings.xml b/res/values/strings.xml index 04554ae0ef..dfad4fd486 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -529,13 +529,13 @@ Screenshot in power menu - - Lockscreen targets - Enable lockscreen targets - Master switch for lockscreen targets - Target application %s - Unlock ring vertical offset - Unlock ring horizontal offset + + 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 diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index 3d1370ff22..40b334f048 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -7,43 +7,43 @@ android:summary="@string/pref_cat_lockscreen_summary"> + android:key="pref_cat_lockscreen_ring_settings" + android:title="@string/pref_cat_lockscreen_ring_settings_title"> targets = (ArrayList) XposedHelpers.getObjectField( gpView, "mTargetDrawables"); From 7541fb2b58a84ad6e8ca0b1e674a22a352b9abdf Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 07:30:44 +0200 Subject: [PATCH 231/710] Updated SK,CZ translations for Unlock ring settings --- res/values-cs/strings.xml | 2 +- res/values-sk/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 05a982bbdd..8da708bdd0 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -527,7 +527,7 @@ Screenshot v menu napájení - Zkratky obrazovky uzamčení + Nastavení odemykacího prstence Povolit zkratky Hlavní vypínač pro zkratky obrazovky uzamčení Aplikace pro zkratku %s diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 26a281c61b..ced2bef263 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -523,7 +523,7 @@ Screenshot v menu napájania - Skratky obrazovky uzamknutia + Nastavenia odomykacieho prstenca Povoliť skratky Hlavný vypínač pre skratky obrazovky uzamknutia Aplikácia pre skratku %s From 8ece46183d8d3b5a19579d583ea07927ecad9f36 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 08:09:45 +0200 Subject: [PATCH 232/710] Version 2.5.5 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a282c3b4cf..0f6e491f6d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="33" + android:versionName="2.5.5" > Date: Sat, 28 Sep 2013 16:42:28 +0900 Subject: [PATCH 233/710] Translated to Japanese --- res/values-ja/strings.xml | 596 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 596 insertions(+) create mode 100644 res/values-ja/strings.xml diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml new file mode 100644 index 0000000000..1242c19f34 --- /dev/null +++ b/res/values-ja/strings.xml @@ -0,0 +1,596 @@ + + + + GravityBox + + バッテリーアイコンのスタイル + 標準バッテリーアイコン + サークルアイコン + サークル+パーセントアイコン + バッテリーパーセントテキスト + なし + + 音量キーで曲操作 + 画面オフ時に音量キー長押しで曲送り/曲戻しします。 + + バッテリー残量低下警告 + ポップアップ+警告音 + ポップアップのみ + 警告音のみ + なし + + 変更は再起動後に適用されます。 + + 電波アイコンを自動非表示 + 選択した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 + 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を点滅させないようにします。 + + + 画面設定 + 画面に関連した設定を変更します。 + + + 明るさの最小値 + 明るさの最小値を設定します。手動設定にのみ反映されます。(要再起動) + 設定可能な値: 10 – 80 + + + 自動調整値 + 明るさの自動調整で使用する値を設定します + + 最大ルクス + 明るさ (10 – 255) + 指定した値は不正です。 + 10未満に設定するのはおすすめできません。 + 255より上には設定できません。 + 値は低かったり同じにはできません。 + 最低値が最大値を上回ることはできません。 + 最大値が最低値を下回ることはできません。 + %s の値を設定しました。 + 明るさ設定を保存しました。 + 明るさ設定は保存されませんでした。 + + + ロック画面での回転を有効化 + 警告: AOSPロック画面がキャリアにより改変されている場合ロックをスキップできてしまう可能性があります。 + + + メニューキーを有効化 + ロック画面でメニューキーを押すとロックを解除するようにします。(要再起動) + + + メッセージの画面点灯を修正 + メッセージは届いたときに画面がオンになるのを防ぎます。(要再起動) + + + 時計の中央化 + + + メディア設定 + メディアやオーディオに関連した設定を変更します。 + + + 音量の段階数を増やす + 音量の段階数を増やします。(要再起動) + + + 安全な音量 + ヘッドフォンでの音量制限を有効/無効化します。 + + + 充電中LEDを無効化 + 充電中のLED点灯を無効化します。 + + + ハードキーアクション + ハードキーのアクションを変更します。 + メニューキー長押し + メニューキーダブルタップ + 戻るキー長押し + 標準 + 検索 + 音声検索 + 前のアプリに切り替え + 前面アプリを終了 + スリープ + アプリ終了の長押し時間 + 前面アプリの終了をするまでにどれぐらいキーを押しっぱなしにするか設定します。 + ダブルタップ速度 + メニューキーダブルタップでどれぐらいの速度のタップを認識するか設定します。 + アプリを終了しました。 + 終了するアプリがありません。 + 前のアプリはありません。 + + + 電話設定 + 電話に関連した設定を変更します。 + + + 着信時の裏返しアクション + 着信中に端末を裏返したときのアクションを設定します。 + 何もしない + 着信音を無音化 + 拒否 + + + 着信時のバイブを無効化 + 着信したときのバイブを無効化します。 + + + ソフトリブート + + + 黒一色の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) + + + GPS通知の無効化 + + + 画面の向きの自由化 + + + 標準タイルアクションを上書き + 選択したタイルのタッチ/長押しアクションを変更します。(要再起動) + + + ネットワークモードタイルのSIMスロット + ネットワークモードタイルでどのSIMスロットに対して適用するか設定します。(%s) + SIMスロット1 + SIMスロット2 + + + 無効 + 常時 + 拡張デスクトップオン時 + 拡張デスクトップでナビバー非表示時 + + + 標準バッテリーアイコンのままにする + 他のバッテリーアイコン変更アプリで標準アイコンが変更されたときに使用します。 + + From 22ccb84918fe8080a2e38bbeb7e4d703c65380f1 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 28 Sep 2013 16:16:24 +0100 Subject: [PATCH 234/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index b2e34e4ad7..bf5d0fe4b3 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -563,9 +563,9 @@ Modo do painel Modo de Rede - 2G/2G+3G/3G - 2G/2G+3G - 2G/3G/4G + 2G/2G+3G/3G/(4G) + 2G/2G+3G/(4G) + 2G/3G/(4G) Desativar notificações GPS From 177fce672267e302ac97d19fafb725363376b79f Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 28 Sep 2013 16:18:34 +0100 Subject: [PATCH 235/710] PhoneWrapper: fix init on non-Gemini MTK devices --- src/com/ceco/gm2/gravitybox/PhoneWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/PhoneWrapper.java b/src/com/ceco/gm2/gravitybox/PhoneWrapper.java index 7a58273009..d00f7b744e 100644 --- a/src/com/ceco/gm2/gravitybox/PhoneWrapper.java +++ b/src/com/ceco/gm2/gravitybox/PhoneWrapper.java @@ -76,7 +76,7 @@ public static void initZygote(final XSharedPreferences prefs) { } if (DEBUG) log("mSimSlot = " + mSimSlot); - String methodName = Utils.hasGeminiSupport() ? "makeDefaultPhones" : "makeDefaultPhone"; + String methodName = Utils.isMtkDevice() ? "makeDefaultPhones" : "makeDefaultPhone"; XposedHelpers.findAndHookMethod(mClsPhoneFactory, methodName, Context.class, new XC_MethodHook() { @Override From 00f6b423169393d71520a68690be3625a3592ea4 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 28 Sep 2013 16:37:30 +0100 Subject: [PATCH 236/710] ModMms: fix send message hook on non-Gemini MTK devices --- src/com/ceco/gm2/gravitybox/ModMms.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/ModMms.java b/src/com/ceco/gm2/gravitybox/ModMms.java index 107571084c..9f3b033e0f 100644 --- a/src/com/ceco/gm2/gravitybox/ModMms.java +++ b/src/com/ceco/gm2/gravitybox/ModMms.java @@ -34,7 +34,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL XposedHelpers.findAndHookMethod(composeMsgActivityClass, "onCreate", Bundle.class, activityOnCreateHook); - if (Utils.hasGeminiSupport()) { + if (Utils.isMtkDevice()) { XposedHelpers.findAndHookMethod(workingMessageClass, "send", String.class, int.class, workingMessageSendHook); try { From d17b690404549a018e3dd591e83888a24d6c8c1d Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 28 Sep 2013 16:47:32 +0100 Subject: [PATCH 237/710] ModAudioSettings: quiet logging --- src/com/ceco/gm2/gravitybox/ModAudioSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java index 010993fd33..bda34d775e 100644 --- a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java @@ -31,7 +31,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL try { classVolumizer = XposedHelpers.findClass(CLASS_VOLUMIZER, classLoader); } catch (Throwable t) { - XposedBridge.log("ModAudioSettings: classVolumizer doesn't exist, exiting..."); + if (DEBUG) log("classVolumizer doesn't exist, exiting..."); return; } From 619dcf93e3bb45ddc9db5d0e74259b9b94a10c74 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 21:18:11 +0200 Subject: [PATCH 238/710] Fixed error in JP translations --- res/values-ja/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 1242c19f34..f1afcae85e 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -366,7 +366,7 @@ 起動位置 画面左端 画面下端 - + 画面右端 画面上端 From 02b98f55a14f77c4f0920fb48d50be3ef688bbf1 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 21:23:27 +0200 Subject: [PATCH 239/710] Updated Chinese (Traditional) translations (thanks to Eric850130) --- res/values-zh-rTW/strings.xml | 44 +++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index ef0ef8fd1f..4aaf1b6c61 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -23,8 +23,8 @@ 自動隱藏訊號圖示 自動隱藏訊號圖示時選定的SIM卡插槽,SIM卡未插入, 停用 \"SIM 卡未插入\" 通知 - Auto-hide SIM 卡槽 1 - Auto-hide SIM 卡槽 2 + 自動隱藏 SIM 卡槽 1 + 自動隱藏 SIM 卡槽 2 停用通知 \"SIM 卡未插入\" 通知已停用 @@ -331,7 +331,7 @@ 通知欄背景 預設背景 純色 - 自訂圖案 + 自訂圖片 設定背景顏色 設定直向圖片 設定橫向圖片 @@ -375,7 +375,7 @@ 隱藏海苔條 - 當 Pie Controls 啟用時隱藏海苔條(需要重新啟動) + 當 Pie 控制 啟用時隱藏海苔條(需要重新啟動) 優化 Holo 背景 @@ -383,7 +383,7 @@ 關閉實體按鍵 - 當 Pie Controls 啟用時將會關閉選單鍵、返回鍵與 HOME 鍵功能,但是實體按鍵功能仍可使用(如果您的裝置有實體按鍵) + 當 Pie 控制 啟用時將會關閉選單鍵、返回鍵與 HOME 鍵功能,但是實體按鍵功能仍可使用(如果您的裝置有實體按鍵) 使用 Holo 黑色背景主題 @@ -524,12 +524,12 @@ 電源選單顯示螢幕截圖 - - 螢幕鎖定目標 - 啟用螢幕鎖定目標 - 鎖定螢幕滑動主滑動 - 目標應用程式 %s - 解鎖環底部偏移 + + 螢幕鎖定目標 + 啟用螢幕鎖定目標 + 鎖定螢幕滑動主滑動 + 目標應用程式 %s + 解鎖環底部偏移 啟用亮度控制 @@ -541,7 +541,7 @@ 行動資料 - 去除 unicode + 去除 unicode 字符 正常字符轉換成 unicode 字符。降低整體郵件大小. 保留字符不變 去除非可編碼字符 @@ -566,4 +566,24 @@ 允許所有旋轉 + + 覆蓋預設瓷貼操作 + 覆蓋輕觸/長按以選擇瓷貼的預設操作 (需要重新啟動) + + + 網路模式瓷貼 SIM 卡 卡槽 + 設定當"網路模式"瓷貼已被選用時的 SIM 卡 卡槽 (%s) + SIM 卡 卡槽 1 + SIM 卡 卡槽 2 + + + 從不 + 總是 + 當全螢幕模式開啟時 + 當全螢幕模式隱藏導航欄時 + + + 完整保持預設電池圖示 + 當預設電池圖是被換成第三方電池圖示時使用 + \ No newline at end of file From 89d3c011aee32cbad316a0241d01f4fe9a80f55e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 21:32:18 +0200 Subject: [PATCH 240/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 30a7c51bb6..84ccdcf6e8 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -69,6 +69,7 @@ Wi-Fi Bluetooth GPS + GPS (styl CM) Transmisja danych Tryb sieci Użycie danych @@ -339,6 +340,7 @@ 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 @@ -347,7 +349,8 @@ Włącz Cele Ekranu blokady Główny wyłącznik Celów Ekranu Blokady Aplikacja docelowa %s - Przesunięcie pierścienia odblokowania + 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 @@ -359,12 +362,25 @@ 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 + 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 - 2G/2G+3G + 2G/2G+3G/3G/(LTE) + 2G/2G+3G/(LTE) + 2G/3G/(LTE) Wyłącz powiadomienia GPS 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 From 4d6da0ecd5c7a4b6b2563a3c4f4e939ea8d09f29 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 28 Sep 2013 22:00:39 +0200 Subject: [PATCH 241/710] Sleep Tile: bring up power menu on long-touch --- src/com/ceco/gm2/gravitybox/ModHwKeys.java | 4 ++++ .../gm2/gravitybox/quicksettings/SleepTile.java | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java index c227682399..f5cac2bd66 100644 --- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java +++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java @@ -44,6 +44,7 @@ public class ModHwKeys { 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#"; @@ -133,6 +134,8 @@ public void onReceive(Context context, Intent intent) { XposedHelpers.setIntField(mPhoneWindowManager, "mAllowAllRotations", allowAllRotations ? 1 : 0); } + } else if (action.equals(ACTION_SHOW_POWER_MENU) && mPhoneWindowManager != null) { + XposedHelpers.callMethod(mPhoneWindowManager, "showGlobalActionsDialog"); } } }; @@ -343,6 +346,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { 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); mContext.registerReceiver(mBroadcastReceiver, intentFilter); diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/SleepTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/SleepTile.java index 59b755972b..6a0824af1d 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/SleepTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/SleepTile.java @@ -1,9 +1,11 @@ package com.ceco.gm2.gravitybox.quicksettings; +import com.ceco.gm2.gravitybox.ModHwKeys; import com.ceco.gm2.gravitybox.R; import de.robv.android.xposed.XposedBridge; import android.content.Context; +import android.content.Intent; import android.os.PowerManager; import android.os.SystemClock; import android.view.LayoutInflater; @@ -27,6 +29,17 @@ public void onClick(View v) { } } }; + + mOnLongClick = new View.OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + Intent intent = new Intent(ModHwKeys.ACTION_SHOW_POWER_MENU); + mContext.sendBroadcast(intent); + collapsePanels(); + return true; + } + }; } @Override From 8ef47a1cb91fb3bc985d3c1639c872c71a638026 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 28 Sep 2013 21:44:25 +0100 Subject: [PATCH 242/710] Fix Japanese and Chinese (Traditional) translations --- res/values-ja/strings.xml | 16 ++++++++-------- res/values-zh-rTW/strings.xml | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index f1afcae85e..686b5f2b81 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -529,14 +529,14 @@ 電源メニューにスクリーンショットを追加 - - ロック画面ターゲット - ロック画面ターゲットを有効化 - ロック画面設定を有効化します。 - ターゲットアプリ %s - ロック解除リングの縦のオフセット - ロック解除リングの横のオフセット - + + ロック画面ターゲット + ロック画面ターゲットを有効化 + ロック画面設定を有効化します。 + ターゲットアプリ %s + ロック解除リングの縦のオフセット + ロック解除リングの横のオフセット + 明るさ操作を有効化 ステータスバー上でスライドして明るさ調整する diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 4aaf1b6c61..a3a39e6897 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -524,13 +524,13 @@ 電源選單顯示螢幕截圖 - - 螢幕鎖定目標 - 啟用螢幕鎖定目標 - 鎖定螢幕滑動主滑動 - 目標應用程式 %s - 解鎖環底部偏移 - + + 螢幕鎖定目標 + 啟用螢幕鎖定目標 + 鎖定螢幕滑動主滑動 + 目標應用程式 %s + 解鎖環底部偏移 + 啟用亮度控制 調整滑動狀態列時的亮度 From 142502d6e6d7263aeaa69e0876244542e7e064a0 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 29 Sep 2013 10:49:11 +0200 Subject: [PATCH 243/710] Added Apache License info to source files --- AndroidManifest.xml | 15 +++++++++++++++ res/layout/app_picker_preference.xml | 15 +++++++++++++++ res/layout/dlgpref_autobrightness.xml | 15 +++++++++++++++ res/layout/quick_settings_app_dialog.xml | 15 +++++++++++++++ .../quick_settings_tile_expanded_desktop.xml | 1 + res/layout/quick_settings_tile_gps.xml | 1 + res/layout/quick_settings_tile_gravity.xml | 1 + .../quick_settings_tile_network_mode.xml | 1 + res/layout/quick_settings_tile_quick_app.xml | 1 + res/layout/quick_settings_tile_quickrecord.xml | 1 + res/layout/quick_settings_tile_ringer_mode.xml | 1 + res/layout/quick_settings_tile_screenshot.xml | 1 + res/layout/quick_settings_tile_sleep.xml | 1 + res/layout/quick_settings_tile_stay_awake.xml | 1 + res/layout/quick_settings_tile_sync.xml | 1 + res/layout/quick_settings_tile_torch.xml | 1 + res/layout/quick_settings_tile_volume.xml | 1 + res/layout/quick_settings_tile_wifi_ap.xml | 1 + res/layout/slider_preference.xml | 15 +++++++++++++++ res/values-v11/styles.xml | 15 +++++++++++++++ res/values-v14/styles.xml | 15 +++++++++++++++ res/values/arrays.xml | 15 +++++++++++++++ res/values/colors.xml | 15 +++++++++++++++ res/values/config.xml | 15 +++++++++++++++ res/values/dimens.xml | 15 +++++++++++++++ res/values/integers.xml | 15 +++++++++++++++ res/values/strings.xml | 15 +++++++++++++++ res/values/styles.xml | 15 +++++++++++++++ res/xml/gravitybox.xml | 15 +++++++++++++++ .../BackgroundAlphaColorDrawable.java | 16 ++++++++++++++++ .../ceco/gm2/gravitybox/CmCircleBattery.java | 2 +- .../gravitybox/ConnectivityServiceWrapper.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/FixCalendar.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/FixCallerIdMms.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/FixCallerIdPhone.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/FixDateTimeCrash.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/FixDevOptions.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/FixMmsWakelock.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/FixTraceFlood.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/FixTtsSettings.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/GravityBox.java | 15 +++++++++++++++ .../gravitybox/GravityBoxResultReceiver.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/GravityBoxService.java | 15 +++++++++++++++ .../gm2/gravitybox/GravityBoxSettings.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModAudio.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModAudioSettings.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModBatteryStyle.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModCallCard.java | 15 +++++++++++++++ .../gm2/gravitybox/ModCellConnService.java | 15 +++++++++++++++ .../gm2/gravitybox/ModClearAllRecents.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModDisplay.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModElectronBeam.java | 15 +++++++++++++++ .../gm2/gravitybox/ModExpandedDesktop.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModHwKeys.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModLockscreen.java | 15 +++++++++++++++ .../gm2/gravitybox/ModLowBatteryWarning.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModMms.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModMtkToolbar.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModNavigationBar.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModPhone.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModPieControls.java | 18 ++++++++++++++++++ src/com/ceco/gm2/gravitybox/ModPowerMenu.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModQuickSettings.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModSettings.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModSignalIconHide.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/ModStatusBar.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModStatusbarColor.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/ModVolKeyCursor.java | 15 +++++++++++++++ .../gm2/gravitybox/ModVolumeKeySkipTrack.java | 16 ++++++++++++++++ .../ceco/gm2/gravitybox/ModVolumePanel.java | 15 +++++++++++++++ .../gm2/gravitybox/NotificationWallpaper.java | 16 ++++++++++++++++ .../ceco/gm2/gravitybox/PatchMasterKey.java | 16 ++++++++++++++++ .../ceco/gm2/gravitybox/PhoneNumberUtils.java | 16 ++++++++++++++++ .../gravitybox/PhoneSensorEventListener.java | 16 ++++++++++++++++ src/com/ceco/gm2/gravitybox/PhoneWrapper.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/RecordingService.java | 15 +++++++++++++++ .../gm2/gravitybox/StatusBarIconManager.java | 15 +++++++++++++++ .../gm2/gravitybox/SystemPropertyProvider.java | 15 +++++++++++++++ .../gm2/gravitybox/SystemWideResources.java | 15 +++++++++++++++ src/com/ceco/gm2/gravitybox/TorchService.java | 15 +++++++++++++++ .../gm2/gravitybox/TransparencyManager.java | 16 ++++++++++++++++ src/com/ceco/gm2/gravitybox/UnicodeFilter.java | 1 + src/com/ceco/gm2/gravitybox/Utils.java | 15 +++++++++++++++ .../gm2/gravitybox/WifiManagerWrapper.java | 15 +++++++++++++++ .../adapters/BaseListAdapterFilter.java | 15 +++++++++++++++ .../gravitybox/adapters/BasicIconListItem.java | 15 +++++++++++++++ .../gm2/gravitybox/adapters/BasicListItem.java | 15 +++++++++++++++ .../adapters/IBaseListAdapterItem.java | 15 +++++++++++++++ .../adapters/IIconListAdapterItem.java | 15 +++++++++++++++ .../gravitybox/adapters/IconListAdapter.java | 15 +++++++++++++++ .../ceco/gm2/gravitybox/pie/PieController.java | 2 +- src/com/ceco/gm2/gravitybox/pie/PieItem.java | 2 +- src/com/ceco/gm2/gravitybox/pie/PieLayout.java | 2 +- .../gm2/gravitybox/pie/PieSliceContainer.java | 2 +- .../ceco/gm2/gravitybox/pie/PieSysInfo.java | 2 +- .../preference/AppPickerPreference.java | 15 +++++++++++++++ .../AutoBrightnessDialogPreference.java | 15 +++++++++++++++ .../preference/SeekBarPreference.java | 15 +++++++++++++++ .../quicksettings/AQuickSettingsTile.java | 15 +++++++++++++++ .../quicksettings/ExpandedDesktopTile.java | 15 +++++++++++++++ .../gm2/gravitybox/quicksettings/GpsTile.java | 15 +++++++++++++++ .../quicksettings/GravityBoxTile.java | 15 +++++++++++++++ .../quicksettings/NetworkModeTile.java | 15 +++++++++++++++ .../gravitybox/quicksettings/QuickAppTile.java | 15 +++++++++++++++ .../quicksettings/QuickRecordTile.java | 15 +++++++++++++++ .../quicksettings/RingerModeTile.java | 15 +++++++++++++++ .../quicksettings/ScreenshotTile.java | 15 +++++++++++++++ .../gravitybox/quicksettings/SleepTile.java | 15 +++++++++++++++ .../quicksettings/StayAwakeTile.java | 15 +++++++++++++++ .../gm2/gravitybox/quicksettings/SyncTile.java | 15 +++++++++++++++ .../gravitybox/quicksettings/TorchTile.java | 15 +++++++++++++++ .../gravitybox/quicksettings/VolumeTile.java | 15 +++++++++++++++ .../gravitybox/quicksettings/WifiApTile.java | 15 +++++++++++++++ 113 files changed, 1411 insertions(+), 6 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0f6e491f6d..62cc7c2ac4 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,4 +1,19 @@ + + + + + + + + + + + diff --git a/res/values/colors.xml b/res/values/colors.xml index 8a2d808ad5..51cddf8fc3 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -1,4 +1,19 @@ + + diff --git a/res/values/config.xml b/res/values/config.xml index ccbc27baf7..a589a9a2fb 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -1,4 +1,19 @@ + + http://forum.xda-developers.com/showthread.php?t=2316070 http://forum.xda-developers.com/showthread.php?t=1574401 diff --git a/res/values/dimens.xml b/res/values/dimens.xml index fb693c50b6..555b5abfc9 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -1,3 +1,18 @@ + + 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 @@ + + 0xff000000 0xff00ff00 diff --git a/res/values/strings.xml b/res/values/strings.xml index dfad4fd486..3a3de484d0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,4 +1,19 @@ + + GravityBox 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 @@ + + + Date: Sun, 29 Sep 2013 19:44:05 +0100 Subject: [PATCH 244/710] Added telephony support check --- src/com/ceco/gm2/gravitybox/Utils.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index aee703c6d7..ddf7b96ab0 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -18,6 +18,7 @@ import de.robv.android.xposed.XposedBridge; import android.content.Context; import android.os.Build; +import android.telephony.TelephonyManager; import android.util.DisplayMetrics; import android.view.WindowManager; import java.util.*; @@ -37,6 +38,7 @@ public class Utils { private static int mDeviceType = -1; private static Boolean mIsMtkDevice = null; private static Boolean mHasGeminiSupport = null; + private static Boolean mHasTelephonySupport = null; private static String mDeviceCharacteristics = null; // Supported MTK devices @@ -107,6 +109,15 @@ public static boolean hasGeminiSupport() { return mHasGeminiSupport; } + public static boolean hasTelephonySupport(Context con) { + // returns false if device has no phone radio (no telephony support) + if (mHasTelephonySupport != null) return mHasTelephonySupport; + + TelephonyManager manager = (TelephonyManager) con.getSystemService(Context.TELEPHONY_SERVICE); + mHasTelephonySupport = (manager.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE); + return mHasTelephonySupport; + } + public static String getDeviceCharacteristics() { if (mDeviceCharacteristics != null) return mDeviceCharacteristics; From d8de70819e7c920a7d6641e57e9fcbe013447b3d Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 29 Sep 2013 19:47:12 +0100 Subject: [PATCH 245/710] Update Phone category according to feature availability --- src/com/ceco/gm2/gravitybox/GravityBoxSettings.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index da373dcffa..f1af3c1a30 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -138,6 +138,7 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece 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_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"; @@ -347,6 +348,7 @@ public class GravityBoxSettings extends Activity implements GravityBoxResultRece 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"; @@ -578,6 +580,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private SeekBarPreference mPrefLockscreenTargetsHorizontalOffset; private CheckBoxPreference mPrefMobileDataSlow2gDisable; private PreferenceCategory mPrefCatPhoneTelephony; + private PreferenceCategory mPrefCatPhoneMessaging; private PreferenceCategory mPrefCatPhoneMobileData; private ListPreference mPrefNetworkModeTileMode; private MultiSelectListPreference mPrefQsTileBehaviourOverride; @@ -725,6 +728,7 @@ public void onCreate(Bundle savedInstanceState) { 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); @@ -735,11 +739,18 @@ public void onCreate(Bundle savedInstanceState) { // Remove Phone specific preferences on Tablet devices if (sSystemProperties.isTablet) { - getPreferenceScreen().removePreference(mPrefCatPhone); mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs); mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown); } + // Update Phone category according to feature availability + if (!Utils.hasTelephonySupport(getActivity())) { + mPrefCatPhone.removePreference(mPrefCatPhoneTelephony); + } + if (!isAppInstalled(APP_MESSAGING)) { + mPrefCatPhone.removePreference(mPrefCatPhoneMessaging); + } + // Remove MTK specific preferences for non-MTK devices if (!Utils.isMtkDevice()) { getPreferenceScreen().removePreference(mPrefCatFixes); From e24e653e0783c9a036dbd956a38ecb9571d1a075 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 30 Sep 2013 08:18:57 +0200 Subject: [PATCH 246/710] Fixed derp in GPS Tile --- src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java index 888598c759..074308c83a 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/GpsTile.java @@ -83,7 +83,7 @@ public void onClick(View v) { @Override public boolean onLongClick(View v) { startActivity(Settings.ACTION_LOCATION_SOURCE_SETTINGS); - return false; + return true; } }; From 4110a461de006b97d80ae7ef5a467ae2c7b6f5af Mon Sep 17 00:00:00 2001 From: ch-vox Date: Mon, 30 Sep 2013 09:32:30 +0200 Subject: [PATCH 247/710] Updated French translation Added Apache License info to French file --- res/values-fr/strings.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 657a03a26c..8dc06f3708 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -1,4 +1,19 @@ + + GravityBox From c2dee461d7cb2bf3c8ed74e8477823e9fb91ce99 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 30 Sep 2013 09:57:58 +0200 Subject: [PATCH 248/710] Updated Indonesian translations (thanks to awaaas) --- res/values-in/strings.xml | 57 ++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 76fd7021a6..00e12540fc 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -1,4 +1,19 @@ + + GravityBox @@ -88,6 +103,7 @@ Wi-Fi Bluetooth GPS + GPS (CM style) Data Paket Mode jaringan Penggunaan Data @@ -519,7 +535,8 @@ Hidupkan navigation bar Membutuhkan reboot Tinggi navigation bar - Berlaku untuk orientasi potret/berdiri + 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 @@ -527,12 +544,13 @@ Screenshot di menu power - - Target Lockscreen - Hidupkan target lockscreen - Hidupkan pengaturan target lockscreen - Aplikasi target %s - Jarak bawah cincin unlock + + Target Lockscreen + Hidupkan target lockscreen + Hidupkan pengaturan target lockscreen + Aplikasi target %s + Jarak bawah cincin unlock + Jarak samping cincin unlock Hidupkan kontrol kecerahan @@ -560,8 +578,9 @@ Mode kotak mode jaringan - 2G/2G+3G/3G - 2G/2G+3G + 2G/2G+3G/3G/(LTE) + 2G/2G+3G/(LTE) + 2G/3G/(LTE) Matikan notifikasi GPS @@ -569,4 +588,24 @@ 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 + From b17f602bfbada7cbde8ee7b6f62b9213181dfbe1 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 30 Sep 2013 11:36:26 +0200 Subject: [PATCH 249/710] Fixed infinite MMS/SMS switching loop when unicode stripping is on and SMS is about to become MMS due to its length --- src/com/ceco/gm2/gravitybox/ModMms.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModMms.java b/src/com/ceco/gm2/gravitybox/ModMms.java index 538a3c901b..860e30f103 100644 --- a/src/com/ceco/gm2/gravitybox/ModMms.java +++ b/src/com/ceco/gm2/gravitybox/ModMms.java @@ -85,15 +85,27 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { XposedHelpers.findAndHookMethod(textEditorWatcher.getClass(), "onTextChanged", CharSequence.class, int.class, int.class, int.class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param2) throws Throwable { + protected void beforeHookedMethod(MethodHookParam param2) throws Throwable { if (param2.thisObject != textEditorWatcher) return; CharSequence s = (CharSequence) param2.args[0]; + XposedHelpers.setAdditionalInstanceField(param.thisObject, "mGbOriginalText", s); if (DEBUG) log ("TextEditorWatcher.onTextChanged: original ='" + s + "'"); s = mUnicodeFilter.filter(s); if (DEBUG) log ("TextEditorWatcher.onTextChanged: stripped ='" + s + "'"); - XposedHelpers.callMethod(param.thisObject, "updateCounter", - s, param2.args[1], param2.args[2], param2.args[3]); + param2.args[0] = s; + } + @Override + protected void afterHookedMethod(MethodHookParam param2) throws Throwable { + if (param2.thisObject != textEditorWatcher) return; + + Object workingMessage = XposedHelpers.getObjectField(param.thisObject, "mWorkingMessage"); + if (workingMessage != null) { + final CharSequence s = (CharSequence) XposedHelpers.getAdditionalInstanceField( + param.thisObject, "mGbOriginalText"); + if (DEBUG) log("Pushing original text to working message: '" + s + "'"); + XposedHelpers.callMethod(workingMessage, "setText", s); + } } }); } From af820a50a0a0dd7efecb9b7f7c734cdca1ae37c5 Mon Sep 17 00:00:00 2001 From: pitone02 Date: Mon, 30 Sep 2013 11:45:34 +0200 Subject: [PATCH 250/710] Update strings.xml Italian translation updated to 2.5.5 --- res/values-it/strings.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 9f401ef896..21642dac01 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -556,6 +556,27 @@ 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 expanded desktop attivo + Se expanded desktop 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 + + From 1a10279e76118965c66eb2ac6da75fca7744a576 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 30 Sep 2013 14:05:05 +0200 Subject: [PATCH 251/710] Option for controlling screen on during plug/unplug of power/usb --- res/values/strings.xml | 4 ++++ res/xml/gravitybox.xml | 5 +++++ .../ceco/gm2/gravitybox/GravityBoxSettings.java | 16 ++++++++++++++-- .../gm2/gravitybox/SystemPropertyProvider.java | 12 +++++++++--- .../ceco/gm2/gravitybox/SystemWideResources.java | 11 ++++++++--- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3a3de484d0..a5dfb27839 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -608,4 +608,8 @@ 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) + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index abc12194ec..a690c777a7 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -641,6 +641,11 @@ android:summary="@string/crt_off_effect_summary" android:defaultValue="false" /> + + classSystemUIService = XposedHelpers.findClass( @@ -62,9 +67,10 @@ public void onReceive(Context context, Intent intent) { Bundle data = new Bundle(); data.putBoolean("hasGeminiSupport", Utils.hasGeminiSupport()); data.putBoolean("isTablet", Utils.isTablet()); - data.putBoolean("hasNavigationBar", res.getBoolean( - res.getIdentifier("config_showNavigationBar", - "bool", "android"))); + data.putBoolean("hasNavigationBar", + getSystemConfigBool(res, "config_showNavigationBar")); + data.putBoolean("unplugTurnsOnScreen", + getSystemConfigBool(res, "config_unplugTurnsOnScreen")); receiver.send(RESULT_SYSTEM_PROPERTIES, data); } } diff --git a/src/com/ceco/gm2/gravitybox/SystemWideResources.java b/src/com/ceco/gm2/gravitybox/SystemWideResources.java index f733feb40c..1cf2d1ee46 100644 --- a/src/com/ceco/gm2/gravitybox/SystemWideResources.java +++ b/src/com/ceco/gm2/gravitybox/SystemWideResources.java @@ -49,10 +49,15 @@ public static void initResources(final XSharedPreferences prefs) { if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_OVERRIDE, false)) { XResources.setSystemWideReplacement("android", "bool", "config_showNavigationBar", - prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_ENABLE, - systemRes.getBoolean(systemRes.getIdentifier( - "config_showNavigationBar", "bool", "android")))); + prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_ENABLE, + SystemPropertyProvider.getSystemConfigBool(systemRes, + "config_showNavigationBar"))); } + + XResources.setSystemWideReplacement("android", "bool", "config_unplugTurnsOnScreen", + prefs.getBoolean(GravityBoxSettings.PREF_KEY_UNPLUG_TURNS_ON_SCREEN, + SystemPropertyProvider.getSystemConfigBool(systemRes, + "config_unplugTurnsOnScreen"))); } catch (Throwable t) { XposedBridge.log(t); } From 5f929545ca202ed73f334ff4494f07f13b03ffa7 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Mon, 30 Sep 2013 14:27:41 +0200 Subject: [PATCH 252/710] Option for muting volume adjust sound --- res/values/strings.xml | 4 ++++ res/xml/gravitybox.xml | 6 +++++ .../gm2/gravitybox/GravityBoxSettings.java | 5 ++++ .../ceco/gm2/gravitybox/ModVolumePanel.java | 23 +++++++++++++++++-- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index a5dfb27839..5638a45fe6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -612,4 +612,8 @@ 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/xml/gravitybox.xml b/res/xml/gravitybox.xml index a690c777a7..cf19cfae5a 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -779,6 +779,12 @@ android:summary="@string/pref_link_volumes_summary" android:defaultValue="true" /> + + classAudioService = XposedHelpers.findClass(CLASS_AUDIO_SERVICE, classLoader); final Class classViewGroup = XposedHelpers.findClass(CLASS_VIEW_GROUP, classLoader); + mVolumeAdjustMuted = prefs.getBoolean(GravityBoxSettings.PREF_KEY_VOLUME_ADJUST_MUTE, false); + XposedBridge.hookAllConstructors(classVolumePanel, new XC_MethodHook() { @Override @@ -176,6 +185,16 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } }); + XposedHelpers.findAndHookMethod(classVolumePanel, "onPlaySound", + int.class, int.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(final MethodHookParam param) throws Throwable { + if (mVolumeAdjustMuted) { + param.setResult(null); + } + } + }); + XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() { @Override From 59c5a7cbc1c505c10b1ea81b83ab6e853ac1b0f0 Mon Sep 17 00:00:00 2001 From: Noumi Ryoko Date: Mon, 30 Sep 2013 22:16:16 +0900 Subject: [PATCH 253/710] Updated Japanese Translation --- res/values-ja/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 686b5f2b81..2cb488611e 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -593,4 +593,11 @@ 標準バッテリーアイコンのままにする 他のバッテリーアイコン変更アプリで標準アイコンが変更されたときに使用します。 + + 接続解除で画面をオンにする + 有効にすると電源に接続/接続解除したときに自動的に画面をオンにするようにします。(要再起動) + + + 音量変更時の効果音を無音化 + 音量キーで音量を変更したときの効果音を再生しないようにします。 From 098bb17d13916fd86e8ddb50b0175d0b0d1a0502 Mon Sep 17 00:00:00 2001 From: pitone02 Date: Mon, 30 Sep 2013 18:19:46 +0200 Subject: [PATCH 254/710] Update strings.xml Italian translation adjustment --- res/values-it/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 21642dac01..41e3f2e08e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -516,15 +516,15 @@ Abilita Fotografa schermo nel menu apegnimento - Applicazioni in Lockscreen - Abilita app in lockscreen - Attivazione Applicazioni in Lockscreen + 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à - Adjusts brightness by sliding over statusbar + Modifica luminosità scorrendo sopra la barra di stato Telefonate @@ -546,7 +546,7 @@ 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 nel relativo tile dei quicksetting + Modalità attivazione reti nella relativa icona dei quicksetting 2G/2G+3G/3G 2G/2G+3G From 523ac34c03e69888dbed2bb2bb9f1e72dacf5e5f Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Mon, 30 Sep 2013 18:33:37 +0100 Subject: [PATCH 255/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index bf5d0fe4b3..b41a98518e 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -11,7 +11,7 @@ Nenhum Mudar de faixa utilizando teclas de volume - As teclas de volume mudam de faixa após manter a respectiva tecla pressionada com o ecrã desligado + As teclas de volume mudam de faixa após manter a respectiva tecla pressionada com o ecrã apagado Aviso de bateria fraca Aviso visual e sonoro @@ -593,4 +593,12 @@ 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 + From b031ec191ef8758117c947d00d823f714161c469 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Mon, 30 Sep 2013 20:21:49 +0200 Subject: [PATCH 256/710] Updated French translation --- res/values-fr/strings.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 8dc06f3708..fa6063fc19 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -608,4 +608,12 @@ 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\'activer 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 + From db9e6bbda6f7d5e989f027e572f2f9fc535b920d Mon Sep 17 00:00:00 2001 From: spacecaker Date: Mon, 30 Sep 2013 21:50:01 +0200 Subject: [PATCH 257/710] First part NL translations --- res/values-nl/strings.xml | 620 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 620 insertions(+) create mode 100644 res/values-nl/strings.xml diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml new file mode 100644 index 0000000000..61f5821675 --- /dev/null +++ b/res/values-nl/strings.xml @@ -0,0 +1,620 @@ + + + + + + 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. + + + Your %s will reboot. + Your %s will reboot into recovery. + Your %s will reboot into bootloader. + + + CRT screen off effect + Enables animation that simulates old CRT off effect when turning off the screen + + + Engineering mode + Launches Engineering mode application + + + Dual SIM Ringer + Launches application that allows to set ringtone and notification sounds separately for each SIM + + + Lockscreen tweaks + Contains various lockscreen tweaks + Lockscreen background + Background style + Default wallpaper + Color fill + Custom image + Set custom color + Allows to set custom background color for lockscreen + Set custom image + Allows to set custom background image for lockscreen + Background changed + Background not changed + Other + 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) + Value from interval: 10 – 80 + + + Autobrightness levels + Allows to set ambient light levels and corresponding LCD backlight values + Level + Lux max + Brightness (10 – 255) + Specified number is not valid + It is not recommended to set brightness below 10 + 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 + Application 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 + Show search button + 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) + + + Disable GPS notifications + + + 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 + + From 6f2a0ebb8682da4ac36d409bc3ea29be7b86d02e Mon Sep 17 00:00:00 2001 From: spacecaker Date: Mon, 30 Sep 2013 21:55:46 +0200 Subject: [PATCH 258/710] some more translations --- res/values-nl/strings.xml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 61f5821675..a41928ad5d 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -157,37 +157,37 @@ 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. + Uw %s wilt herstarten. + Uw %s wilt herstarten in recovery. + Uw %s wilt herstarten in bootloader. - CRT screen off effect - Enables animation that simulates old CRT off effect when turning off the screen + CRT scherm uit effect + Stelt animatie die oude CRT simuleert off effect bij het uitzetten van het scherm - Engineering mode - Launches Engineering mode application + Ingenieurs modus + Lanceert ingenieurs modus applicatie Dual SIM Ringer Launches application that allows to set ringtone and notification sounds separately for each SIM - Lockscreen tweaks - Contains various lockscreen tweaks - Lockscreen background - Background style - Default wallpaper - Color fill - Custom image + 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 - Background changed - Background not changed - Other + Achtergrond veranderd + Achtergrond niet veranderd + Andere Maximize widgets When enabled, lockscreen widgets will be maximized by default From 9d0a58c7b2430811d2073ff9c7cec81b5d5db20d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 07:28:49 +0200 Subject: [PATCH 259/710] Fixed status bar brightness control for Android 4.1 --- src/com/ceco/gm2/gravitybox/ModStatusBar.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/ModStatusBar.java b/src/com/ceco/gm2/gravitybox/ModStatusBar.java index 37edc01759..264a02bc18 100644 --- a/src/com/ceco/gm2/gravitybox/ModStatusBar.java +++ b/src/com/ceco/gm2/gravitybox/ModStatusBar.java @@ -624,8 +624,9 @@ private static void adjustBrightness(int x) { classSm, "getService", Context.POWER_SERVICE); Object power = XposedHelpers.callStaticMethod(classIpm, "asInterface", b); if (power != null) { - XposedHelpers.callMethod(power, "setTemporaryScreenBrightnessSettingOverride", - newBrightness); + final String bcMethod = Build.VERSION.SDK_INT > 16 ? + "setTemporaryScreenBrightnessSettingOverride" : "setBacklightBrightness"; + XposedHelpers.callMethod(power, bcMethod, newBrightness); Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, newBrightness); } @@ -640,8 +641,9 @@ private static void brightnessControl(MotionEvent event) { final int x = (int) event.getRawX(); final int y = (int) event.getRawY(); Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneStatusBar, "mHandler"); - int notificationHeaderHeight = - XposedHelpers.getIntField(mPhoneStatusBar, "mNotificationHeaderHeight"); + int notificationHeaderHeight = Build.VERSION.SDK_INT > 16 ? + XposedHelpers.getIntField(mPhoneStatusBar, "mNotificationHeaderHeight") : + XposedHelpers.getIntField(mPhoneStatusBar, "mNotificationPanelMinHeight"); if (action == MotionEvent.ACTION_DOWN) { mLinger = 0; From 7986998202d514b84c426c6f917211a1213f7e6d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 07:30:20 +0200 Subject: [PATCH 260/710] ModMtkToolbar is relevant only for Android 4.2 --- src/com/ceco/gm2/gravitybox/GravityBox.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java index efcb36678d..a25d595fec 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBox.java +++ b/src/com/ceco/gm2/gravitybox/GravityBox.java @@ -158,7 +158,8 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { ModCellConnService.init(prefs, lpparam.classLoader); } - if (Utils.hasGeminiSupport() + if (Build.VERSION.SDK_INT > 16 + && Utils.hasGeminiSupport() && lpparam.packageName.equals(ModMtkToolbar.PACKAGE_NAME)) { ModMtkToolbar.init(prefs, lpparam.classLoader); } From dd6652c84738c205eb5edfd14faa1853a6a9ad9c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 07:40:45 +0200 Subject: [PATCH 261/710] Added options for Call Vibrations - vibrate on call connected - vibrate on call disconnected - vibrate on call waiting - vibrate every 45th second during outgoing call --- res/values/arrays.xml | 14 + res/values/strings.xml | 11 +- res/xml/gravitybox.xml | 11 +- .../gm2/gravitybox/GravityBoxSettings.java | 6 +- src/com/ceco/gm2/gravitybox/ModPhone.java | 252 ++++++++++++++++-- 5 files changed, 255 insertions(+), 39 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index e0923e314c..ab255f2538 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -500,4 +500,18 @@ 3 + + @string/call_vibration_connected + @string/call_vibration_disconnected + @string/call_vibration_waiting + @string/call_vibration_periodic + + + + connected + disconnected + waiting + periodic + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 5638a45fe6..ab4018ceb3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -285,10 +285,6 @@ Mute ringer Dismiss call - - Disable vibrate on call connect - Disables vibration that is triggered when call is connected - Soft reboot @@ -616,4 +612,11 @@ 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 + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index cf19cfae5a..db85d4d9af 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -690,11 +690,12 @@ android:entryValues="@array/phone_flip_action_values" android:defaultValue="0" /> - + 16 ? "com.android.internal.telephony.PhoneConstants$State" : "com.android.internal.telephony.Phone$State"; + private static final String ENUM_CALL_STATE = "com.android.internal.telephony.Call$State"; private static final String CLASS_ASYNC_RESULT = "android.os.AsyncResult"; private static final String CLASS_CALL_NOTIFIER = "com.android.phone.CallNotifier"; private static final String CLASS_SERVICE_STATE_EXT = "com.mediatek.op.telephony.ServiceStateExt"; private static final String CLASS_GSM_SERVICE_STATE_TRACKER = "com.android.internal.telephony.gsm.GsmServiceStateTracker"; + private static final String CLASS_PHONE_UTILS = "com.android.phone.PhoneUtils"; private static final boolean DEBUG = false; + private static final int VIBRATE_45_SEC = 28; + private static SensorManager mSensorManager; private static boolean mSensorListenerAttached = false; private static int mFlipAction = GravityBoxSettings.PHONE_FLIP_ACTION_NONE; private static Object mInCallScreen; private static Unhook mVibrateHook; + private static Vibrator mVibrator; + private static Handler mCallNotifier; + private static Class mPhoneUtilsClass; + private static XSharedPreferences mPrefsPhone; + private static Set mCallVibrations; private static void log(String message) { XposedBridge.log(TAG + ": " + message); @@ -162,11 +176,16 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } + @SuppressWarnings("unchecked") public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { try { + mPrefsPhone = prefs; + final Class classInCallScreen = XposedHelpers.findClass(CLASS_IN_CALL_SCREEN, classLoader); final Class enumPhoneState = (Class) Class.forName(ENUM_PHONE_STATE); final Class classCallNotifier = XposedHelpers.findClass(CLASS_CALL_NOTIFIER, classLoader); + final Class enumCallState = (Class) Class.forName(ENUM_CALL_STATE); + mPhoneUtilsClass = XposedHelpers.findClass(CLASS_PHONE_UTILS, classLoader); XposedHelpers.findAndHookMethod(classInCallScreen, "onCreate", Bundle.class, new XC_MethodHook() { @@ -193,17 +212,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (XposedHelpers.callMethod(mCM, "getState") == Enum.valueOf(enumPhoneState, "RINGING")) { if (DEBUG) log("PHONE_STATE is RINGING - attaching sensor listener (if not attached yet)"); - - prefs.reload(); - mFlipAction = GravityBoxSettings.PHONE_FLIP_ACTION_NONE; - try { - mFlipAction = Integer.valueOf(prefs.getString( - GravityBoxSettings.PREF_KEY_PHONE_FLIP, "0")); - if (DEBUG) log("mFlipAction = " + mFlipAction); - } catch (NumberFormatException e) { - XposedBridge.log(e); - } - + refreshPhonePrefs(); attachSensorListener(); } else { if (DEBUG) log("PHONE_STATE is NOT RINGING - detaching sensor listener (if is attached)"); @@ -221,33 +230,33 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); + XposedBridge.hookAllConstructors(classCallNotifier, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mCallNotifier = (Handler) param.thisObject; + Object app = XposedHelpers.getObjectField(param.thisObject, "mApplication"); + if (app != null) { + Method m = app.getClass().getMethod("getSystemService", String.class); + mVibrator = (Vibrator) m.invoke(app, "vibrator"); + } + } + }); + XposedHelpers.findAndHookMethod(classCallNotifier, "onPhoneStateChanged", CLASS_ASYNC_RESULT, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (DEBUG ) log("CallNotifier: onPhoneStateChanged ENTERED"); - - prefs.reload(); - if (!prefs.getBoolean( - GravityBoxSettings.PREF_KEY_PHONE_CALL_CONNECT_VIBRATE_DISABLE, false)) { - return; - } - - Object app = XposedHelpers.getObjectField(param.thisObject, "mApplication"); - if (app == null) return; - - Method m = app.getClass().getMethod("getSystemService", String.class); - Vibrator v = (Vibrator) m.invoke(app, "vibrator"); - if (v == null) return; + refreshPhonePrefs(); + if (mVibrator == null) return; + if (DEBUG ) log("CallNotifier: onPhoneStateChanged ENTERED"); mVibrateHook = XposedHelpers.findAndHookMethod( - v.getClass(), "vibrate", long.class, new XC_MethodHook() { - + mVibrator.getClass(), "vibrate", long.class, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void beforeHookedMethod(MethodHookParam param2) throws Throwable { if (DEBUG) log("Vibrator: vibrate called from CallNotifier - ignoring"); - param.setResult(null); + param2.setResult(null); } }); if (DEBUG) log("CallNotifier: Vibrator.vibrate() method hooked"); @@ -261,11 +270,196 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mVibrateHook = null; } + if (!mCallVibrations.contains(GravityBoxSettings.CV_CONNECTED) + && !mCallVibrations.contains(GravityBoxSettings.CV_PERIODIC)) { + return; + } + + final Object cm = XposedHelpers.getObjectField(param.thisObject, "mCM"); + final Object state = XposedHelpers.callMethod(cm, "getState"); + + if (state == Enum.valueOf(enumPhoneState, "OFFHOOK")) { + final Object fgPhone = XposedHelpers.callMethod(cm, "getFgPhone"); + final Object call = getCurrentCall(fgPhone); + if (DEBUG) log("getCurrentCall returned: " + call); + final Object conn = getConnection(fgPhone, call); + if (XposedHelpers.callMethod(call, "getState") == + Enum.valueOf(enumCallState, "ACTIVE") && + !(Boolean) XposedHelpers.callMethod(conn, "isIncoming")) { + long callDurationMsec = + (Long) XposedHelpers.callMethod(conn, "getDurationMillis"); + if (mCallVibrations.contains(GravityBoxSettings.CV_CONNECTED) + && callDurationMsec < 200) { + vibrate(100, 0, 0); + if (DEBUG) log("Executed vibrate on call connected"); + } + if (mCallVibrations.contains(GravityBoxSettings.CV_PERIODIC)) { + callDurationMsec = callDurationMsec % 60000; + start45SecondVibration(callDurationMsec); + if (DEBUG) log("Started handler for periodic vibrations"); + } + } + } + if (DEBUG ) log("CallNotifier: onPhoneStateChanged EXITED"); } }); + + XposedHelpers.findAndHookMethod(classCallNotifier, "handleMessage", + Message.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + Message msg = (Message) param.args[0]; + if (msg.what == VIBRATE_45_SEC) { + vibrate(70, 0, 0); + mCallNotifier.sendEmptyMessageDelayed(VIBRATE_45_SEC, 60000); + if (DEBUG) log("Executed vibrate on receiving VIBRATE_45_SEC message"); + } + } + }); + + if (Utils.hasGeminiSupport()) { + XposedHelpers.findAndHookMethod(classCallNotifier, "onDisconnect", + CLASS_ASYNC_RESULT, int.class, onDisconnectHook); + XposedHelpers.findAndHookMethod(classCallNotifier, "onNewRingingConnection", + CLASS_ASYNC_RESULT, int.class, onNewRingingConnectionHook); + } else { + XposedHelpers.findAndHookMethod(classCallNotifier, "onDisconnect", + CLASS_ASYNC_RESULT, onDisconnectHook); + XposedHelpers.findAndHookMethod(classCallNotifier, "onNewRingingConnection", + CLASS_ASYNC_RESULT, onNewRingingConnectionHook); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + + private static XC_MethodHook onDisconnectHook = new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + try { + refreshPhonePrefs(); + Object conn = XposedHelpers.getObjectField(param.args[0], "result"); + if (conn != null) { + long durationMillis = + (Long) XposedHelpers.callMethod(conn, "getDurationMillis"); + if (mCallVibrations.contains(GravityBoxSettings.CV_DISCONNECTED) + && durationMillis > 0) { + vibrate(50, 100, 50); + if (DEBUG) log("Executed vibrate on call disconnected"); + } + mCallNotifier.removeMessages(VIBRATE_45_SEC); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }; + + private static XC_MethodHook onNewRingingConnectionHook = new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + try { + refreshPhonePrefs(); + if (!mCallVibrations.contains(GravityBoxSettings.CV_WAITING)) { + return; + } + + Object conn = XposedHelpers.getObjectField(param.args[0], "result"); + Object ringing = XposedHelpers.callMethod(conn, "getCall"); + Object phone = XposedHelpers.callMethod(ringing, "getPhone"); + Object state = XposedHelpers.callMethod(conn, "getState"); + if (!(Boolean) XposedHelpers.callMethod(param.thisObject, + "ignoreAllIncomingCalls", phone) + && (Boolean) XposedHelpers.callMethod(conn, "isRinging") + && !(Boolean) XposedHelpers.callStaticMethod(mPhoneUtilsClass, + "isRealIncomingCall", state)) { + vibrate(200, 300, 500); + if (DEBUG) log("Executed vibrate on call waiting"); + } + } catch (Throwable t) { + XposedBridge.log(t); + } + } + }; + + private static void vibrate(int v1, int p1, int v2) { + if (mVibrator == null) return; + + long[] pattern = new long[] { 0, v1, p1, v2 }; + mVibrator.vibrate(pattern, -1); + } + + private static Object getCurrentCall(Object phone) { + try { + Object ringing = XposedHelpers.callMethod(phone, "getRingingCall"); + Object fg = XposedHelpers.callMethod(phone, "getForegroundCall"); + Object bg = XposedHelpers.callMethod(phone, "getBackgroundCall"); + if (!(Boolean) XposedHelpers.callMethod(ringing, "isIdle")) { + return ringing; + } + if (!(Boolean) XposedHelpers.callMethod(fg, "isIdle")) { + return fg; + } + if (!(Boolean) XposedHelpers.callMethod(bg, "isIdle")) { + return bg; + } + return fg; } catch (Throwable t) { XposedBridge.log(t); + return null; + } + } + + private static Object getConnection(Object phone, Object call) { + if (call == null) return null; + + try { + if ((Integer)XposedHelpers.callMethod(phone, "getPhoneType") == + TelephonyManager.PHONE_TYPE_CDMA) { + return XposedHelpers.callMethod(call, "getLatestConnection"); + } + return XposedHelpers.callMethod(call, "getEarliestConnection"); + } catch (Throwable t) { + XposedBridge.log(t); + return null; + } + } + + private static void start45SecondVibration(long callDurationMsec) { + if (mCallNotifier == null) return; + + try { + mCallNotifier.removeMessages(VIBRATE_45_SEC); + long timer; + if (callDurationMsec > 45000) { + // Schedule the alarm at the next minute + 45 secs + timer = 45000 + 60000 - callDurationMsec; + } else { + // Schedule the alarm at the first 45 second mark + timer = 45000 - callDurationMsec; + } + mCallNotifier.sendEmptyMessageDelayed(VIBRATE_45_SEC, timer); + } catch (Throwable t) { + XposedBridge.log(t); + } + } + + private static void refreshPhonePrefs() { + if (mPrefsPhone != null) { + mPrefsPhone.reload(); + mCallVibrations = mPrefsPhone.getStringSet( + GravityBoxSettings.PREF_KEY_CALL_VIBRATIONS, new HashSet()); + if (DEBUG) log("mCallVibrations = " + mCallVibrations.toString()); + + mFlipAction = GravityBoxSettings.PHONE_FLIP_ACTION_NONE; + try { + mFlipAction = Integer.valueOf(mPrefsPhone.getString( + GravityBoxSettings.PREF_KEY_PHONE_FLIP, "0")); + if (DEBUG) log("mFlipAction = " + mFlipAction); + } catch (NumberFormatException e) { + XposedBridge.log(e); + } } } } \ No newline at end of file From 9c169b2f6ad189bb294a06b8ceff7c648485bb42 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 07:59:33 +0200 Subject: [PATCH 262/710] Added MT6572 to the list of MTK devices --- src/com/ceco/gm2/gravitybox/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index ddf7b96ab0..b01866c034 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -43,7 +43,7 @@ public class Utils { // Supported MTK devices private static final Set MTK_DEVICES = new HashSet(Arrays.asList( - new String[] {"mt6575","mt6577","mt6589","mt8389"} + new String[] {"mt6572", "mt6575","mt6577","mt6589","mt8389"} )); private static void log(String message) { From 890f42672e3e2bb200699643b1b9821e4caa6c0d Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Tue, 1 Oct 2013 09:09:46 +0300 Subject: [PATCH 263/710] Updated Russian translation --- res/values-ru/strings.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 8bbb21d1f0..a3014c614d 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -1,4 +1,5 @@ + GravityBox @@ -585,4 +586,23 @@ При включенном расширенном дисплее Когда расширенный дисплей без панели навигации + + Leave stock battery icon intact + Use in case stock battery icon was replaced with 3rd party battery mod + + + Вкл. экран при подключении + Если включено, экран будет вклчаться при подключении/отключении USB/наушников (необходима перезагрузка) + + + Откл. звук рег. громкости + Отключает звук, проигрываемы при регулеровке громкости + + + Вибрация звонка + В начале звонка + В конце звонка + При ожидании звонка + Каждые 45 секунд при исходящем + From b40e9001873c9c0e6fdca731584eb97e556a4fc1 Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Tue, 1 Oct 2013 09:12:38 +0300 Subject: [PATCH 264/710] Updated Russian translation (fixes) --- res/values-ru/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index a3014c614d..2301fdf8b7 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -587,8 +587,8 @@ Когда расширенный дисплей без панели навигации - Leave stock battery icon intact - Use in case stock battery icon was replaced with 3rd party battery mod + Не трогать значок батареи + Использовать в случа замены стокового значка батареи сторонним модом Вкл. экран при подключении From c4945c41ab356480be73dc7c3a289d19e8cd3340 Mon Sep 17 00:00:00 2001 From: Noumi Ryoko Date: Tue, 1 Oct 2013 15:16:00 +0900 Subject: [PATCH 265/710] Updated Japanese Translation --- res/values-ja/strings.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 2cb488611e..16245f6779 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -600,4 +600,12 @@ 音量変更時の効果音を無音化 音量キーで音量を変更したときの効果音を再生しないようにします。 + + + 通話でのバイブ + 着信時 + 着信終了時 + 着信待機時 + 発信時45秒毎 + From 332f11e62959048d4192c23756714100b81a1b3f Mon Sep 17 00:00:00 2001 From: ch-vox Date: Tue, 1 Oct 2013 08:19:29 +0200 Subject: [PATCH 266/710] Updated French translation --- res/values-fr/strings.xml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index fa6063fc19..b267c28ae1 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -285,10 +285,6 @@ Arrêter la sonnerie Rejeter 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 @@ -616,4 +612,11 @@ 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 + From 6ea1d4e91a3f3b58aad0b67acc530f7b602a20cb Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Tue, 1 Oct 2013 08:24:47 +0100 Subject: [PATCH 267/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index b41a98518e..78be3e5f78 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -270,10 +270,6 @@ Desativar som de toque Rejeitar chamada - - Desativar vibração ao estabelecer chamada - Desativa a curta vibração que ocorre quando uma chamada de voz é estabelecida - Reiniciar rápido @@ -601,4 +597,11 @@ 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 + From 5b6ef94fce2d2a0fa15970ae8daefaabd0ab783c Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 09:25:22 +0200 Subject: [PATCH 268/710] Updated Hungarian translations (tanks to benjoe1) --- res/values-hu/strings.xml | 139 ++++++++++++++++++++++++++++++++------ 1 file changed, 118 insertions(+), 21 deletions(-) diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 606919723e..de48b9e78a 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -1,4 +1,19 @@ + + GravityBox @@ -76,16 +91,19 @@ Letiltva Normál Kiterjesztett + Ébrentartás bekapcsolva + Ébrentartás kikapcsolva - Statusbar Gyorsbeállítások csempéi - Mutatja vagy elrejti a Gyorsbeállítások 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ávon Felhasználói profil Repülő üzemmód Akkumlátor státusz Wi-Fi Bluetooth GPS + GPS (CM stílus) Mobil adat Hálózati üzemmód Adat használat @@ -102,14 +120,16 @@ Beállítások Hangerő Kiterjesztett asztal + Ébrentartás + Képernyőkép Szín választó Nyomjon a színre a beállításhoz - Statusbar háttérszín - Lehetővé teszi, hogy beállíthassa a Statusbar háttérszínét és átlátszóságát + Állapotsáv háttérszín + Lehetővé teszi, hogy beállíthassa az Állapotsáv háttérszínét és átlátszóságát Javítja a beszéd beállításokat @@ -120,8 +140,8 @@ 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 tartalmaz Különféle módosítások Tartalmaz minden egyéb módosítást, ami nem tartozik a többi konkrét kategóriába Általános javítások @@ -136,9 +156,9 @@ Adományozzon a részemre, ha úgy gondolja, hogy ez a program megéri az árát! Valamint fontolja meg, hogy adományozzon rovo89-nek is a kitűnő Xposed framework-ért. - A %s újra fog indulni. - A %s Recovery módba fog újraindulni. - A %s Bootloader módba fog újraindulni. + A telefon újra fog indulni. + A telefon Recovery módba fog újraindulni. + A telefon Bootloader módba fog újraindulni. CRT kikapcsolási effekt @@ -293,11 +313,11 @@ Automatikus váltás a Gyorsbeállítások panelre - A Gyorsbeállítások panel fog megjelenni automatikusan a Statusbar megnyitásakor, amennyiben nincs értesítés + A Gyorsbeállítások panel fog megjelenni automatikusan az Állapotsáv megnyitásakor, amennyiben nincs értesítés Gyors lehúzás - A Statusbar szélének lehúzása megnyitja a Gyorsbeállításokat + Az Állapotsáv szélének lehúzása megnyitja a Gyorsbeállításokat Kikapcsolva Jobb Bal @@ -307,14 +327,14 @@ Azon eszközök részére -mint a Jiayu G3S,G4- amelyek hangerő gombja bekapcsolja a kijelzőt - Statusbar színek + Állapotsáv színek Ikon színek engedélyezve - Statusbar ikon színe - Beállítja a statusbar ikonok és az óra színét + Állapotsáv ikon színe + Beállítja az állapotsáv ikonok és az óra színét Adattevékenység színe @@ -418,6 +438,7 @@ GPS bekapcsolva GPS kikapcsolva + GPS csatlakozva Mindig mutassa a menü gombot @@ -439,10 +460,10 @@ Átlátszóság menedzsment - Statusbar átlátszóság launcher-nél - Statusbar átlátszóság lockscreen-nél - Navbar átlátszóság launcher-nél - Navbar átlátszóság lockscreen-nél + Állapotsáv átlátszóság launcher-nél + Állapotsáv átlátszóság lockscreen-nél + Nav.sáv átlátszóság launcher-nél + Nav.sáv átlátszóság lockscreen-nél Ébresztő ikon elrejtése @@ -489,7 +510,7 @@ Kiterjesztett asztal üzemmód Letiltva - Statusbar elrejtése + Állapotsáv elrejtése Navigációs sáv elrejtése Mindkettő elrejtése Kiterjesztett asztal @@ -514,9 +535,85 @@ Navigációs sáv engedélyezése Újraindítás szükséges Navigációs sáv magassága - Álló tájolás módra vonatkozik + 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 - Fekvő tájolás módra vonatkozik + 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 + + + Telephony + Messaging + Mobile data + + + 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 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 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 mód csempe típusa + 2G/2G+3G/3G/(LTE) + 2G/2G+3G/(LTE) + 2G/3G/(LTE) + + + GPS értesítések letiltása + + + Összes forgatá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ózat mód csempe SIM kártya hely + Meghatározza a SIM kártya helyet, amire a hálózat mó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 + From 2d3a884023981bd01c76edbf5fab65733ec70fb2 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 09:37:46 +0200 Subject: [PATCH 269/710] Updated Slovak translations --- res/values-sk/strings.xml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index ced2bef263..64c34ec92a 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -267,10 +267,6 @@ Stlmiť zvonenie Zrušiť hovor - - Zakázať vibrovanie pri nadviazaní hovoru - Zakáže vibráciu, ktorá je vykonaná pri nadviazaní hovoru - Plné čierne pozadie Nahradí štandardné čierno-šedé pozadie (gradient) plnou čiernou farbou (vyžaduje reštart) @@ -583,4 +579,19 @@ 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 + From 899169499773a1ffe8fe8fc67e939401d667c56a Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 09:40:34 +0200 Subject: [PATCH 270/710] Updated Czech translations --- res/values-cs/strings.xml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 8da708bdd0..bd23f6ee28 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -271,10 +271,6 @@ 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) @@ -589,4 +585,19 @@ 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 + From 0486b4680bc2f9666e93f9c0d891b5148cf065db Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 10:15:16 +0200 Subject: [PATCH 271/710] Allow Call vibrations only in case device has vibrator --- .../ceco/gm2/gravitybox/GravityBoxSettings.java | 5 +++++ src/com/ceco/gm2/gravitybox/ModPhone.java | 9 +++++++-- src/com/ceco/gm2/gravitybox/Utils.java | 15 +++++++++++++++ .../gravitybox/quicksettings/RingerModeTile.java | 11 ++--------- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index e63b30cb1a..51f5103fe7 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -599,6 +599,7 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared private ListPreference mPrefQsNetworkModeSimSlot; private CheckBoxPreference mPrefSbColorSkipBattery; private CheckBoxPreference mPrefUnplugTurnsOnScreen; + private MultiSelectListPreference mPrefCallVibrations; @SuppressWarnings("deprecation") @Override @@ -745,6 +746,7 @@ public void onCreate(Bundle savedInstanceState) { 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); mPrefNetworkModeTileMode = (ListPreference) findPreference(PREF_KEY_NETWORK_MODE_TILE_MODE); mPrefQsTileBehaviourOverride = @@ -758,6 +760,9 @@ public void onCreate(Bundle savedInstanceState) { } // Update Phone category according to feature availability + if (!Utils.hasVibrator(getActivity())) { + mPrefCatPhoneTelephony.removePreference(mPrefCallVibrations); + } if (!Utils.hasTelephonySupport(getActivity())) { mPrefCatPhone.removePreference(mPrefCatPhoneTelephony); } diff --git a/src/com/ceco/gm2/gravitybox/ModPhone.java b/src/com/ceco/gm2/gravitybox/ModPhone.java index 07650a84bf..1566f1720e 100644 --- a/src/com/ceco/gm2/gravitybox/ModPhone.java +++ b/src/com/ceco/gm2/gravitybox/ModPhone.java @@ -270,8 +270,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mVibrateHook = null; } - if (!mCallVibrations.contains(GravityBoxSettings.CV_CONNECTED) - && !mCallVibrations.contains(GravityBoxSettings.CV_PERIODIC)) { + if (mVibrator == null || + (!mCallVibrations.contains(GravityBoxSettings.CV_CONNECTED) + && !mCallVibrations.contains(GravityBoxSettings.CV_PERIODIC))) { return; } @@ -337,6 +338,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { private static XC_MethodHook onDisconnectHook = new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (mVibrator == null) return; + try { refreshPhonePrefs(); Object conn = XposedHelpers.getObjectField(param.args[0], "result"); @@ -359,6 +362,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { private static XC_MethodHook onNewRingingConnectionHook = new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (mVibrator == null) return; + try { refreshPhonePrefs(); if (!mCallVibrations.contains(GravityBoxSettings.CV_WAITING)) { diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index b01866c034..7ae3aa6cf7 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -18,6 +18,7 @@ import de.robv.android.xposed.XposedBridge; import android.content.Context; import android.os.Build; +import android.os.Vibrator; import android.telephony.TelephonyManager; import android.util.DisplayMetrics; import android.view.WindowManager; @@ -40,6 +41,7 @@ public class Utils { private static Boolean mHasGeminiSupport = null; private static Boolean mHasTelephonySupport = null; private static String mDeviceCharacteristics = null; + private static Boolean mHasVibrator = null; // Supported MTK devices private static final Set MTK_DEVICES = new HashSet(Arrays.asList( @@ -118,6 +120,19 @@ public static boolean hasTelephonySupport(Context con) { return mHasTelephonySupport; } + public static boolean hasVibrator(Context con) { + if (mHasVibrator != null) return mHasVibrator; + + try { + Vibrator v = (Vibrator) con.getSystemService(Context.VIBRATOR_SERVICE); + mHasVibrator = v.hasVibrator(); + return mHasVibrator; + } catch (Throwable t) { + mHasVibrator = null; + return false; + } + } + public static String getDeviceCharacteristics() { if (mDeviceCharacteristics != null) return mDeviceCharacteristics; diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java index 1166ed55d9..cef33836fe 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/RingerModeTile.java @@ -16,6 +16,7 @@ package com.ceco.gm2.gravitybox.quicksettings; import com.ceco.gm2.gravitybox.R; +import com.ceco.gm2.gravitybox.Utils; import de.robv.android.xposed.XposedBridge; @@ -92,15 +93,7 @@ public boolean onLongClick(View v) { } }; - try { - Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); - mHasVibrator = v.hasVibrator(); - if (DEBUG) log("Device has vibrator: " + mHasVibrator); - } catch (Throwable t) { - log("Error checking if device has vibrator. Assuming it doesn't"); - mHasVibrator = false; - } - + mHasVibrator = Utils.hasVibrator(mContext); if (mHasVibrator) { mRingers = new Ringer[] { mSilentRinger, mVibrateRinger, mSoundRinger, mSoundVibrateRinger }; From b3791f0f04c96cbadfa62e82a8520d2cb332514e Mon Sep 17 00:00:00 2001 From: C3C0 Date: Tue, 1 Oct 2013 11:38:48 +0200 Subject: [PATCH 272/710] Version 2.5.6 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 27 +++++++++++++++++++++++++++ NOTICE | 16 ++++++++++++++++ README.md | 7 ++++++- 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 NOTICE diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 62cc7c2ac4..39d79651ea 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -16,8 +16,8 @@ + android:versionCode="34" + android:versionName="2.5.6" > Date: Wed, 2 Oct 2013 08:29:03 +0200 Subject: [PATCH 273/710] Updated German translations (thanks to samsonbear) --- res/values-de/strings.xml | 287 ++++++++++++++++++++++++++++---------- 1 file changed, 212 insertions(+), 75 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 996689d375..c3b7045b2c 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -3,17 +3,17 @@ GravityBox - Batterieanzeigen Stil - Original Batterieanzeige - runde Batterieanzeige - runde Batterieanzeige mit Prozentangaben - Batterieladung als Prozentanzeige - Keine + Akkuanzeige-Stil + Standard Akkuanzeige + Runde Akkuanzeige + Runde Akkuanzeige mit Prozentwert + Nur Prozentwert + Keine Anzeige Lautstärketasten überspringen Musiktitel Überspringe Musiktitel durch langes drücken der Lautstärketasten während der Bildschirm aus ist - Warnung bei niedrigem Batteriestand + Warnung bei niedrigem Akkustand Benachrichtigung und Warnton Nur Benachrichtigung Nur Warnton @@ -21,15 +21,15 @@ Änderungen werden nach einem Neustart übernommen - Empfangsicons automatisch verstecken - Empfangsicons für ausgewählte Sim Karte verstecken, wenn diese nicht eingelegt ist, deaktiviert \"Steckplatz 2: Keine SIM-Karte erkannt\" benachrichtigung + 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\" benachrichtungen deaktiviert + \"Keine SIM-Karte erkannt\" Benachrichtigungen deaktiviert - Erweitertes Neustart Menü - Aktiviert erweitertes Neustart Menü mit der Option direkt die Recovery zu starten + Erweitertes Neustart-Menü + Aktiviert erweitertes Neustart-Menü mit der Option direkt die Recovery zu starten Recovery Cursor mittels Lautstärketasten bewegen @@ -41,18 +41,18 @@ Alle zuletzt geöffneten Anwendungen schließen Datums&Zeit Einstellungs Absturz beheben - Aktivieren falls Abstürze beim aufrufen der Datums&Zeit Einstellungen auftreten (benötigt einen Neustart) + Aktivieren, falls Abstürze beim Aufrufen der Datums&Zeit Einstellungen auftreten (Neustart erforderlich) - Anrufer ID für Anrufe beheben - Aktivieren falls der Kontaktname bei einem eingehenden Anruf nicht angezeigt wird (benötigt einen Neustart) - 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 von Contacts Provider zu löschen. + 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 von 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 (benötigt einen Neustart) - Nach dem Neustartt sollten alle geteilten Nachrichtenverläufe gelöscht werden damit die Änderung wirksam wird! + 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 Kalendar App beheben - Aktivieren falls sich der Bildschirm sporadisch von selbst aktiviert (benötigt einen Reboot) + Probleme mit Kalender-App beheben + Aktivieren, falls sich der Bildschirm sporadisch von selbst aktiviert (Neustart erforderlich) Wichtig @@ -106,35 +106,35 @@ Farbwähler - Auf Farbe drücke zum bestätigen + Zur Bestätigung auf Farbfeld drücken Hintergrundfarbe der Statusleiste - Erlaubt es die Hintergrundfarbe und Transparenz der Statusleiste zu ändern + Erlaubt es, die Hintergrundfarbe und Transparenz der Statusleiste zu ändern - Behebt Spracheingabe Einstellungen - Schaltet Sprachsuche und Text-vorlesen in den Sprache&Eingabe Einstellungen frei (benötigt einen Neustart) + Behebt Spracheingabe-Einstellungen + Schaltet Sprachsuche und Text-in-Sprache-Ausgabe in den Sprache & Eingabe Einstellungen frei (Neustart erforderlich) - Erweiterte Entwickler Optionen - Schaltet erweiterte Entwickler Optionen frei (benötigt eine Neustart) + Erweiterte Entwickler-Optionen + Schaltet erweiterte Entwickler-Optionen frei (Neustart erforderlich) - Statusleisten Optimierungen + Statusleisten-Optimierungen Beinhaltet einige Optionen um die Statusleiste anzupassen Diverse Optimierungen Beinhaltet alle Optimierungen die in keine speziellere Kategorie passen Allgemeine Einstellungen - Beinhaltet allgemeine Einstellungen die Fehler beim MTK6589 beheben. Nur benutzen falls notwendigt. + Beinhaltet allgemeine Einstellungen, die Fehler beim MTK6589 beheben. Nur benutzen falls notwendig. Über - Programmiert von C3C076@XDA. Berühren um den offiziellen Forumseintrag zu öffnen. - Xposed framework - Programmiert von rovo89@XDA. Berühren um den offiziellen Forumseintrag zu öffnen. + 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 - An mich Spenden, falls du glaubst die App ist es wert! Erwäge es auch an rovo89 für sein exzellentes Xposed Framework zu spenden. + An mich Spenden, falls du glaubst die App sei es wert! Erwäge es auch an rovo89 für sein exzellentes Xposed Framework zu spenden. %s wird neu gestartet. @@ -142,50 +142,50 @@ %s startet in den Bootloader. - Röhrenmonitor Effekt beim Ausschalten des Bildschirms - Aktiviert eine Animation die das Ausschalten eines Röhrenmonitors simuliert wenn der Bildschirm ausgeschaltet wird + Röhrenmonitor-Effekt beim Ausschalten des Bildschirms + Aktiviert eine Animation, die das Ausschalten eines Röhrenmonitors simuliert, wenn 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 + Dual-SIM Lautstärke + Startet eine Anwendung, die es erlaubt für die beiden SIM-Karten unterschiedliche Rufton- und Benachrichtigungslautstärken einzustellen - Sperrbildschirm Optimierungen + Sperrbildschirm-Optimierungen Beinhaltet einige Anpassungen für den Sperrbildschirm - Lockscreen Hintergrund - Hintergrund Stil + Lockscreen-Hintergrund + Hintergrund-Stil Standard Hintergrundbild - benutzerdefinierte Farbe - eigenes Bild + Benutzerdefinierte Farbe + Eigenes Bild Benutzerdefinierte Farbe wählen - Erlaubt es eine benutzerdefinierte Hintergrundfarbe für den Sperrbildschirm zu 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 + Erlaubt es, ein benutzerdefiniertes Hintergrundbild für den Sperrbildschirm zu wählen Hintergrund geändert Hintergrund nicht geändert - anderer - Widgets Maximieren - Wenn aktiviert werden Widgets auf dem Sperrbildschirm maximiert + Anderer + Widgets maximieren + Wenn aktiviert, werden Widgets auf dem Sperrbildschirm maximiert - Ausschalt-Menü Optimierungen - Beinhaltet einige Energie bezogene Optimierungen + Ausschaltmenü-Optimierungen + Beinhaltet einige energiebezogene Optimierungen - Deaktiviere LED blinken - Deaktivert aufdringliches LED blinken wenn der Batteriestatus niedrig ist und nicht geladen wird. + Deaktiviere blinkende LED + Deaktivert aufdringlich blinkende LED, wenn der Akkustatus niedrig ist und nicht geladen wird. - Bildschrim Optimierungen - Beinhaltet einige Bildschirm Optimierungen + Bildschirm-Optimierungen + Beinhaltet einige Bildschirm-Optimierungen Minimale Helligkeitsstufe - Erlaubt es die minimale Helligkeitsstufe zu ändern. Wirkt sich auf die manuelle Helligkeitseinstellung aus. (benötigt einen Neustart) + Erlaubt es die minimale Helligkeitsstufe zu ändern. Wirkt sich auf die manuelle Helligkeitseinstellung aus. (Neustart erforderlich) Wert zwischen: 10 – 80 @@ -206,33 +206,33 @@ Aktiviere Sperrbildschirm Rotation - Achtung: Möglicherweise werden die Entsperr-Ring Anwendungen getauscht, wenn der AOSP Sperrbildschirm vom Hersteller verändert wurde + 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. (benötigt einen Neustart) + 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 (benötigt einen Neustart) + Hindert den Bildschirm daran sich anzuschalten, wenn eine Nachricht eintrifft (Neustart erforderlich) Uhrzeit in der Mitte - Medien Optimierungen - Beinhaltet einige Optimierungen für Medien und Audio Einstellungen + Medien-Optimierungen + Beinhaltet einige Optimierungen für Medien- und Audio-Einstellungen Mehr Lautstärkestufen für Musiklautstärke - Fügt weitere Lautstärkestufen für Musik Wiedergabe hinzu (benötigt einen Neustart) + 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 + Aktiviert oder deaktiviert die Lautstärkebegrenzung bei Kopfhörern - Deaktiviere die Lade LED + Deaktiviere die Lade-LED Deaktiviert die LED während der Akku geladen wird @@ -256,8 +256,8 @@ Keine vorherige Apps gefunden - Anruf Optimierungen - Beinhaltet einige Anruf bezogene Optimierungen + Anruf-Optimierungen + Beinhaltet einige Anruf-bezogene Optimierungen Umdreh Aktion bei Anruf @@ -275,7 +275,7 @@ Schwarzer Hintergrund - Benutze einen schwarzen Hintergrund für das Holo System Theme anstelle des Schwarz-Grau Verlaufs (benötigt einen Neustart) + Benutze einen schwarzen Hintergrund für das Holo System Theme anstelle des Schwarz-Grau Verlaufs (Neustart erforderlich) Verknüpfungen pro Reihe @@ -371,19 +371,19 @@ Deaktiviere Tasten Hintergrundbeleuchtung Immer an wenn der Bildschirm an ist An wenn Benachrichtigungen vorliegen - EXPERIMENTAL! Blinkt wenn eine Benachrichtigung vorliegt. Als Alternative für Geräte ohne Benachrichtigungs LED. Erhöht Batterieverbrauch. + EXPERIMENTAL! Blinkt wenn eine Benachrichtigung vorliegt. Als Alternative für Geräte ohne Benachrichtigungs LED. Erhöht Akkuverbrauch. Verstecke Navigationsleiste - Verstekct die Navigationsleiste wenn Pie Controls aktiviert sind (für Geräte die eine Navigationsbar haben, benötigt einen Neustart) + Versteckt die Navigationsleiste, wenn Pie Controls aktiviert sind (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 (benötigt einen Neustart) + Geditherter Holo-Hintergrund + Ersetzt den Standard Holo-Hintergrund mit einem geditherten, um Farbstreifenbildung zu minimieren (Neustart erforderlich) Deaktiviert Hardwaretasten - Deaktiviert die Menü, Zurück, Home tasten wenn Pie Controls aktiviert sind. Hardwaretastenbelegung funktioniert weiterhin (lange drücken, doppelt drücken). (Für Geräte die Hardwaretasten besitzen) + Deaktiviert die Menü-, Zurück- & Home-Taste, wenn Pie Controls aktiviert sind. Hardwaretastenbelegung funktioniert weiterhin (lange drücken, doppelt drücken). (Für Geräte die Hardwaretasten besitzen) Benutze dunkles Holo Theme @@ -450,15 +450,46 @@ Verstecke Wecker Icon - Bildschirm abdunkelstärke - Wie stark der Bildschirm abgedunkelt wird bevor er sich ausschaltet (benötigt einen Neustart) + Bildschirm-Abdunkelstärke + Wie stark der Bildschirm abgedunkelt wird bevor er sich ausschaltet (Neustart erforderlich) Telefon 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. (Neustart erforderlich) + + + 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 - Erweiterter Desktop Modus + Erweiterter Desktop-Modus Deaktiviert Verstecke Statusleiste Verstecke Navigationsleiste @@ -466,5 +497,111 @@ Erweiterter Desktop Erweiterter Desktop ist AN Erweiterter Desktop ist AUS + + + Screenshot + + + Show menu + + + Toggle expanded desktop + Expanded desktop mode is disabled! + + + Navigationsleisten-Optimierungen + Contains various navigation bar related tweaks + Override system defaults + Master switch for navigation bar tweaks (Neustart erforderlich) + Navigationsleiste aktivieren + Neustart erforderlich + 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 + + + Telefonie + Nachrichten + Mobile Daten + + + 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) + + + Deaktiviert GPS-Benachrichtigungen + + + Allow all rotations + + + Override default tile behaviour + Overrides touch/long-touch behaviour for selected tiles (Neustart erforderlich) + + + Network mode tile SIM slot + Defines SIM slot to which network mode tile applies (%s) + SIM slot 1 + SIM slot 2 + + + Nie + Immer + Wenn erweiterter Desktop aktiviert ist + Wenn erweiterter Desktop die Navigationsleiste versteckt + + + 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 (Neustart erforderlich) + + + 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 - + \ No newline at end of file From 6055c0f00aca7f3586ffa87871e32aec1d72f8b9 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 2 Oct 2013 08:32:35 +0200 Subject: [PATCH 274/710] Updated Polish translations (thanks to xtrem007) --- res/values-pl/strings.xml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 84ccdcf6e8..3893d6a383 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -196,8 +196,6 @@ Nic nie rób Wycisz dzwonek Odrzuć połączenie - Wyłącz wibrację przy połączeniu - Wyłącza wibracje uruchamiane gdy połączenie zostanie zestawione Miękki restart Jednolite czarne tło Użyj jednolitego czarnego tła zamiast czarno-szarego gradientu dla domyślnego tematu Holo (wymagany restart) @@ -383,4 +381,13 @@ 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 From f52ce264de79c16df5f58fad439e002526ea3bda Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 2 Oct 2013 08:45:18 +0200 Subject: [PATCH 275/710] Updated Hungarian translations (thanks to benjoe1) --- res/values-hu/strings.xml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index de48b9e78a..95c9bf390e 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -285,10 +285,6 @@ Csengés elnémítása Hívás elutasítása - - Rezgés letiltása hívás kapcsolódáskor - Letiltja a rezgést, amit a hívás kapcsolódás vált ki. - Intelligens újraindítás @@ -317,7 +313,7 @@ Gyors lehúzás - Az Állapotsáv szélének lehúzása megnyitja a Gyorsbeállításokat + Az Állapotsáv szélének lehúzása megnyitja a Gyorsbeállítások panelt Kikapcsolva Jobb Bal @@ -478,8 +474,8 @@ Fényerő beállítások - Fényerő beállítások módosításának 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 ez a funkciót. (újraindítás szükséges) + 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) Legutóbb használt alkalmazások megjelenítése @@ -577,7 +573,7 @@ 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 mód csempe típusa + Hálózati üzemmód csempe típusa 2G/2G+3G/3G/(LTE) 2G/2G+3G/(LTE) 2G/3G/(LTE) @@ -593,8 +589,8 @@ Felülírja a kiválasztott csempék érintés/hosszú érintés viselkedését (újraindítás szükséges) - Hálózat mód csempe SIM kártya hely - Meghatározza a SIM kártya helyet, amire a hálózat mód csempe vonatkozik (%s) + 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 @@ -616,4 +612,11 @@ 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 + From 0f71505b3248bd8f0bcf75c248a1da8720c64fa8 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 2 Oct 2013 20:21:39 +0200 Subject: [PATCH 276/710] QuickSettings Tile Reordering --- AndroidManifest.xml | 5 + res/drawable-hdpi-finger/ic_grabber.png | Bin 0 -> 1158 bytes .../order_tile_list_activity.xml | 33 ++ res/layout-finger/order_tile_list_item.xml | 72 ++++ res/values/colors.xml | 4 + res/values/dimens.xml | 6 + res/values/strings.xml | 4 + res/xml/gravitybox.xml | 8 +- .../gm2/gravitybox/GravityBoxSettings.java | 18 +- .../ceco/gm2/gravitybox/ModQuickSettings.java | 55 ++- .../ceco/gm2/gravitybox/TouchInterceptor.java | 359 ++++++++++++++++++ src/com/ceco/gm2/gravitybox/Utils.java | 9 + .../quicksettings/TileOrderActivity.java | 233 ++++++++++++ 13 files changed, 785 insertions(+), 21 deletions(-) create mode 100644 res/drawable-hdpi-finger/ic_grabber.png create mode 100644 res/layout-finger/order_tile_list_activity.xml create mode 100644 res/layout-finger/order_tile_list_item.xml create mode 100644 src/com/ceco/gm2/gravitybox/TouchInterceptor.java create mode 100644 src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 39d79651ea..67dba000a0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -45,6 +45,11 @@ + + + diff --git a/res/drawable-hdpi-finger/ic_grabber.png b/res/drawable-hdpi-finger/ic_grabber.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff8d1aa3f0c32f32f7ad9bcf451cf41b48a473f GIT binary patch literal 1158 zcmV;11bO?3P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXfA z5gQ8~^DVCc00ag}L_t(&-tC&rOCw1bhksqw-PPR~^C65uLCD362WJ`g9*{jrOtRh# z%t;6+flQG2XE+xH87~VSR0u2cC+yy3WkC>z4Fm$~Ea(oTKkcsC%OuR~j84x?5}i!H z=c22geyjR@>ZPSdqk&Nmg6|+A$Otlmj36V(2=WU<{@MqutgPHCKp2@BdL~y_R|_M( zU5mxyi_6Q)UyH@!!AL?Di^Ug~WvywN2GcZ4!vq})WT8+vuqToo4{pJ7?{qV}0NM(eu2YlF1|{Cnph)$3X~z5CW7^BoYY#fDi)L z*Vj*Txm;3~oY0_a~O+9;htK zux&dBAoq#+;W!RF&-)p`LfCanVLJoo=jRy!e*x%D1kU;G50)e-iUP*i2Y~;}I2^}; z@B4QzRFWV`5VVzF=^5JI{y z=F0c|fBU{&=jP_F+U<5p)3oQZENAXR;Uq~y5Cj*l>sB^4HoSqH$?56omjGTqBzKK& zAra*Fe4lJI8ZpbVo^j55GO)b7Jlw1hVlu|IkB*K8D+Aq{HS7q20H$feb=}XBfzXg= zXJ?t&+1bYc;CUV#$LVXW3|lAP%D|Iyx%_BvZ|`-#Gue}YSS*Gh2!@_XN+~2s!p+Ui zmFIc=mx1~D`Kwl|RWc0YIi>X8WPo#i;W$pEQmG6^24-evA{mGvBgh9N1INe5AIQMc z($cU$J|<&qyU}P2zBACh+YMU=zN9k{8uIk?v?l|u>%w*2q1H-5NKXb#(|oeFw)SX$ zf4{#nz&U?IDedUGJ~lQs2G04d#v_CP=Nv&0AP9mx+a!b#P)b251tH{CU6drLw|hL# z8%$?lVPWB_*=&{!!}w%pKnMZXbzxZ+Y}0QMWx1E7ZYNLEG^ncjDhPtbK>-fDPHt{)wuBJxff7QXsw#9{hpMVgAw;%X zt^WN@%Rs$eZvx1ws@m3d9fo1RFbpupS^%=OTCF`2##67?n?i`JuIuf1JPyM!+HV0{ zBc*j)TU)OHEK*AU0I*oA)tV1d>%KN>wb})MA0j~?gzrYbf<}-LWCR&OMvxI?1Ud5Y YALFjLQqGP-B>(^b07*qoM6N<$f{=0q + + + + + + + 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/values/colors.xml b/res/values/colors.xml index 51cddf8fc3..a283d875e3 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -25,4 +25,8 @@ #dd0099cc @android:color/holo_blue_light #dd0099cc + + + @android:color/holo_blue_light + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 555b5abfc9..50b9b4bbe0 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -40,4 +40,10 @@ 165dp 85sp + + + 64dip + + 128dip + diff --git a/res/values/strings.xml b/res/values/strings.xml index ab4018ceb3..bb62a88b26 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -619,4 +619,8 @@ On call waiting Every 45th second during outgoing call + + Tile reordering + Allows reordering of QuickSettings tiles + diff --git a/res/xml/gravitybox.xml b/res/xml/gravitybox.xml index db85d4d9af..11cbd3d36b 100644 --- a/res/xml/gravitybox.xml +++ b/res/xml/gravitybox.xml @@ -141,10 +141,16 @@ android:title="@string/pref_cat_statusbar_qs_title"> + + 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 : 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.commit(); mQuickSettings.setValues(defVal); } @@ -1042,8 +1047,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( @@ -1325,6 +1329,8 @@ public boolean onPreferenceTreeClick(PreferenceScreen prefScreen, Preference pre } } getActivity().recreate(); + } else if (pref == mPrefQsTileOrder) { + intent = new Intent(getActivity(), TileOrderActivity.class); } if (intent != null) { diff --git a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java index f372725605..191e8b66bc 100644 --- a/src/com/ceco/gm2/gravitybox/ModQuickSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModQuickSettings.java @@ -37,6 +37,7 @@ import com.ceco.gm2.gravitybox.quicksettings.ScreenshotTile; import com.ceco.gm2.gravitybox.quicksettings.SleepTile; import com.ceco.gm2.gravitybox.quicksettings.StayAwakeTile; +import com.ceco.gm2.gravitybox.quicksettings.TileOrderActivity; import com.ceco.gm2.gravitybox.quicksettings.TorchTile; import com.ceco.gm2.gravitybox.quicksettings.GravityBoxTile; import com.ceco.gm2.gravitybox.quicksettings.SyncTile; @@ -92,7 +93,7 @@ public class ModQuickSettings { private static ViewGroup mContainerView; private static Object mPanelBar; private static Object mStatusBar; - private static Set mActiveTileKeys; + private static List mActiveTileKeys; private static Class mQuickSettingsTileViewClass; private static Object mSimSwitchPanelView; private static int mNumColumns = 3; @@ -108,6 +109,7 @@ public class ModQuickSettings { private static Set mOverrideTileKeys; private static ArrayList mTiles; + private static Map mAllTileViews; static { mCustomSystemTileKeys = new ArrayList(Arrays.asList( @@ -154,6 +156,8 @@ public class ModQuickSettings { tmpMap.put("airplane_mode_textview", 8); tmpMap.put("bluetooth_textview", 9); mAospTileTags = Collections.unmodifiableMap(tmpMap); + + mAllTileViews = new HashMap(); } private static void log(String message) { @@ -167,9 +171,9 @@ public void onReceive(Context context, Intent intent) { if (DEBUG) log("received broadcast: " + intent.toString()); if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_QUICKSETTINGS_CHANGED)) { if (intent.hasExtra(GravityBoxSettings.EXTRA_QS_PREFS)) { - String[] qsPrefs = intent.getStringArrayExtra(GravityBoxSettings.EXTRA_QS_PREFS); - mActiveTileKeys = new HashSet(Arrays.asList(qsPrefs)); - updateTileVisibility(); + mActiveTileKeys = new ArrayList(Arrays.asList( + intent.getStringExtra(GravityBoxSettings.EXTRA_QS_PREFS).split(","))); + updateTileOrderAndVisibility(); } if (intent.hasExtra(GravityBoxSettings.EXTRA_QS_COLS)) { mNumColumns = intent.getIntExtra(GravityBoxSettings.EXTRA_QS_COLS, 3); @@ -243,23 +247,42 @@ private static String getTileKey(View view) { return null; } - private static void updateTileVisibility() { - + private static void updateTileOrderAndVisibility() { if (mActiveTileKeys == null) { - if (DEBUG) log("updateTileVisibility: mActiveTileKeys is null - skipping"); + if (DEBUG) log("updateTileOrderAndVisibility: mActiveTileKeys is null - skipping"); return; } - // hide/unhide tiles according to preferences - int tileCount = mContainerView.getChildCount(); - for(int i = 0; i < tileCount; i++) { + final List dynamicTiles = new ArrayList(); + + final int tileCount = mContainerView.getChildCount(); + for(int i = tileCount - 1; i >= 0; i--) { View view = mContainerView.getChildAt(i); final String key = getTileKey(view); if (key != null) { - view.setVisibility(mActiveTileKeys.contains(key) ? - View.VISIBLE : View.GONE); + if (!mAllTileViews.containsKey(key)) { + mAllTileViews.put(key, view); + } + mContainerView.removeView(view); + } else if (view != null) { + // found tile that's not in our custom list + // might be dynamic tile (e.g. alarm) or some ROM specific tile? + // remove it and store it so it could be added in the end + dynamicTiles.add(view); + mContainerView.removeView(view); } } + + for (String key : mActiveTileKeys) { + if (mAllTileViews.containsKey(key)) { + mContainerView.addView(mAllTileViews.get(key)); + } + } + + // add tiles from dynamic list as last (e.g. alarm tile we previously removed) + for (View v : dynamicTiles) { + mContainerView.addView(v); + } } private static void updateTileLayout(FrameLayout container, int orientation) { @@ -325,7 +348,11 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL removeNotificationState.set(MethodState.UNKNOWN); prefs.reload(); - mActiveTileKeys = prefs.getStringSet(GravityBoxSettings.PREF_KEY_QUICK_SETTINGS, null); + String tileKeys = prefs.getString(TileOrderActivity.PREF_KEY_TILE_ORDER, null); + if (tileKeys != null) { + mActiveTileKeys = new ArrayList(Arrays.asList(prefs.getString( + TileOrderActivity.PREF_KEY_TILE_ORDER, "").split(","))); + } if (DEBUG) log("got tile prefs: mActiveTileKeys = " + (mActiveTileKeys == null ? "null" : mActiveTileKeys.toString())); mOverrideTileKeys = prefs.getStringSet( @@ -522,7 +549,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { gbTile.setupQuickSettingsTile(mContainerView, inflater); mTiles.add(gbTile); - updateTileVisibility(); + updateTileOrderAndVisibility(); } catch (Throwable t) { XposedBridge.log(t); } diff --git a/src/com/ceco/gm2/gravitybox/TouchInterceptor.java b/src/com/ceco/gm2/gravitybox/TouchInterceptor.java new file mode 100644 index 0000000000..c2f3e6689f --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/TouchInterceptor.java @@ -0,0 +1,359 @@ +/* + * 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 com.ceco.gm2.gravitybox.R; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.ListView; + +public class TouchInterceptor extends ListView { + + private ImageView mDragView; + private WindowManager mWindowManager; + private WindowManager.LayoutParams mWindowParams; + private int mDragPos; // which item is being dragged + private int mFirstDragPos; // where was the dragged item originally + private int mDragPoint; // at what offset inside the item did the user grab + // it + private int mCoordOffset; // the difference between screen coordinates and + // coordinates in this view + private DragListener mDragListener; + private DropListener mDropListener; + private int mUpperBound; + private int mLowerBound; + private int mHeight; + private Rect mTempRect = new Rect(); + private Bitmap mDragBitmap; + private final int mTouchSlop; + private int mItemHeightNormal; + private int mItemHeightExpanded; + private int mItemHeightHalf; + + public TouchInterceptor(Context context, AttributeSet attrs) { + super(context, attrs); + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + Resources res = getResources(); + mItemHeightNormal = res.getDimensionPixelSize(R.dimen.normal_height); + mItemHeightHalf = mItemHeightNormal / 2; + mItemHeightExpanded = res.getDimensionPixelSize(R.dimen.expanded_height); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (mDragListener != null || mDropListener != null) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + int x = (int) ev.getX(); + int y = (int) ev.getY(); + int itemnum = pointToPosition(x, y); + if (itemnum == AdapterView.INVALID_POSITION) { + break; + } + ViewGroup item = (ViewGroup) getChildAt(itemnum - getFirstVisiblePosition()); + mDragPoint = y - item.getTop(); + mCoordOffset = ((int) ev.getRawY()) - y; + View dragger = item.findViewById(R.id.grabber); + Rect r = mTempRect; + dragger.getDrawingRect(r); + // The dragger icon itself is quite small, so pretend the + // touch area is bigger + if (x < r.right * 2) { + item.setDrawingCacheEnabled(true); + // Create a copy of the drawing cache so that it does + // not get recycled + // by the framework when the list tries to clean up + // memory + Bitmap bitmap = Bitmap.createBitmap(item.getDrawingCache()); + startDragging(bitmap, y); + mDragPos = itemnum; + mFirstDragPos = mDragPos; + mHeight = getHeight(); + int touchSlop = mTouchSlop; + mUpperBound = Math.min(y - touchSlop, mHeight / 3); + mLowerBound = Math.max(y + touchSlop, mHeight * 2 / 3); + return false; + } + stopDragging(); + break; + } + } + return super.onInterceptTouchEvent(ev); + } + + /* + * pointToPosition() doesn't consider invisible views, but we need to, so + * implement a slightly different version. + */ + private int myPointToPosition(int x, int y) { + + if (y < 0) { + // when dragging off the top of the screen, calculate position + // by going back from a visible item + int pos = myPointToPosition(x, y + mItemHeightNormal); + if (pos > 0) { + return pos - 1; + } + } + + Rect frame = mTempRect; + final int count = getChildCount(); + for (int i = count - 1; i >= 0; i--) { + final View child = getChildAt(i); + child.getHitRect(frame); + if (frame.contains(x, y)) { + return getFirstVisiblePosition() + i; + } + } + return INVALID_POSITION; + } + + private int getItemForPosition(int y) { + int adjustedy = y - mDragPoint - mItemHeightHalf; + int pos = myPointToPosition(0, adjustedy); + if (pos >= 0) { + if (pos <= mFirstDragPos) { + pos += 1; + } + } else if (adjustedy < 0) { + // this shouldn't happen anymore now that myPointToPosition deals + // with this situation + pos = 0; + } + return pos; + } + + private void adjustScrollBounds(int y) { + if (y >= mHeight / 3) { + mUpperBound = mHeight / 3; + } + if (y <= mHeight * 2 / 3) { + mLowerBound = mHeight * 2 / 3; + } + } + + /* + * Restore size and visibility for all listitems + */ + private void unExpandViews(boolean deletion) { + for (int i = 0;; i++) { + View v = getChildAt(i); + if (v == null) { + if (deletion) { + // HACK force update of mItemCount + int position = getFirstVisiblePosition(); + int y = getChildAt(0).getTop(); + setAdapter(getAdapter()); + setSelectionFromTop(position, y); + // end hack + } + layoutChildren(); // force children to be recreated where needed + v = getChildAt(i); + if (v == null) { + break; + } + } + ViewGroup.LayoutParams params = v.getLayoutParams(); + params.height = mItemHeightNormal; + v.setLayoutParams(params); + v.setVisibility(View.VISIBLE); + } + } + + /* + * Adjust visibility and size to make it appear as though an item is being + * dragged around and other items are making room for it: If dropping the + * item would result in it still being in the same place, then make the + * dragged listitem's size normal, but make the item invisible. Otherwise, + * if the dragged listitem is still on screen, make it as small as possible + * and expand the item below the insert point. If the dragged item is not on + * screen, only expand the item below the current insertpoint. + */ + private void doExpansion() { + int childnum = mDragPos - getFirstVisiblePosition(); + if (mDragPos > mFirstDragPos) { + childnum++; + } + + View first = getChildAt(mFirstDragPos - getFirstVisiblePosition()); + + for (int i = 0;; i++) { + View vv = getChildAt(i); + if (vv == null) { + break; + } + int height = mItemHeightNormal; + int visibility = View.VISIBLE; + if (vv.equals(first)) { + // processing the item that is being dragged + if (mDragPos == mFirstDragPos) { + // hovering over the original location + visibility = View.INVISIBLE; + } else { + // not hovering over it + height = 1; + } + } else if (i == childnum) { + if (mDragPos < getCount() - 1) { + height = mItemHeightExpanded; + } + } + ViewGroup.LayoutParams params = vv.getLayoutParams(); + params.height = height; + vv.setLayoutParams(params); + vv.setVisibility(visibility); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if ((mDragListener != null || mDropListener != null) && mDragView != null) { + int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + Rect r = mTempRect; + mDragView.getDrawingRect(r); + stopDragging(); + if (mDropListener != null && mDragPos >= 0 && mDragPos < getCount()) { + mDropListener.drop(mFirstDragPos, mDragPos); + } + unExpandViews(false); + break; + + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_MOVE: + int x = (int) ev.getX(); + int y = (int) ev.getY(); + dragView(x, y); + int itemnum = getItemForPosition(y); + if (itemnum >= 0) { + if (action == MotionEvent.ACTION_DOWN || itemnum != mDragPos) { + if (mDragListener != null) { + mDragListener.drag(mDragPos, itemnum); + } + mDragPos = itemnum; + doExpansion(); + } + int speed = 0; + adjustScrollBounds(y); + if (y > mLowerBound) { + // scroll the list up a bit + speed = y > (mHeight + mLowerBound) / 2 ? 16 : 4; + } else if (y < mUpperBound) { + // scroll the list down a bit + speed = y < mUpperBound / 2 ? -16 : -4; + } + if (speed != 0) { + int ref = pointToPosition(0, mHeight / 2); + if (ref == AdapterView.INVALID_POSITION) { + // we hit a divider or an invisible view, check + // somewhere else + ref = pointToPosition(0, mHeight / 2 + getDividerHeight() + 64); + } + View v = getChildAt(ref - getFirstVisiblePosition()); + if (v != null) { + int pos = v.getTop(); + setSelectionFromTop(ref, pos - speed); + } + } + } + break; + } + return true; + } + return super.onTouchEvent(ev); + } + + private void startDragging(Bitmap bm, int y) { + stopDragging(); + + mWindowParams = new WindowManager.LayoutParams(); + mWindowParams.gravity = Gravity.TOP; + mWindowParams.x = 0; + mWindowParams.y = y - mDragPoint + mCoordOffset; + + mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; + mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; + mWindowParams.format = PixelFormat.TRANSLUCENT; + mWindowParams.windowAnimations = 0; + + Context context = getContext(); + ImageView v = new ImageView(context); + int backGroundColor = context.getResources().getColor(R.color.dragndrop_background); + v.setBackgroundColor(backGroundColor); + v.setImageBitmap(bm); + mDragBitmap = bm; + + mWindowManager = (WindowManager) context.getSystemService("window"); + mWindowManager.addView(v, mWindowParams); + mDragView = v; + } + + private void dragView(int x, int y) { + mWindowParams.y = y - mDragPoint + mCoordOffset; + mWindowManager.updateViewLayout(mDragView, mWindowParams); + } + + private void stopDragging() { + if (mDragView != null) { + WindowManager wm = (WindowManager) getContext().getSystemService("window"); + wm.removeView(mDragView); + mDragView.setImageDrawable(null); + mDragView = null; + } + if (mDragBitmap != null) { + mDragBitmap.recycle(); + mDragBitmap = null; + } + } + + public void setDragListener(DragListener l) { + mDragListener = l; + } + + public void setDropListener(DropListener l) { + mDropListener = l; + } + + public interface DragListener { + void drag(int from, int to); + } + + public interface DropListener { + void drop(int from, int to); + } +} diff --git a/src/com/ceco/gm2/gravitybox/Utils.java b/src/com/ceco/gm2/gravitybox/Utils.java index 7ae3aa6cf7..2bd8af011e 100644 --- a/src/com/ceco/gm2/gravitybox/Utils.java +++ b/src/com/ceco/gm2/gravitybox/Utils.java @@ -145,6 +145,15 @@ public static boolean shouldAllowMoreVolumeSteps() { !isMtkDevice()); } + public static String join(String[] stringArray, String separator) { + String buf = ""; + for (String s : stringArray) { + if (!buf.isEmpty()) buf += separator; + buf += s; + } + return buf; + } + static class SystemProp extends Utils { private SystemProp() { diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java b/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java new file mode 100644 index 0000000000..d0b0d09d17 --- /dev/null +++ b/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java @@ -0,0 +1,233 @@ +/* + * 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.quicksettings; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import com.ceco.gm2.gravitybox.GravityBoxSettings; +import com.ceco.gm2.gravitybox.R; +import com.ceco.gm2.gravitybox.TouchInterceptor; +import com.ceco.gm2.gravitybox.Utils; + +import android.app.ListActivity; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +public class TileOrderActivity extends ListActivity { + public static final String PREF_KEY_TILE_ORDER = "pref_qs_tile_order"; + + private ListView mTileList; + private TileAdapter mTileAdapter; + private Context mContext; + private Resources mResources; + private SharedPreferences mPrefs; + private Map mTileTexts; + private int mTextAppearanceResId; + + @Override + public void onCreate(Bundle savedInstanceState) { + File file = new File(getFilesDir() + "/" + GravityBoxSettings.FILE_THEME_DARK_FLAG); + mTextAppearanceResId = android.R.style.TextAppearance_Holo_Medium_Inverse; + if (file.exists()) { + this.setTheme(android.R.style.Theme_Holo); + mTextAppearanceResId = android.R.style.TextAppearance_Holo_Medium; + } + + super.onCreate(savedInstanceState); + setContentView(R.layout.order_tile_list_activity); + + mContext = getApplicationContext(); + mResources = mContext.getResources(); + mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext); + + mTileList = getListView(); + ((TouchInterceptor) mTileList).setDropListener(mDropListener); + mTileAdapter = new TileAdapter(mContext); + setListAdapter(mTileAdapter); + + String[] allTileKeys = Utils.isMtkDevice() ? + mResources.getStringArray(R.array.qs_tile_values) : + mResources.getStringArray(R.array.qs_tile_aosp_values); + String[] allTileNames = Utils.isMtkDevice() ? + mResources.getStringArray(R.array.qs_tile_entries) : + mResources.getStringArray(R.array.qs_tile_aosp_entries); + mTileTexts = new HashMap(); + for (int i = 0; i < allTileKeys.length; i++) { + mTileTexts.put(allTileKeys[i], allTileNames[i]); + } + + if (mPrefs.getString(PREF_KEY_TILE_ORDER, null) == null) { + mPrefs.edit().putString(PREF_KEY_TILE_ORDER, Utils.join(allTileKeys, ",")).commit(); + } + } + + @Override + public void onStart() { + super.onStart(); + updateTileList(mPrefs); + } + + @Override + public void onDestroy() { + ((TouchInterceptor) mTileList).setDropListener(null); + setListAdapter(null); + super.onDestroy(); + } + + @Override + public void onResume() { + super.onResume(); + // reload our tiles and invalidate the views for redraw + mTileAdapter.reloadTiles(); + mTileList.invalidateViews(); + } + + private TouchInterceptor.DropListener mDropListener = new TouchInterceptor.DropListener() { + public void drop(int from, int to) { + // get the current tile list + List tiles = getOrderedTileList(); + + // move the tile + if (from < tiles.size()) { + String tile = tiles.remove(from); + + if (to <= tiles.size()) { + tiles.add(to, tile); + + // save our tiles + setCurrentTileKeys(tiles); + + // tell our adapter/listview to reload + mTileAdapter.reloadTiles(); + mTileList.invalidateViews(); + } + } + } + }; + + public static String updateTileList(SharedPreferences prefs) { + List activeTileList = new ArrayList( + prefs.getStringSet(GravityBoxSettings.PREF_KEY_QUICK_SETTINGS, + new HashSet())); + String tiles = prefs.getString(PREF_KEY_TILE_ORDER, ""); + List orderedTileList = + new ArrayList(Arrays.asList(tiles.split(","))); + + // remove those missing in active tile list + for (int i = orderedTileList.size() - 1; i >= 0; i--) { + if (!activeTileList.contains(orderedTileList.get(i))) { + orderedTileList.remove(i); + } + } + + // add those missing in ordered tile list + for (int i = 0; i < activeTileList.size(); i++) { + if (!orderedTileList.contains(activeTileList.get(i))) { + orderedTileList.add(activeTileList.get(i)); + } + } + + // save new ordered tile list + String[] newList = new String[orderedTileList.size()]; + newList = orderedTileList.toArray(newList); + final String value = Utils.join(newList, ","); + prefs.edit().putString(PREF_KEY_TILE_ORDER, value).commit(); + return value; + } + + private List getOrderedTileList() { + String tiles = mPrefs.getString(PREF_KEY_TILE_ORDER, ""); + return new ArrayList(Arrays.asList(tiles.split(","))); + } + + private void setCurrentTileKeys(List list) { + String[] newList = new String[list.size()]; + newList = list.toArray(newList); + final String value = Utils.join(newList, ","); + mPrefs.edit().putString(PREF_KEY_TILE_ORDER, value).commit(); + Intent intent = new Intent(GravityBoxSettings.ACTION_PREF_QUICKSETTINGS_CHANGED); + intent.putExtra(GravityBoxSettings.EXTRA_QS_PREFS, value); + mContext.sendBroadcast(intent); + } + + private class TileAdapter extends BaseAdapter { + private Context mContext; + private LayoutInflater mInflater; + private List mTiles; + + public TileAdapter(Context c) { + mContext = c; + mInflater = LayoutInflater.from(mContext); + + reloadTiles(); + } + + public void reloadTiles() { + mTiles = getOrderedTileList(); + } + + public int getCount() { + return mTiles.size(); + } + + public Object getItem(int position) { + return mTiles.get(position); + } + + public long getItemId(int position) { + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + final View v; + if (convertView == null) { + v = mInflater.inflate(R.layout.order_tile_list_item, null); + } else { + v = convertView; + } + + String tileKey = mTiles.get(position); + + final TextView name = (TextView) v.findViewById(R.id.name); + name.setTextAppearance(mContext, mTextAppearanceResId); + final ImageView icon = (ImageView) v.findViewById(R.id.icon); + + name.setText(mTileTexts.get(tileKey)); + + // no icon + icon.setVisibility(View.GONE); + + return v; + } + } +} From 9bccd6b0aff5cddb0bc46b4873a24a4b89535eba Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 2 Oct 2013 21:04:16 +0200 Subject: [PATCH 277/710] Long-press on GravityBox Tile brings in Tile Reordering (4.2+ only) --- .../gravitybox/quicksettings/GravityBoxTile.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/GravityBoxTile.java b/src/com/ceco/gm2/gravitybox/quicksettings/GravityBoxTile.java index 3d9add5e3c..c7f19d34ff 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/GravityBoxTile.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/GravityBoxTile.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Build; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; @@ -31,7 +32,6 @@ public GravityBoxTile(Context context, Context gbContext, Object statusBar, Obje super(context, gbContext, statusBar, panelBar); mOnClick = new View.OnClickListener() { - @Override public void onClick(View v) { Intent i = new Intent(); @@ -39,6 +39,18 @@ public void onClick(View v) { startActivity(i); } }; + + if (Build.VERSION.SDK_INT > 16) { + mOnLongClick = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Intent i = new Intent(); + i.setClassName(GravityBox.PACKAGE_NAME, TileOrderActivity.class.getName()); + startActivity(i); + return true; + } + }; + } } @Override From 09c6da2fc077bbff4a5a1d413e7d223ef4827d87 Mon Sep 17 00:00:00 2001 From: ch-vox Date: Wed, 2 Oct 2013 21:23:26 +0200 Subject: [PATCH 278/710] Updated French translation Tile reordering --- res/values-fr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index b267c28ae1..c43f43d729 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -619,4 +619,8 @@ À 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 + From 518c241d82410b9b474dc085d66a9c6fe3df5c18 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Wed, 2 Oct 2013 23:16:28 +0200 Subject: [PATCH 279/710] TileOrderActivity: make sure preferences stay world readable. When using prefs obtained from PreferencaManager.getDefaultSharedPreferences and after writing to them, the file permissions are changed preventing GB framework from being able to read them... --- .../ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java b/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java index d0b0d09d17..d73ab83981 100644 --- a/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java +++ b/src/com/ceco/gm2/gravitybox/quicksettings/TileOrderActivity.java @@ -34,7 +34,6 @@ import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; -import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -68,7 +67,8 @@ public void onCreate(Bundle savedInstanceState) { mContext = getApplicationContext(); mResources = mContext.getResources(); - mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext); + final String prefsName = mContext.getPackageName() + "_preferences"; + mPrefs = mContext.getSharedPreferences(prefsName, Context.MODE_WORLD_READABLE); mTileList = getListView(); ((TouchInterceptor) mTileList).setDropListener(mDropListener); From 8e58f8543d667ccccf176e4aa0192e15ba5095d4 Mon Sep 17 00:00:00 2001 From: pitone02 Date: Thu, 3 Oct 2013 00:46:17 +0200 Subject: [PATCH 280/710] Updated italian translation to 2.5.6 Updated italian translation to 2.5.6 --- res/values-it/strings.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 41e3f2e08e..bf5e247ec5 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -576,6 +576,24 @@ 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) + + + Mute volume adjust sound + Disables sound played when adjusting volume using volume keys + + + 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 From a3304c84be0349bbe4d331b88d6250e7c0161c3f Mon Sep 17 00:00:00 2001 From: Noumi Ryoko Date: Thu, 3 Oct 2013 08:26:19 +0900 Subject: [PATCH 281/710] Updated Japanese Translation --- res/values-ja/strings.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 16245f6779..a8f642cbda 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -39,7 +39,7 @@ 音量キー上/下で左/右に移動 音量キー上/下で右/左に移動 - 全てのアプリを終了 + 「全てのアプリを終了」ボタン 日付と時刻でのクラッシュを修正 設定で日付と時刻を開いたときにクラッシュする場合に有効にしてください。(要再起動) @@ -126,7 +126,7 @@ ステータスバー設定 - ステータスバーに関連した設定を変更します。。 + ステータスバーに関連した設定を変更します。 その他の設定 特定のカテゴリに振り分けられない設定を変更します。 全体的な修正 @@ -401,7 +401,7 @@ 右下 - 上の余白を調整 + ボタン上の余白の調整 ローミング警告の無効化 @@ -607,5 +607,9 @@ 着信終了時 着信待機時 発信時45秒毎 + + + タイルの並び替え + クイック設定タイルの並び替えをします。 From 69a3f178c738f6ca2e262d2999541e08c4ee6ba6 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 3 Oct 2013 08:18:22 +0200 Subject: [PATCH 282/710] Bring back battery percent text preference in MTK Battery Stats Removing the preference seems to be causing crash of Battery Stats on some devices. Revised functionality: Percent text will be visible when it is set either in GB or in Battery stats. Preference in battery stats has higher priority this means when it is enabled there, option in GB will be disabled. --- .../gm2/gravitybox/GravityBoxSettings.java | 17 ++++++++++ .../ceco/gm2/gravitybox/ModBatteryStyle.java | 19 +++++++++++- src/com/ceco/gm2/gravitybox/ModSettings.java | 31 +------------------ 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java index bceead7dc3..cc3aa3069f 100644 --- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java +++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java @@ -40,6 +40,7 @@ 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; @@ -517,6 +518,7 @@ private void dismissAlertDialog() { public static class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { private ListPreference mBatteryStyle; + private CheckBoxPreference mPrefBatteryPercent; private ListPreference mLowBatteryWarning; private MultiSelectListPreference mSignalIconAutohide; private SharedPreferences mPrefs; @@ -617,6 +619,7 @@ 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); @@ -1027,6 +1030,20 @@ private void updatePreferences(String key) { 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); + } } @Override diff --git a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java index adf2660e0e..855f533605 100644 --- a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java +++ b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java @@ -24,6 +24,7 @@ import android.content.Intent; import android.content.Context; import android.content.IntentFilter; +import android.provider.Settings; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; @@ -45,8 +46,13 @@ public class ModBatteryStyle { 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 boolean mMtkPercentText; private static Object mBatteryController; private static void log(String message) { @@ -67,6 +73,10 @@ public void onReceive(Context context, Intent intent) { if (DEBUG) log("mBatteryPercentText changed to: " + mBatteryPercentText); } updateBatteryStyle(); + } else if (intent.getAction().equals(ACTION_MTK_BATTERY_PERCENTAGE_SWITCH)) { + mMtkPercentText = intent.getIntExtra(EXTRA_MTK_BATTERY_PERCENTAGE_STATE, 0) == 1; + if (DEBUG) log("mMtkPercentText changed to: " + mMtkPercentText); + updateBatteryStyle(); } } }; @@ -197,8 +207,15 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { } Context context = (Context) XposedHelpers.getObjectField(mBatteryController, "mContext"); + mMtkPercentText = Utils.isMtkDevice() ? + Settings.Secure.getInt(context.getContentResolver(), + SETTING_MTK_BATTERY_PERCENTAGE, 0) == 1 : false; + 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); if (DEBUG) log("BatteryController constructed"); @@ -245,7 +262,7 @@ private static void updateBatteryStyle() { for (TextView tv : mLabelViews) { if ("percentage".equals(tv.getTag())) { tv.setVisibility( - (mBatteryPercentText ? View.VISIBLE : View.GONE)); + ((mBatteryPercentText || mMtkPercentText) ? View.VISIBLE : View.GONE)); } } } catch (Throwable t) { diff --git a/src/com/ceco/gm2/gravitybox/ModSettings.java b/src/com/ceco/gm2/gravitybox/ModSettings.java index f93b9dbd66..b92a375f01 100644 --- a/src/com/ceco/gm2/gravitybox/ModSettings.java +++ b/src/com/ceco/gm2/gravitybox/ModSettings.java @@ -15,18 +15,12 @@ package com.ceco.gm2.gravitybox; -import android.preference.CheckBoxPreference; -import android.preference.Preference; -import android.preference.PreferenceGroup; -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; public class ModSettings { private static final String TAG = "GB:ModSettings"; public static final String PACKAGE_NAME = "com.android.settings"; - private static final String CLASS_PU_SUMMARY = "com.android.settings.fuelgauge.PowerUsageSummary"; private static final boolean DEBUG = false; private static void log (String message) { @@ -35,30 +29,7 @@ private static void log (String message) { public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) { try { - final Class classPowerUsageSummary = XposedHelpers.findClass(CLASS_PU_SUMMARY, classLoader); - - XposedHelpers.findAndHookMethod(classPowerUsageSummary, "refreshStats", new XC_MethodHook() { - - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - PreferenceGroup appListGroup = (PreferenceGroup) XposedHelpers.getObjectField( - param.thisObject, "mAppListGroup"); - if (appListGroup == null) return; - - int prefCount = appListGroup.getPreferenceCount(); - for (int i = 0; i < prefCount; i++) { - // We assume there's only one checkbox preference which is the battery percent checkbox - // Assumption is a mother of all fuckups, thus: - // TODO: make this more bullet-proof - Preference pref = appListGroup.getPreference(i); - if (pref != null && pref instanceof CheckBoxPreference) { - if (DEBUG) log("CheckBoxPreference found: " + pref.getTitle() + " - removing"); - appListGroup.removePreference(pref); - break; - } - } - } - }); + // reserved for potential future use } catch (Throwable t) { XposedBridge.log(t); } From 8fa2d6f869978dd96427f0d26cd03c484d85451d Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 3 Oct 2013 09:13:35 +0200 Subject: [PATCH 283/710] Updated SK and CZ translations --- res/values-cs/strings.xml | 4 ++++ res/values-sk/strings.xml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index bd23f6ee28..6ce54894c0 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -600,4 +600,8 @@ 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 + diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 64c34ec92a..72d0f2a9dc 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -594,4 +594,8 @@ 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 + From b9c3b12a4a29ee0342384a0a0e8b9240ee878d3e Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Thu, 3 Oct 2013 08:18:53 +0100 Subject: [PATCH 284/710] Updated Portuguese (PT) translation --- res/values-pt-rPT/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 78be3e5f78..b9df1ad980 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -604,4 +604,8 @@ 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 + From c7fc27df4594dc8924c78baf27871efc9f626229 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Thu, 3 Oct 2013 09:30:39 +0200 Subject: [PATCH 285/710] Version 2.5.7 --- AndroidManifest.xml | 4 ++-- CHANGELOG.txt | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 67dba000a0..810b6251c8 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -16,8 +16,8 @@ + android:versionCode="35" + android:versionName="2.5.7" > Date: Thu, 3 Oct 2013 13:04:08 +0200 Subject: [PATCH 286/710] Updated Chinese (Traditional) translations (thanks to Eric850130) --- res/values-zh-rTW/strings.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index a3a39e6897..f37b887232 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -530,7 +530,7 @@ 鎖定螢幕滑動主滑動 目標應用程式 %s 解鎖環底部偏移 - + 啟用亮度控制 調整滑動狀態列時的亮度 @@ -586,4 +586,24 @@ 完整保持預設電池圖示 當預設電池圖是被換成第三方電池圖示時使用 + + + 取消傳輸時開啟螢幕 + 啟用時,如果您插入/拔出 USB 傳輸線/電源/其他輸入輸出裝置,螢幕將會開啟 (需要重新啟動) + + + 音量調節 + 當使用音量鍵調節音量時停用音效 + + + 通話振動 + 在電話接通後 + 在通話未被接通時 + 在通話等待時 + 撥出通話期間每 45 秒振動一次 + + + 瓷貼排序 + 可讓的 QuickSettings 瓷貼重新排序 + \ No newline at end of file From 5703d409c3269b71eb7c33106831f9380fb3ae91 Mon Sep 17 00:00:00 2001 From: Roman Butok Date: Thu, 3 Oct 2013 16:02:44 +0300 Subject: [PATCH 287/710] Updated Russian translation --- res/values-ru/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 2301fdf8b7..a7fb2d685c 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -604,5 +604,9 @@ В конце звонка При ожидании звонка Каждые 45 секунд при исходящем + + + Сортирвока тайлов + Позволяет сортировать тайлы From e4ef0e6f30a558dd07a706eabb4c2221e4856051 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Fri, 4 Oct 2013 11:20:24 +0200 Subject: [PATCH 288/710] Updated German translations (thanks to samsonbear) --- res/values-de/strings.xml | 232 +++++++++++++++++++------------------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index c3b7045b2c..f41e26bb7d 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -11,7 +11,7 @@ Keine Anzeige Lautstärketasten überspringen Musiktitel - Überspringe Musiktitel durch langes drücken der Lautstärketasten während der Bildschirm aus ist + Überspringe Musiktitel durch langes drücken der Lautstärketasten, während der Bildschirm abgeschaltet ist Warnung bei niedrigem Akkustand Benachrichtigung und Warnton @@ -40,19 +40,19 @@ Alle zuletzt geöffneten Anwendungen schließen - Datums&Zeit Einstellungs Absturz beheben - Aktivieren, falls Abstürze beim Aufrufen der Datums&Zeit Einstellungen auftreten (Neustart erforderlich) + \'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 von Contacts Provider zu löschen. + 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 von selbst aktiviert (Neustart erforderlich) + Aktivieren, falls sich der Bildschirm sporadisch selbsttätig aktiviert (Neustart erforderlich) Wichtig @@ -75,12 +75,12 @@ Deaktiviert Normal Erweitert - Wach halten an - Wach halten aus + Wachhalten an + Wachhalten aus Schnelleinstellungs-Verknüpfungen in der Statusleiste - Erlaubt es Schnelleinstellungs-Verknüppfungen in der Statusleiste anzuzeigen oder zu verstecken + Erlaubt es, Schnelleinstellungs-Verknüpfungen in der Statusleiste anzuzeigen oder zu verstecken Benutzerprofil Flugmodus Akku @@ -92,7 +92,7 @@ Mobiler Datenverkehr Audioprofile Helligkeit - Displayabschaltung + Bildschirmabschaltung Autorotation Synchronisation WLAN-Hotspot @@ -102,7 +102,7 @@ Aufnahme Einstellungen Erweiterter Desktop - Wach halten + Wachhalten Farbwähler @@ -114,19 +114,19 @@ Behebt Spracheingabe-Einstellungen - Schaltet Sprachsuche und Text-in-Sprache-Ausgabe in den Sprache & Eingabe Einstellungen frei (Neustart erforderlich) + Schaltet \'Sprachsuche\' und \'Text-in-Sprache-Ausgabe\' im \'Sprache & Eingabe\'-Einstellungsmenü frei (Neustart erforderlich) Erweiterte Entwickler-Optionen Schaltet erweiterte Entwickler-Optionen frei (Neustart erforderlich) - Statusleisten-Optimierungen - Beinhaltet einige Optionen um die Statusleiste anzupassen - Diverse Optimierungen - Beinhaltet alle Optimierungen die in keine speziellere Kategorie passen + Statusleiste optimieren + Beinhaltet einige Optionen, um die Statusleiste anzupassen + Diverses optimieren + Beinhaltet alle Optimierungen, die in keine spezielle Kategorie passen Allgemeine Einstellungen - Beinhaltet allgemeine Einstellungen, die Fehler beim MTK6589 beheben. Nur benutzen falls notwendig. + Beinhaltet allgemeine Einstellungen, die Fehler beim MTK6589 beheben. Nur benutzen, falls notwendig! Über @@ -134,7 +134,7 @@ Xposed Framework Programmiert von rovo89@XDA. Berühren, um den offiziellen Foreneintrag zu öffnen. Spenden - An mich Spenden, falls du glaubst die App sei es wert! Erwäge es auch an rovo89 für sein exzellentes Xposed Framework zu spenden. + Bitte an mich Spenden, falls dir die App gefällt! Erwäge es auch an rovo89 für sein exzellentes Xposed Framework zu spenden. %s wird neu gestartet. @@ -146,15 +146,15 @@ Aktiviert eine Animation, die das Ausschalten eines Röhrenmonitors simuliert, wenn der Bildschirm ausgeschaltet wird - Engineering Modus - Startet die Engineering Modus Anwendung + 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 + Startet eine Anwendung, die es erlaubt, für die beiden SIM-Karten unterschiedliche Rufton- und Benachrichtigungslautstärken einzustellen - Sperrbildschirm-Optimierungen + Sperrbildschirm optimieren Beinhaltet einige Anpassungen für den Sperrbildschirm Lockscreen-Hintergrund Hintergrund-Stil @@ -172,7 +172,7 @@ Wenn aktiviert, werden Widgets auf dem Sperrbildschirm maximiert - Ausschaltmenü-Optimierungen + Ausschaltmenü optimieren Beinhaltet einige energiebezogene Optimierungen @@ -180,37 +180,37 @@ Deaktivert aufdringlich blinkende LED, wenn der Akkustatus niedrig ist und nicht geladen wird. - Bildschirm-Optimierungen - Beinhaltet einige Bildschirm-Optimierungen + Bildschirm optimieren + Beinhaltet einige Optionen, um den Bildschirm anzupassen Minimale Helligkeitsstufe - Erlaubt es die minimale Helligkeitsstufe zu ändern. Wirkt sich auf die manuelle Helligkeitseinstellung aus. (Neustart erforderlich) + Erlaubt es, die minimale Helligkeitsstufe zu ändern. Wirkt sich auf die manuelle Helligkeitseinstellung aus. (Neustart erforderlich) Wert zwischen: 10 – 80 Automatische Helligkeitsstufen - Erlaubt es für bestimmte Umgebungshelligkeit die Bildschirmhelligkeit zu bestimmen + Erlaubt es, für eine bestimmte Umgebungshelligkeit die Bildschirmhelligkeit zu bestimmen Helligkeitsstufe Lux max Helligkeit (10 – 255) - Eingebener Wert ist ungültig - Es ist nicht empfohlen die Helligkeitsstufe unter 10 zu setzen + Eingegebener Wert ist ungültig + Es ist nicht empfohlen, die Helligkeitsstufe unter 10 zu setzen Die Helligkeitsstufe kann nicht höher als 255 gesetzt werden Werte können nicht weniger als 0 oder 0 betragen - 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 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 - Aktiviere Sperrbildschirm Rotation - Achtung: Möglicherweise werden die Entsperr-Ring Apps getauscht, wenn der AOSP-Sperrbildschirm vom Hersteller verändert wurde + 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) + Wenn aktiviert, kann die Menü-Taste zum schnellen Entsperren genutzt werden. (Neustart erforderlich) Behebt aufwachen durch Nachrichten @@ -220,7 +220,7 @@ Uhrzeit in der Mitte - Medien-Optimierungen + Medien optimieren Beinhaltet einige Optimierungen für Medien- und Audio-Einstellungen @@ -228,7 +228,7 @@ Fügt weitere Lautstärkestufen für Musik-Wiedergabe hinzu (Neustart erforderlich) - Kopfhörer Lautstärke begrenzen + Kopfhörer-Lautstärke begrenzen Aktiviert oder deaktiviert die Lautstärkebegrenzung bei Kopfhörern @@ -236,61 +236,61 @@ Deaktiviert die LED während der Akku geladen wird - Hardware Tastenbelegung - Erlaubt es die Hardwaretasten benutzerdefiniert zu belegen - Aktion beim lange drücken der Menütaste - Aktion beim doppelt drücken der Menütaste - Aktion beim lange drücken der Zurücktaste + 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 + 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 Doppelt drücken gewertet 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. Anwendung beendet Nichts zu beenden - Keine vorherige Apps gefunden + Keine vorherige App gefunden - Anruf-Optimierungen - Beinhaltet einige Anruf-bezogene Optimierungen + Anrufe optimieren + Beinhaltet diverse Anruf-bezogene Optimierungen - Umdreh Aktion bei Anruf - Erlaubt es einzustellen was für eine Aktion durchgeführt wird, wenn das Telefon bei einem eingehendem Anruf umgedreht wird (Bildschirm nach unten) - Nichts tun + 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 - Deaktiviere Vibration wenn Anruf angenommen wird - Deaktiviert Vibration die beim Annehmen eines Anrufs ausgelöst wird + Deaktiviere Vibration, wenn Anruf angenommen wird + Deaktiviert Vibration, die beim Annehmen eines Anrufs ausgelöst wird Sanfter Neustart Schwarzer Hintergrund - Benutze einen schwarzen Hintergrund für das Holo System Theme anstelle des Schwarz-Grau Verlaufs (Neustart erforderlich) + Benutze einen schwarzen Hintergrund für das Holo-System-Theme, anstelle des Schwarz-Grau Verlaufs (Neustart erforderlich) Verknüpfungen pro Reihe - Lege 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). + 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 Tag der Woche an + 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 (Benachrichtigun, Anrufton) + 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 + Wenn deaktiviert, lassen sich die Lautstärkestufen für Anrufe und Benachrichtigungen separat einstellen Automatisch zu Schnelleinstellungen wechseln @@ -305,44 +305,44 @@ Deaktiviert aufwachen durch Lautstärketasten - Für Geräget wie das Jiayu G3s, G4 bei denen die Lautstärketasten den Bildschirm anschalten + Für Geräte (z.B. Jiayu G3s, G4), bei denen die Lautstärketasten den Bildschirm anschalten Farbe der Statusleiste - Aktiviere farbige Icons + Aktiviere farbige Symbole - Farbe der Statusleisten Icons - Wähle Farbe für die Icons und die Uhr in der Statusleiste + 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 + Farbe für Aktivität der Datenverbindung + Wählt die Farbe für die Aktivität der Datenverbindung - Schnelleinstellungen anpassen + Schnelleinstellungen optimieren Stil der Benachrichtigungsleiste Hintergrund der Benachrichtigungsleiste - Standard Hintergrund - benutzerdefinierte Farbe - benutzerdefiniertes Bild + Standard-Hintergrund + Benutzerdefinierte Farbe + Benutzerdefiniertes Bild Wähle Hintergrundfarbe - Wähle Portrait (Hochformat) Bild - Wähle Landscape (Querformat) Bild - Hintergrund Transparenz - Hintergrund Modus - über benachrichtigungen - unter benachrichtigungen + Wähle Portrait-Bild (Hochformat) + Wähle Landscape-Bild (Querformat) + Hintergrund-Transparenz + Hintergrund-Modus + über Benachrichtigungen + unter Benachrichtigungen - Deaktiviere Roaming Icons - Wenn deaktiviert wird das R Icon während dem Roaming nicht angezeigt. Mit Vorsicht benutzen. + Deaktiviere Roaming-Symbole + Wenn deaktiviert, wird das \'R\'-Symbol während des Roamings nicht angezeigt. Mit Vorsicht benutzen! Lädt (%d%%) @@ -355,27 +355,27 @@ Nur Notrufe - Pie controls - Aktiviere pie controls - Zeige Suchen Button - Navigationstasten größe - Auslöse Positionen + Pie-Steuerung + Aktiviere Pie-Steuerung + Suchschaltfläche anzeigen + Größe der Navigationstasten + Auslöse-Positionen linker Bildschirmrand unterer Bildschirmrand rechter Bildschirmrand oberer Bildschirmrand - Tasten Hintergrundbeleuchtung + Tasten-Hintergrundbeleuchtung Standard - Deaktiviere Tasten Hintergrundbeleuchtung - Immer an wenn der Bildschirm an ist - An wenn Benachrichtigungen vorliegen - EXPERIMENTAL! Blinkt wenn eine Benachrichtigung vorliegt. Als Alternative für Geräte ohne Benachrichtigungs LED. Erhöht Akkuverbrauch. + 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 Controls aktiviert sind (Für Geräte, die eine Navigationsleiste haben. Neustart erforderlich.) + Versteckt die Navigationsleiste, wenn Pie-Steuerung aktiviert ist (Für Geräte, die eine Navigationsleiste haben. Neustart erforderlich.) Geditherter Holo-Hintergrund @@ -383,11 +383,11 @@ Deaktiviert Hardwaretasten - Deaktiviert die Menü-, Zurück- & Home-Taste, wenn Pie Controls aktiviert sind. Hardwaretastenbelegung funktioniert weiterhin (lange drücken, doppelt drücken). (Für Geräte die Hardwaretasten besitzen) + Deaktiviert die Menü-, Zurück- & Home-Taste, wenn die Pie-Steuerung aktiviert ist. Hardwaretastenbelegung funktioniert weiterhin (lange drücken, doppelt drücken). (Für Geräte die Hardwaretasten besitzen) - Benutze dunkles Holo Theme - Ändert das GB UI auf ein dunkles Holo Theme + Benutze dunkles Holo-Theme + Ändert das GB-UI auf ein dunkles Holo-Theme Aus @@ -397,11 +397,11 @@ Unten rechts - oberen Rand einstellen + Oberen Rand einstellen - Deaktiviere Roaming Warnungen - Deaktiviert Roaming Warnungen wenn eine Nachricht gesendet oder ein Anruf getätigt wird während des Roamings + Deaktiviere Roaming-Warnungen + Deaktiviert Warnmeldungen, wenn während des Roamings eine Nachricht gesendet oder ein Anruf getätigt wird Suche @@ -409,8 +409,8 @@ Schnelleinstellungen - Schnelleinstellungs Verknüpfungen anpassen - Haupt Anwendung + Schnelleinstellungs-Verknüpfungen anpassen + Hauptanwendung App 1 lange drücken App 2 lange drücken App 3 lange drücken @@ -469,23 +469,23 @@ 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! + Starte benutzerdefinierte App 1 + Benutzerdefinierte App 1 einstellen + Starte benutzerdefinierte App 2 + Benutzerdefinierte App 2 einstellen + Keine benutzerdefinierte App zugewiesen! + Benutzerdefinierte App wurde nicht gefunden! 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. + Warte auf Antwort vom GravityBox System Framework… + GravityBox System Framework antwortet nicht. Verlassen. - National data roaming + Nationales Daten-Roaming Connect to data services when nationally roaming @@ -502,14 +502,14 @@ Screenshot - Show menu + Menü anzeigen Toggle expanded desktop - Expanded desktop mode is disabled! + Erweiterter Desktop-Modus ist deaktiviert! - Navigationsleisten-Optimierungen + Navigationsleiste optimieren Contains various navigation bar related tweaks Override system defaults Master switch for navigation bar tweaks (Neustart erforderlich) @@ -523,7 +523,7 @@ Always show menu key - Screenshot in power menu + Screenshot im Ausschaltmenü Unlock ring settings @@ -534,8 +534,8 @@ Unlock ring horizontal offset - Enable brightness control - Adjusts brightness by sliding over statusbar + Helligkeitsregelung aktivieren + Einstellen der Helligkeit durch Wischen über die Statusleiste Telefonie @@ -576,8 +576,8 @@ Network mode tile SIM slot Defines SIM slot to which network mode tile applies (%s) - SIM slot 1 - SIM slot 2 + SIM-Steckplatz 1 + SIM-Steckplatz 2 Nie @@ -598,10 +598,10 @@ 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 + Anruf-Vibrationen + Anruf verbunden + Anruf getrennt + Anruf wartend + Alle 45 Sekunden bei ausgehendem Anruf \ No newline at end of file From 507e94096c8446482838ae71505811d5bd242c12 Mon Sep 17 00:00:00 2001 From: liveasx Date: Fri, 4 Oct 2013 17:46:17 +0800 Subject: [PATCH 289/710] Update strings.xml No Updata! --- res/values-zh-rCN/strings.xml | 102 +++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 8 deletions(-) diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index f9d4630f3b..95d90774fd 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -3,8 +3,8 @@ GravityBox - 电量指示图桉样式 - 原厂电量指示图桉 + 电量指示图案风格 + 原厂电量指示图案 圆形电量图示(不包含百分比) 圆形电量图示(包含百分比) 电量百分比文字 @@ -28,8 +28,8 @@ 关闭提醒 「SIM 卡未插入」提醒已停用 - 进阶重新启动选单 - 启用有重新启动至 Recovery 选项的进阶重新启动选单 + 高级重新启动菜单 + 启用重新启动至 Recovery 选项的高级重新启动菜单 Recovery Bootloader @@ -52,7 +52,7 @@ 如果来自同一个人的简讯被分成不同的会话串,启用这个选项(需要重新启动) 为了让更动生效,您应该在重新启动后,于「讯息」应用程式内删除全部被拆散的会话串! - 修正「行事曆」应用程式 + 修正「日历」应用程式 若您週期性地遇到萤幕自动开启时,启用这个选项(需要重新启动) 重要 @@ -68,7 +68,7 @@ 手电筒开启 手电筒关闭 按下以关闭 - 播放中… + 播放中… 录音中… 已录音 长按以录音 @@ -518,5 +518,91 @@ 海苔条宽度 应用于当萤幕呈现横放方向 永远显示选单键 - - \ No newline at end of file + + + 电源菜单截图 + + + 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) + + + 停用GPS通知 + + + 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 + + + 从不 + 总是 + 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) + + + 音量键调节 + 音量键调节音量时停用音效 + + + 通话振动 + 启用电话接通振动 + 启用通话结束振动 + 启用通话等待震动 + 通话期间每45秒振动一次 + + + Tile reordering + Allows reordering of QuickSettings tiles + + From 4a352742790075ccfe235654f030e15bd799cc62 Mon Sep 17 00:00:00 2001 From: liveasx Date: Fri, 4 Oct 2013 21:04:18 +0800 Subject: [PATCH 290/710] Updated Chinese Translations To 2.5.7 Updated Chinese Translations To 2.5.7 --- res/values-zh-rCN/strings.xml | 516 ++++++++++++++++++---------------- 1 file changed, 267 insertions(+), 249 deletions(-) diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 95d90774fd..f1136a8259 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -1,68 +1,83 @@ + + GravityBox 电量指示图案风格 原厂电量指示图案 - 圆形电量图示(不包含百分比) - 圆形电量图示(包含百分比) + 圆形电量图案(不包含百分比) + 圆形电量图案(包含百分比) 电量百分比文字 - 音量键跳过曲目 - 当萤幕关闭时,长按音量键以跳过曲目 + 音量键跳过歌曲 + 当屏幕关闭时,长按音量键以跳过歌曲 低电量警告 - 弹出视窗以及音效 - 仅弹出视窗 + 弹出窗口以及音效 + 仅弹出窗口 仅音效 关闭 - 重新启动以后才会套用更动 + 重新启动以后设置才会更改 - 自动隐藏讯号强度图示 - 隐藏指定 SIM 卡槽的讯号强度图示(若该卡槽未插入 SIM 卡时)、停用「SIM 卡未插入」提醒 - 自动隐藏 SIM 卡槽 1 - 自动隐藏 SIM 卡槽 2 - 关闭提醒 + 自动隐藏讯号强度图标 + 隐藏指定 SIM 卡的讯号强度图标(若该卡槽未插入 SIM 卡时)、停用「SIM 卡未插入」提醒 + 自动隐藏 SIM 1卡 + 自动隐藏 SIM 2卡 + 关闭通知提醒 「SIM 卡未插入」提醒已停用 高级重新启动菜单 - 启用重新启动至 Recovery 选项的高级重新启动菜单 + 启用 重新启动 和 Recovery 选项高级菜单 Recovery Bootloader 音量键游标控制 在文字输入区域内,以音量键控制游标位置 停用 - 音量增/减钮控制游标向左/向右 - 音量增/减钮控制游标向右/向左 + 音量键增/减钮控制游标向左/向右 + 音量键增/减钮控制游标向右/向左 - 清除全部最近使用的应用程式 + 清除全部最近使用的应用程序 - 修正「日期与时间设定」错误 - 当您进入日期与时间设定时发生错误时,启用这个选项(需要重新启动) + 修正「日期与时间设置」错误 + 当您进入日期与时间设置发生错误时,启用这个选项(需要重新启动) 修正通话的来电显示 若您来电画面上显示的联络人与您的通讯录不合,启用这个选项(需要重新启动) - 为了让更动生效,您应该在重新启动后删除并重新添加所有联络人!(请于 设定>应用程式>全部 分页中找寻「联络人」应用程式并且选择清除资料) + 为了让更动生效,您应该在重新启动后删除并重新添加所有联络人!(请于 设置>应用程序>全部 分页中找寻「联络人」应用程序并且选择清除资料) - 修正简讯的来电显示 - 如果来自同一个人的简讯被分成不同的会话串,启用这个选项(需要重新启动) - 为了让更动生效,您应该在重新启动后,于「讯息」应用程式内删除全部被拆散的会话串! + 修正短信的来电显示 + 如果来自同一个人的短信被分成不同的会话串,启用这个选项(需要重新启动) + 为了让更动生效,您应该在重新启动后,于「短信」应用程序内删除全部被拆散的会话串! - 修正「日历」应用程式 - 若您週期性地遇到萤幕自动开启时,启用这个选项(需要重新启动) + 修正日历应用程序 + 若您週期性地遇到屏幕自动开启时,启用这个选项(需要重新启动) 重要 - 全萤幕的来电者相片 - 在来电画面内显示来电者的全萤幕相片 + 全屏来电者相片 + 在来电画面内显示来电者的全屏相片 - 同步处理开启 - 同步处理关闭 + 同步开启 + 同步关闭 Wi-Fi AP 开启 Wi-Fi AP 关闭 手电筒开启 @@ -76,64 +91,69 @@ 关闭 正常 开启 + 保持唤醒 + 唤醒关闭 - 状态列快速设定磁贴 - 可以设定状态列的快速设定内,各个磁贴选项的显示或隐藏 - 拥有者 + 状态栏快速设置 + 允许在状态栏快速设置各个选项的显示或隐藏 + 用户配置文件 飞航模式 电池状态 Wi-Fi 蓝牙 GPS - 资料连结 + GPS (CM 风格) + 移动数据 网路模式 - 资料用量 - 情境模式 + 数据使用 + 音频配置文件 亮度 - 休眠 + 屏幕超时 自动旋转 同步功能 - Wi-Fi 存取点 + Wi-Fi 接入点 手电筒 GravityBox - 关闭萤幕 + 关闭屏幕 快速录音 - 设定 + 设置 音量 - 全萤幕功能 + 扩展桌面 + 保持唤醒 + 屏幕截图 颜色选择器 - 在颜色上按下以套用 + 在颜色上按下以应用 - 状态列背景颜色 - 可在此设定状态列的背景颜色与透明度 + 状态栏背景颜色 + 可在此设置状态栏的背景颜色与透明度 - 修正语音设定 - 解锁位在语言与输入设定内的「文字转语音输出」设定(需要重新启动) + 修正语音设置 + 解锁位在语言与输入设置内的「文字转语音输出」设置(需要重新启动) - 进阶的开发人员选项 - 解锁进阶的开发人员选项(需要重新启动) + 高级开发人员选项 + 解锁高级开发人员选项(需要重新启动) - 状态列调校 - 包含各种状态列的调校选项 - 杂项 - 包含所有不属于特定类别的调校选项 + 状态栏调整 + 包含各种状态栏的调整选项 + 杂项调整 + 包含所有不属于特定类别的调整选项 通用修正 包含 MTK6589 通用的修正。请只在有需要时使用。 关于 - 由 C3C076@XDA 编写。点选此处以拜访官方的讨论串。 + 由 C3C076@XDA 编写。点击此处以进入官方讨论链接。 Xposed 框架 - 由 rovo89@XDA 编写。点选此处以拜访官方的讨论串。 + 由 rovo89@XDA 编写。点击此处以进入官方讨论链接。 捐助 - 若您觉得这个 app 好用的话,请贊助我!也请考虑捐助给编写出优秀的 Xposed 框架的 rovo89。 + 若您觉得这个程序好用的话请捐助我!也请考虑捐助给编写出优秀的 Xposed 框架的 rovo89作者。 您的 %s 将重新启动 @@ -141,86 +161,86 @@ 您的 %s 将重新启动至 Bootloader - CRT 萤幕关闭特效 - 当萤幕关闭时,使用旧式 CRT 萤幕关闭时的特效 + CRT 屏幕关闭特效 + 当屏幕关闭时,使用旧式 CRT 屏幕关闭时的特效 工程模式 - 启动「工程模式」应用程式 + 启动「工程模式」应用程序 双 SIM 卡铃声 - 启动可以设定各个 SIM 卡的铃声与通知音效的应用程式 + 启动可以设置各个 SIM 卡的铃声与通知音效的应用程序 - 锁定画面调校 - 包含各种锁定画面的调校选项 + 锁定画面调整 + 包含各种锁定画面的调整选项 锁定画面背景 - 背景样式 - 预设桌布 + 背景风格 + 默认壁纸 纯色 - 自订图桉 - 设定自订颜色 - 可以为锁定画面设定自订的背景颜色 - 设定自订影像 - 可以为锁定画面设定自订的背景影像 + 自定图案 + 设置自定颜色 + 可以为锁定画面设置自定的背景颜色 + 设置自定图像 + 可以为锁定画面设置自定的背景图像 背景已更改 背景未更改 - 其他 + 其它 最大化小工具 - 若启用这个选项,锁定画面的小工具预设都会被最大化 + 若启用这个选项,锁定画面的小工具默认都会被最大化 - 电源调校 - 包含各种电源相关的调校选项 + 电源调整 + 包含各种电源相关的调整选项 停用 LED 闪烁 停掉当低电量且未充电时会出现的扰人 LED 闪烁 - 显示调校 - 包含各种显示相关的调校选项 + 显示调整 + 包含各种显示相关的调整选项 - 最低亮度层级 - 可以设定最低的亮度层级。在手动设定亮度时适用。(需要重新启动) - 设定值的范围:10 – 80 + 最低亮度级别 + 可以设置最低的亮度级别。在手动设置亮度时适用。(需要重新启动) + 设置值的范围:10 – 80 - 自动亮度层级 - 可以设置环境的亮度层级与相对应的 LCD 背光值 - 层级 + 自动亮度级别 + 可以设置环境的亮度级别与相对应的 LCD 背光值 + 级别 最大照度(lux) 亮度(10 – 255) 指定的值不被接受 不建议将亮度设为 10 以下 亮度无法大于 255 值无法低于 0 - 较低层级的值无法大于较高层级的值 - 较高层级的值无法小于较低层级的值 - 已设定%s 的值 - 已储存新的自动亮度组态 - 「没有」储存新的自动亮度组态 + 较低级别的值无法大于较高级别的值 + 较高级别的值无法小于较低级别的值 + 已设置%s 的值 + 已保存新的自动亮度 + 没有保存新的自动亮度 启用锁定画面旋转 - 警告:若 AOSP 的锁定萤幕曾被厂商修改,某些装置的解锁环目标可能遭到互换 + 警告:若 AOSP 的锁定屏幕曾被厂商修改,某些装置的解锁环目标可能遭到互换 - 启用选单键 - 令选单键在锁定画面可以用来快速地解锁装置(需要重新启动) + 启用菜单键 + 让菜单键在锁定画面时可以用来快速地解锁装置(需要重新启动) - 修正讯息的唤醒锁 - 避免在收到新讯息时唤醒萤幕(需要重新启动) + 修正短信的唤醒锁 + 避免在收到新短信时唤醒屏幕(需要重新启动) - 时钟置中 + 时间居中 - 媒体调校 - 包含各种媒体与声音系统的调校选项 + 媒体调整 + 包含各种媒体与声音系统的调整选项 更多音乐音量的调整段数 @@ -236,108 +256,104 @@ 实体按键动作 - 可在此为实体按键设定自订的动作 - 选单键长按动作 - 选单键双击动作 + 可在此为实体按键设置自定的动作 + 菜单键长按动作 + 菜单键双击动作 返回键长按动作 - 预设 - 搜寻 - 语音搜寻 - 切换至上一个应用程式 - 结束正在使用的应用程式 - 使装置休眠 - 结束应用程式的长按延迟 - 适用于「结束正在使用的应用程式」动作。定义按键需要按下持续多久才会触发动作 + 默认 + 搜索 + 语音搜索 + 切换到上一个应用程序 + 结束正在使用的应用程序 + 使装置休眠 + 结束应用程序的长按延迟 + 适用于「结束正在使用的应用程序」动作。定义按键需要按下持续多久才会触发动作 双击速度 - 适用于选单键的双击动作。定义按键需要在多少时间内连续按两下才会触发动作 - 应用程式已结束 - 无应用程式可结束 - 找不到上一个应用程式 + 适用于菜单键的双击动作。定义按键需要在多少时间内连续按两下才会触发动作 + 应用程序程序已结束 + 无应用程序可结束 + 找不到上一个应用程序 - 电话调校 - 包含各种通话的调校选项 + 电话调整 + 包含各种通话的调整选项 响铃时的手机翻转动作 - 可定义在响铃时,翻转使得萤幕向下时执行的动作 + 可定义在响铃时,翻转使得屏幕向下时执行的动作 铃声静音 拒接电话 - - 停用接通时的震动 - 停用在通话接通时所触发的震动 - 软重启 - + 纯黑色背景 - 在预设的 Holo 系统内建佈景主题内使用纯黑色的背景,而不是黑-灰色的渐层(需要重新启动) + 在默认的 Holo 系统内建佈景主题内使用纯黑色的背景,而不是黑-灰色的渐层(需要重新启动) - - 每列磁贴数 - 定义快速设定内每列有几个磁贴。磁贴会根据您的设定自动缩放。适用于竖屏。 + + 每行开关数 + 定义快速设置内每行有几个开关。开关会根据您的设置自动缩放。适用于竖屏。 - - 显示目前是一週的哪一天 + + 显示星期 可扩展音量面板 启用此选项使您可以调整不同串流的音量 - 将铃声音量与通知音量连结 - 当启用时,铃声音量与通知音量将可以分别调整 + 将铃声音量与通知音量连接 + 禁用时铃声音量与通知音量将可以分别调整 - 自动切换快速选单 - 当没有通知时,下拉状态列自动切换成快速设定选单 + 自动切换快速菜单 + 当没有通知时,下拉状态栏自动切换成快速设置菜单 - 快速设定选单下拉位置 - 选择下拉状态列边缘启用快速选单的位置 + 快速设置菜单下拉位置 + 选择下拉状态栏边缘启用快速菜单的位置 关闭 右边 左边 - 关闭音量键唤醒萤幕 - 佳域 G3s 和 G4 的实体音量键会唤醒萤幕 + 关闭音量键唤醒屏幕 + 佳域 G3s 和 G4 的实体音量键会唤醒屏幕 - 状态列颜色 + 状态栏颜色 - 开启更改状态列图示颜色 + 开启更改状态栏图标颜色 - 状态列图示颜色 - 设定状态列图示和时钟的颜色 + 状态栏图标颜色 + 设置状态栏图标和时钟的颜色 资料传输颜色 - 设定传输资料时的颜色 + 设置传输资料时的颜色 - 管理快速设定选单 + 管理快速设置菜单 - 通知列样式 + 通知栏风格 - 通知列背景 - 预设背景 + 通知栏背景 + 默认背景 纯色 - 自订图桉 - 设定背景颜色 - 设定直向图片 - 设定横向图片 + 自定图案 + 设置背景颜色 + 设置竖向图片 + 设置横向图片 背景透明度 背景模式 - 叠加 - 衬底 + 覆盖 + 底图 隐藏漫游指示 @@ -346,43 +362,43 @@ 充电中 (%d%%) 电量已满 - %d%% remaining + %d%% 剩下 没有服务 - 飞航模式启用 + 飞行模式已启用 仅能拨打紧急电话 - Pie Controls - 启用 Pie Controls + 虚拟键控制 + 启用Pie controls虚拟键控制 显示搜寻按键 导航键大小 触发位置 - 萤幕左边缘 - 萤幕下边缘 - 萤幕右边缘 - 萤幕上边缘 + 屏幕左边缘 + 屏幕下边缘 + 屏幕右边缘 + 屏幕上边缘 背光灯行为模式 - 预设 + 默认 关闭背光灯 - 当萤幕唤醒时背光灯永远打开 + 当屏幕唤醒时背光灯永远打开 背光灯通知效果 - 这个设定是实验性的!当收到通知时背光灯会闪烁提醒。建议当您的装置没有 LED 通知灯时才开启,此功能可能会消耗部分电量 + 这个设置是实验性的!当收到通知时背光灯会闪烁提醒。建议当您的装置没有 LED 通知灯时才开启,此功能可能会消耗部分电量 - 隐藏海苔条 - 当 Pie Controls 启用时隐藏海苔条(需要重新启动) + 隐藏虚拟键 + 当 Pie Controls 虚拟键启用时隐藏系统自带虚拟键(需要重新启动) 优化 Holo 背景 - 取代原本不完美渐层的预设 Holo 黑-灰色背景(需要重新启动) + 取代原本不完美渐层的默认 Holo 黑-灰色背景(需要重新启动) 关闭实体按键 - 当 Pie Controls 启用时将会关闭选单键、返回键与 HOME 键功能,但是实体按键功能仍可使用(如果您的装置有实体按键) + 当 Pie Controls 启用时将会关闭菜单键、返回键与 HOME 键功能,但是实体按键功能仍可使用(如果您的装置有实体按键) 使用 Holo 黑色背景主题 @@ -396,37 +412,38 @@ 右下角 - Adjust top margin + 调整上边距 关闭漫游警告 - 关闭当漫游时传送讯息或拨打电话的警告 + 关闭当漫游时传送短信或拨打电话的警告 - 搜寻 + 搜索 (无) - 快速应用程式选单 - 快速应用程式选单设定 - 主要应用程式 - 长按应用程式槽 1 - 长按应用程式槽 2 - 长按应用程式槽 3 - 长按应用程式槽 4 + 快速应用程序菜单 + 快速应用程序菜单设置 + 主要应用程序 + 长按应用程序槽 1 + 长按应用程序槽 2 + 长按应用程序槽 3 + 长按应用程序槽 4 开启 GPS 关闭 GPS + GPS 已关闭 - 总是显示选单按键 + 总是显示菜单按键 铃声模式 - 时钟设定 + 时钟设置 隐藏 AM/PM @@ -439,123 +456,124 @@ 透明度调整 - 启动器下的状态列透明度 - 锁定画面时的状态列透明度 - 启动器下的海苔条透明度 - 锁定画面时的海苔条透明度 + 启动器下的状态栏透明度 + 锁定画面时的状态栏透明度 + 启动器下的虚拟键透明度 + 锁定画面时的虚拟键透明度 - 隐藏闹钟图示 + 隐藏闹钟图标 - Screen dim level - Amount of brightness for dim state - when screen is about to be turned off (requires reboot) + 屏幕暗淡级别 + 当屏幕被关闭暗淡级别(需要重新启动) 手机 平板 - 亮度设定 - 启用亮度设定 + 亮度设置 + 启用亮度设置 这个功能只能在您的手机支援标准的 Android 亮度调整才启用。如果您遇到任何亮度问题请关闭此选项(需要重新启动) - 显示最近使用的应用程式 + 显示最近使用的应用程序 长按 HOME 键动作 - 执行自订的应用程式 1 - 设定自订应用程式 1 - 执行自订的应用程式 2 - 设定自订应用程式 2 - 没有指定应用程式! - 未找到自订应用程式! + 执行自定的应用程序 1 + 设置自定应用程序 1 + 执行自定的应用程序 2 + 设置自定应用程序 2 + 没有指定应用程序! + 未找到自定应用程序! - 与「时钟」应用程式做连结 - 启用此功能后状态列的时间将与应用程式「时钟」做连结而非原本「日期与时间设定」 + 通知面板时钟程序 + 启用此功能后状态栏的时间将与应用程序做链接 等待 GravityBox 系统框架的回应… GravityBoy 系统框架无反应。离开中 - National data roaming - Connect to data services when nationally roaming + 国际数据漫游 + 国际漫游时连接到数据服务 - 全萤幕模式 + 全屏幕模式 关闭 - 隐藏状态列 - 隐藏海苔条 - 隐藏状态列与海苔条 - 全萤幕功能 - 全萤幕功能现在为开启状态 - 全萤幕功能现在为关闭状态 + 隐藏状态栏 + 隐藏虚拟键 + 隐藏状态栏与虚拟键 + 全屏幕功能 + 全屏幕功能现在为开启状态 + 全屏幕功能现在为关闭状态 - 萤幕截图 + 屏幕截图 - 显示选单 + 显示菜单 - 切换全萤幕功能 - 全萤幕模式已关闭! + 切换全屏幕功能 + 全屏幕模式已关闭! - 海苔条调教 - 包含各种关于海苔条的调教 - 复盖系统预设值 - 新增海苔条调教的主控键(需要重新启动) - 启用海苔条功能 + 虚拟键调整 + 包含各种关于虚拟键的调整 + 覆盖系统默认值 + 新增虚拟键调整的主控键(需要重新启动) + 启用虚拟键功能 需要重新启动 - 海苔条高度 - 应用于当萤幕呈现直立方向 - 海苔条宽度 - 应用于当萤幕呈现横放方向 - 永远显示选单键 + 虚拟键高度 + 应用于当屏幕呈现竖向 + Applies to horizontal navigation bar and landscape orientation + 虚拟键宽度 + 应用于当屏幕呈现横向 + 总是显示菜单键 电源菜单截图 - Unlock ring settings - Enable unlock ring targets - Master switch for unlock ring targets - Target application %s - Unlock ring vertical offset - Unlock ring horizontal offset + 解锁环设置 + 启用解锁环 + 主开关解锁环目标 + 目标应用程序 %s + 解锁环垂直偏移 + 解锁环水平偏移 - 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 + 转换 unicode + 正常字符转换成unicode字符。降低整体信息大小。 + 保留字符不变 + 转换非可编码字符 + 转换所有unicode字符 - Disable slow 2G data warning + 关闭2G网络数据提醒 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. + ICS电池颜色 + 让状态栏时钟,百分比和圆圈电池使用ICS电池图标的颜色。应用图标时着色。 - Network mode tile mode + 网络模式 2G/2G+3G/3G/(LTE) 2G/2G+3G/(LTE) 2G/3G/(LTE) @@ -564,31 +582,31 @@ 停用GPS通知 - 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 + 网络模式瓷砖SIM卡插槽 + 定义的网络模式瓷砖适用的SIM卡插槽(%s) + SIM 1 卡 + SIM 2 卡 从不 总是 - 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 + ICS电池图标 + ICS电池图标被换成第三方电池模式时 - Unplug turns on screen - If enabled, the screen will come on when you plug/unplug usb/power/whatever (requires reboot) + 拔下电源线开启屏幕 + 如果启用,当你插入或拔出USB线会亮起屏幕 (需要重新启动) 音量键调节 @@ -596,13 +614,13 @@ 通话振动 - 启用电话接通振动 - 启用通话结束振动 - 启用通话等待震动 + 电话接通时振动 + 通话结束后振动 + 通话等待震动 通话期间每45秒振动一次 - Tile reordering - Allows reordering of QuickSettings tiles + 开关扩展重新排序 + 允许快速设置开关扩展重新排序 From f1c84df1b97bc1c2e24e0b4cda164feba21d0380 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 5 Oct 2013 15:50:00 +0200 Subject: [PATCH 291/710] Added Vietnamese translations (thanks to hdbk1986) --- res/values-vi/strings.xml | 626 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 626 insertions(+) create mode 100644 res/values-vi/strings.xml diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml new file mode 100644 index 0000000000..8b974a7a7f --- /dev/null +++ b/res/values-vi/strings.xml @@ -0,0 +1,626 @@ + + + + + + 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) + Giá trị trong khoảng: 10 – 80 + + + 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 (10 – 255) + Số quy định không hợp lệ + Không được khuyến cáo khi đặt mức sáng dưới 10 + 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 + 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 + Hiện nút bấm tìm kiếm + 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) + + + Tắt thông báo GPS + + + 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 + + From 68f94f32fa962b67d661b54425e1d2a5ef1c431f Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sat, 5 Oct 2013 16:32:06 +0200 Subject: [PATCH 292/710] Updated German translations (thanks to samsonbear) --- res/values-de/strings.xml | 44 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index f41e26bb7d..7d04caa64e 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -386,8 +386,8 @@ Deaktiviert die Menü-, Zurück- & Home-Taste, wenn die Pie-Steuerung aktiviert ist. Hardwaretastenbelegung funktioniert weiterhin (lange drücken, doppelt drücken). (Für Geräte die Hardwaretasten besitzen) - Benutze dunkles Holo-Theme - Ändert das GB-UI auf ein dunkles Holo-Theme + Verwende dunkles Holo-Theme + Ändert das GravityBox-UI auf ein dunkles Holo-Theme Aus @@ -458,27 +458,27 @@ Tablet - Brightness settings - Enable brightness settings + Helligkeitseinstellungen + Aktiviere Helligkeitseinstellungen Use only in case your device supports standard Android brightness features. Keep disabled if you experience brightness related issues. (Neustart erforderlich) - Show recent apps + Zuletzt verwendete Apps anzeigen - Home key long-press action + Aktion bei langem Druck auf die Home-Taste Starte benutzerdefinierte App 1 - Benutzerdefinierte App 1 einstellen + Benutzerdefinierte App 1 konfigurieren Starte benutzerdefinierte App 2 - Benutzerdefinierte App 2 einstellen + Benutzerdefinierte App 2 konfigurieren Keine benutzerdefinierte App zugewiesen! Benutzerdefinierte App wurde nicht gefunden! - Notification panel clock app - Links notification panel clock to a specified app instead of Date&Time settings + 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… @@ -510,17 +510,17 @@ Navigationsleiste optimieren - Contains various navigation bar related tweaks + Beinhaltet diverse Optimierungen der Navigationsleiste Override system defaults Master switch for navigation bar tweaks (Neustart erforderlich) Navigationsleiste aktivieren Neustart erforderlich - Navigation bar height + Höhe der Navigationsleiste Applies to horizontal navigation bar and portrait orientation Applies to horizontal navigation bar and landscape orientation - Navigation bar width + Breite der Navigationsleiste Applies to vertical navigation bar - Always show menu key + Menü-Taste immer anzeigen Screenshot im Ausschaltmenü @@ -586,16 +586,16 @@ Wenn erweiterter Desktop die Navigationsleiste versteckt - Leave stock battery icon intact - Use in case stock battery icon was replaced with 3rd party battery mod + Standard Batterie-Symbol beibehalten + Verwenden, falls das Standard Batterie-Symbol durch eine Drittanwendung ersetzt wurde - Unplug turns on screen - If enabled, the screen will come on when you plug/unplug usb/power/whatever (Neustart erforderlich) + Kabelverbindung schaltet den Bildschirm an + Bei Aktivierung schaltet sich der Bildschirm an, sobald man ein Kabel (USB/Strom/Sonstiges) verbindet oder trennt (Neustart erforderlich) - Mute volume adjust sound - Disables sound played when adjusting volume using volume keys + Signaltöne der Lautstärketasten stummschalten + Schaltet Signaltöne bei der Benutzung der Lautstärketasten stumm Anruf-Vibrationen @@ -603,5 +603,9 @@ Anruf getrennt Anruf wartend Alle 45 Sekunden bei ausgehendem Anruf + + + Neuordnung der Kacheln + Erlaubt die Neuordnung der Schnelleinstellungs-Kacheln \ No newline at end of file From f08b41bf9e227d2f47ebb393bd2a9c675ab821db Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 6 Oct 2013 09:29:07 +0200 Subject: [PATCH 293/710] TorchService: changed ID of ongoing notification --- src/com/ceco/gm2/gravitybox/TorchService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/ceco/gm2/gravitybox/TorchService.java b/src/com/ceco/gm2/gravitybox/TorchService.java index e451782f82..715381ff75 100644 --- a/src/com/ceco/gm2/gravitybox/TorchService.java +++ b/src/com/ceco/gm2/gravitybox/TorchService.java @@ -94,7 +94,7 @@ private synchronized void setTorchOn() { mCamera.startPreview(); mTorchStatus = TORCH_STATUS_ON; - startForeground(1, mTorchNotif); + startForeground(2, mTorchNotif); } catch (Exception e) { mTorchStatus = TORCH_STATUS_ERROR; e.printStackTrace(); From d3c1c91b1460860ba23f8c906d9586b65765a204 Mon Sep 17 00:00:00 2001 From: C3C0 Date: Sun, 6 Oct 2013 16:46:10 +0200 Subject: [PATCH 294/710] Ongoing notifications blocker --- res/layout/ongoing_notif_preference.xml | 46 ++++ .../simple_list_item_2_multiple_choice.xml | 41 +++ res/values/strings.xml | 9 + res/xml/gravitybox.xml | 6 +- .../gm2/gravitybox/GravityBoxSettings.java | 6 + src/com/ceco/gm2/gravitybox/ModStatusBar.java | 54 ++++ .../adapters/IIconCheckListAdapterItem.java | 21 ++ .../adapters/IconCheckListAdapter.java | 76 ++++++ .../preference/OngoingNotifPreference.java | 246 ++++++++++++++++++ 9 files changed, 504 insertions(+), 1 deletion(-) create mode 100644 res/layout/ongoing_notif_preference.xml create mode 100644 res/layout/simple_list_item_2_multiple_choice.xml create mode 100644 src/com/ceco/gm2/gravitybox/adapters/IIconCheckListAdapterItem.java create mode 100644 src/com/ceco/gm2/gravitybox/adapters/IconCheckListAdapter.java create mode 100644 src/com/ceco/gm2/gravitybox/preference/OngoingNotifPreference.java diff --git a/res/layout/ongoing_notif_preference.xml b/res/layout/ongoing_notif_preference.xml new file mode 100644 index 0000000000..e6c3fab6e0 --- /dev/null +++ b/res/layout/ongoing_notif_preference.xml @@ -0,0 +1,46 @@ + + + + + + + + + + +