Skip to content

Commit

Permalink
Statusbar: Allow moving clock to right side (closes #745)
Browse files Browse the repository at this point in the history
Signed-off-by: DrDisagree <29881338+Mahmud0808@users.noreply.github.com>
  • Loading branch information
Mahmud0808 committed Feb 9, 2025
1 parent b70394e commit 587a22e
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ object Preferences {
const val FIXED_STATUS_ICONS_TOPMARGIN = "xposed_fixedstatusiconstopmargin"
const val HIDE_LOCKSCREEN_STATUSBAR = "xposed_hidelockscreenstatusbar"
const val STATUSBAR_SWAP_WIFI_CELLULAR = "xposed_statusbarswapwificellular"
const val SHOW_CLOCK_ON_RIGHT_SIDE = "xposed_showclockonrightside"
const val SB_CLOCK_SIZE_SWITCH = "xposed_sbclocksizeswitch"
const val SB_CLOCK_SIZE = "xposed_sbclocksize"
const val COLORED_STATUSBAR_ICON = "xposed_coloredstatusbaricon"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.drdisagree.iconify.common.Preferences.HIDE_LOCKSCREEN_CARRIER
import com.drdisagree.iconify.common.Preferences.HIDE_LOCKSCREEN_STATUSBAR
import com.drdisagree.iconify.common.Preferences.SB_CLOCK_SIZE
import com.drdisagree.iconify.common.Preferences.SB_CLOCK_SIZE_SWITCH
import com.drdisagree.iconify.common.Preferences.SHOW_CLOCK_ON_RIGHT_SIDE
import com.drdisagree.iconify.common.Preferences.STATUSBAR_SWAP_WIFI_CELLULAR
import com.drdisagree.iconify.xposed.HookRes.Companion.resParams
import com.drdisagree.iconify.xposed.ModPack
Expand Down Expand Up @@ -60,6 +61,9 @@ class Statusbar(context: Context) : ModPack(context) {
private var hideLockscreenCarrier = false
private var hideLockscreenStatusbar = false
private var swapWifiAndCellularIcon = false
private var clockOnRightSide = false
private var phoneStatusBarView: ViewGroup? = null
private var clockInitialPosition = -1

override fun updatePrefs(vararg key: String) {
if (!XprefsIsInitialized) return
Expand All @@ -71,6 +75,7 @@ class Statusbar(context: Context) : ModPack(context) {
hideLockscreenCarrier = getBoolean(HIDE_LOCKSCREEN_CARRIER, false)
hideLockscreenStatusbar = getBoolean(HIDE_LOCKSCREEN_STATUSBAR, false)
swapWifiAndCellularIcon = getBoolean(STATUSBAR_SWAP_WIFI_CELLULAR, false)
clockOnRightSide = getBoolean(SHOW_CLOCK_ON_RIGHT_SIDE, false)
}

when (key.firstOrNull()) {
Expand All @@ -83,6 +88,8 @@ class Statusbar(context: Context) : ModPack(context) {
HIDE_LOCKSCREEN_CARRIER,
HIDE_LOCKSCREEN_STATUSBAR
) -> hideLockscreenCarrierOrStatusbar()

in setOf(SHOW_CLOCK_ON_RIGHT_SIDE) -> moveStatusBarClock()
}
}

Expand All @@ -91,6 +98,7 @@ class Statusbar(context: Context) : ModPack(context) {
hideLockscreenCarrierOrStatusbar()
applyClockSize()
swapWifiAndCellularIcon()
clockOnRightSide()
}

private fun setColoredNotificationIcons() {
Expand Down Expand Up @@ -416,6 +424,38 @@ class Statusbar(context: Context) : ModPack(context) {
}
}

@SuppressLint("RtlHardcoded")
private fun setClockSize() {
val leftClockSize = if (sbClockSizeSwitch) sbClockSize else mLeftClockSize
val centerClockSize = if (sbClockSizeSwitch) sbClockSize else mCenterClockSize
val rightClockSize = if (sbClockSizeSwitch) sbClockSize else mRightClockSize
val unit = if (sbClockSizeSwitch) TypedValue.COMPLEX_UNIT_SP else TypedValue.COMPLEX_UNIT_PX

mClockView?.let {
it.setTextSize(unit, leftClockSize.toFloat())

if (sbClockSizeSwitch) {
setClockGravity(it, Gravity.LEFT or Gravity.CENTER)
}
}

mCenterClockView?.let {
it.setTextSize(unit, centerClockSize.toFloat())

if (sbClockSizeSwitch) {
setClockGravity(it, Gravity.CENTER)
}
}

mRightClockView?.let {
it.setTextSize(unit, rightClockSize.toFloat())

if (sbClockSizeSwitch) {
setClockGravity(it, Gravity.RIGHT or Gravity.CENTER)
}
}
}

private fun swapWifiAndCellularIcon() {
val statusBarIconListClass = findClass(
"$SYSTEMUI_PACKAGE.statusbar.phone.StatusBarIconList",
Expand Down Expand Up @@ -527,35 +567,78 @@ class Statusbar(context: Context) : ModPack(context) {
.runBefore { param -> handleSetIcon(param, true) }
}

@SuppressLint("RtlHardcoded")
private fun setClockSize() {
val leftClockSize = if (sbClockSizeSwitch) sbClockSize else mLeftClockSize
val centerClockSize = if (sbClockSizeSwitch) sbClockSize else mCenterClockSize
val rightClockSize = if (sbClockSizeSwitch) sbClockSize else mRightClockSize
val unit = if (sbClockSizeSwitch) TypedValue.COMPLEX_UNIT_SP else TypedValue.COMPLEX_UNIT_PX
private fun clockOnRightSide() {
val phoneStatusBarViewClass =
findClass("$SYSTEMUI_PACKAGE.statusbar.phone.PhoneStatusBarView")
val shadeHeaderControllerClass =
findClass("$SYSTEMUI_PACKAGE.shade.ShadeHeaderController")

mClockView?.let {
it.setTextSize(unit, leftClockSize.toFloat())
phoneStatusBarViewClass
.hookMethod("onFinishInflate")
.runAfter { param ->
phoneStatusBarView = param.thisObject as ViewGroup

if (sbClockSizeSwitch) {
setClockGravity(it, Gravity.LEFT or Gravity.CENTER)
moveStatusBarClock()
}
}

mCenterClockView?.let {
it.setTextSize(unit, centerClockSize.toFloat())
shadeHeaderControllerClass
.hookMethod("updateQQSPaddings")
.suppressError()
.runAfter { moveStatusBarClock() }
}

if (sbClockSizeSwitch) {
setClockGravity(it, Gravity.CENTER)
}
private fun moveStatusBarClock() {
if (phoneStatusBarView == null) return

val statusBarContents = phoneStatusBarView!!.findViewById<ViewGroup>(
mContext.resources.getIdentifier(
"status_bar_contents",
"id",
mContext.packageName
)
)
val statusBarStartSideExceptHeadsUp = phoneStatusBarView!!.findViewById<ViewGroup>(
mContext.resources.getIdentifier(
"status_bar_start_side_except_heads_up",
"id",
mContext.packageName
)
)
val statusBarClock = phoneStatusBarView!!.findViewById<View>(
mContext.resources.getIdentifier(
"clock",
"id",
mContext.packageName
)
)
val startPadding = mContext.resources.getDimensionPixelSize(
mContext.resources.getIdentifier(
"status_bar_left_clock_starting_padding",
"dimen",
mContext.packageName
)
)
val endPadding = mContext.resources.getDimensionPixelSize(
mContext.resources.getIdentifier(
"status_bar_left_clock_end_padding",
"dimen",
mContext.packageName
)
)

if (clockInitialPosition == -1) {
clockInitialPosition = (statusBarClock?.parent as? ViewGroup)
?.indexOfChild(statusBarClock) ?: return
}

mRightClockView?.let {
it.setTextSize(unit, rightClockSize.toFloat())
(statusBarClock?.parent as? ViewGroup)?.removeView(statusBarClock)

if (sbClockSizeSwitch) {
setClockGravity(it, Gravity.RIGHT or Gravity.CENTER)
}
if (clockOnRightSide) {
statusBarContents?.addView(statusBarClock)
statusBarClock?.setPaddingRelative(endPadding, 0, startPadding, 0)
} else {
statusBarStartSideExceptHeadsUp?.addView(statusBarClock, clockInitialPosition)
statusBarClock?.setPaddingRelative(startPadding, 0, endPadding, 0)
}
}
}
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -866,6 +866,8 @@
<string name="hide_ls_statusbar_desc">Hide statusbar on lockscreen</string>
<string name="sb_swap_wifi_cellular_title">Swap Wifi and Cellular</string>
<string name="sb_swap_wifi_cellular_desc">Swap wifi and cellular icons</string>
<string name="sb_clock_on_right_side_title">Clock on Right Side</string>
<string name="sb_clock_on_right_side_desc">Show clock on right side of statusbar</string>

<!-- Xposed Others -->
<string name="qs_header">QS Header</string>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/xml/xposed_statusbar.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,10 @@
android:title="@string/sb_swap_wifi_cellular_title"
app:iconSpaceReserved="false" />

<com.drdisagree.iconify.ui.preferences.SwitchPreference
android:key="xposed_showclockonrightside"
android:summary="@string/sb_clock_on_right_side_desc"
android:title="@string/sb_clock_on_right_side_title"
app:iconSpaceReserved="false" />

</PreferenceScreen>

0 comments on commit 587a22e

Please sign in to comment.