Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
test change
# flipperclock
Android library which can be used to implement a flipping clock

Expand Down
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="sensorLandscape"
android:configChanges="keyboardHidden|orientation"

android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
Expand Down
28 changes: 2 additions & 26 deletions app/src/main/java/dk/fjinc/flipperclock/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,6 @@ class MainActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()

countdownClockFirst.setCountdownListener(object: CountDownClock.CountdownCallBack {
override fun countdownAboutToFinish() {
Log.d("here","Countdown first is about to finish")
}

override fun countdownFinished() {
Log.d("here", "Countdown first finished")
countdownClockFirst.startCountDown(15000)
}
})

countdownClockFirst.startCountDown(15000)

countdownClockSecond.setCountdownListener(object: CountDownClock.CountdownCallBack {
override fun countdownAboutToFinish() {
Expand All @@ -36,31 +24,19 @@ class MainActivity : AppCompatActivity() {

override fun countdownFinished() {
Log.d("here", "Countdown second finished")
countdownClockSecond.startCountDown(70000)
countdownClockSecond.startCountDown(4200000)
}
})

countdownClockSecond.startCountDown(70000)
countdownClockSecond.startCountDown(7000)

countdownClockThird.setCountdownListener(object: CountDownClock.CountdownCallBack {
override fun countdownAboutToFinish() {
Log.d("here","Countdown third is about to finish")
}

override fun countdownFinished() {
Log.d("here", "Countdown third finished")
countdownClockThird.startCountDown(570000)
}
})

countdownClockThird.startCountDown(570000)
}

override fun onPause() {
super.onPause()

countdownClockFirst.resetCountdownTimer()
countdownClockSecond.resetCountdownTimer()
countdownClockThird.resetCountdownTimer()
}
}
50 changes: 4 additions & 46 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,7 @@
android:gravity="center"
android:orientation="vertical">

<dk.fjinc.flipperclocklibrary.CountDownClock
android:id="@+id/countdownClockFirst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clipChildren="false"
android:clipToPadding="false"
countdownClock:resetSymbol="8"
countdownClock:digitSplitterColor="@color/colorAccent"
countdownClock:digitDividerColor="@color/colorAccent"
countdownClock:digitTopDrawable="@drawable/background_top"
countdownClock:digitBottomDrawable="@drawable/background_bottom"
countdownClock:digitTextColor="@color/colorAccent"
countdownClock:digitPadding="3dp"
countdownClock:splitterPadding="1dp"
countdownClock:animationDuration="350"
countdownClock:almostFinishedCallbackTimeInSeconds="5"
countdownClock:countdownTickInterval="250"
countdownClock:halfDigitHeight="15dp"
countdownClock:digitWidth="40dp"
countdownClock:digitTextSize="18sp" />


<dk.fjinc.flipperclocklibrary.CountDownClock
android:id="@+id/countdownClockSecond"
Expand All @@ -48,30 +28,8 @@
countdownClock:animationDuration="550"
countdownClock:almostFinishedCallbackTimeInSeconds="5"
countdownClock:countdownTickInterval="250"
countdownClock:halfDigitHeight="30dp"
countdownClock:digitWidth="50dp"
countdownClock:digitTextSize="45sp"/>
countdownClock:halfDigitHeight="20dp"
countdownClock:digitWidth="20dp"
countdownClock:digitTextSize="25sp"/>

<dk.fjinc.flipperclocklibrary.CountDownClock
android:id="@+id/countdownClockThird"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clipChildren="false"
android:clipToPadding="false"
android:layout_marginTop="20dp"
countdownClock:resetSymbol="8"
countdownClock:digitSplitterColor="@color/orange"
countdownClock:digitDividerColor="@color/orange"
countdownClock:digitTopDrawable="@drawable/background_top"
countdownClock:digitBottomDrawable="@drawable/background_bottom"
countdownClock:digitTextColor="@color/yellow"
countdownClock:digitPadding="12dp"
countdownClock:splitterPadding="6dp"
countdownClock:animationDuration="850"
countdownClock:almostFinishedCallbackTimeInSeconds="5"
countdownClock:countdownTickInterval="250"
countdownClock:halfDigitHeight="50dp"
countdownClock:digitWidth="50dp"
countdownClock:digitTextSize="70sp"/>
</LinearLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ class CountDownClock : LinearLayout {

fun resetCountdownTimer() {
countDownTimer?.cancel()
firstDigitHour.setNewText(resetSymbol)
secondDigitHour.setNewText(resetSymbol)
firstDigitMinute.setNewText(resetSymbol)
secondDigitMinute.setNewText(resetSymbol)
firstDigitSecond.setNewText(resetSymbol)
Expand All @@ -110,11 +112,27 @@ class CountDownClock : LinearLayout {
////////////////

private fun setCountDownTime(timeToStart: Long) {
val minutes = TimeUnit.MILLISECONDS.toMinutes(timeToStart)
val hours = TimeUnit.MILLISECONDS.toHours(timeToStart)
val minutes = TimeUnit.MILLISECONDS.toMinutes(timeToStart-TimeUnit.HOURS.toMillis(hours))
val seconds = TimeUnit.MILLISECONDS.toSeconds(timeToStart - TimeUnit.MINUTES.toMillis(minutes))

val hoursString = hours.toString()
val minutesString = minutes.toString()
val secondsString = seconds.toString()


if (hoursString.length == 2) {
firstDigitHour.animateTextChange(hoursString[0].toString())
secondDigitHour.animateTextChange(hoursString[1].toString())
} else if (hoursString.length == 1) {
firstDigitHour.animateTextChange("0")
secondDigitHour.animateTextChange(hoursString[0].toString())
} else {
firstDigitHour.animateTextChange("2")
secondDigitHour.animateTextChange("3")
}


if (minutesString.length == 2) {
firstDigitMinute.animateTextChange(minutesString[0].toString())
secondDigitMinute.animateTextChange(minutesString[1].toString())
Expand All @@ -125,6 +143,9 @@ class CountDownClock : LinearLayout {
firstDigitMinute.animateTextChange("5")
secondDigitMinute.animateTextChange("9")
}



if (secondsString.length == 2) {
firstDigitSecond.animateTextChange(secondsString[0].toString())
secondDigitSecond.animateTextChange(secondsString[1].toString())
Expand All @@ -151,10 +172,17 @@ class CountDownClock : LinearLayout {

private fun setDigitTopDrawable(digitTopDrawable: Drawable?) {
if (digitTopDrawable != null) {

firstDigitHour.frontUpper.background = digitTopDrawable
firstDigitHour.backUpper.background = digitTopDrawable
secondDigitHour.frontUpper.background = digitTopDrawable
secondDigitHour.backUpper.background = digitTopDrawable

firstDigitMinute.frontUpper.background = digitTopDrawable
firstDigitMinute.backUpper.background = digitTopDrawable
secondDigitMinute.frontUpper.background = digitTopDrawable
secondDigitMinute.backUpper.background = digitTopDrawable

firstDigitSecond.frontUpper.background = digitTopDrawable
firstDigitSecond.backUpper.background = digitTopDrawable
secondDigitSecond.frontUpper.background = digitTopDrawable
Expand All @@ -166,10 +194,16 @@ class CountDownClock : LinearLayout {

private fun setDigitBottomDrawable(digitBottomDrawable: Drawable?) {
if (digitBottomDrawable != null) {
firstDigitHour.frontLower.background = digitBottomDrawable
firstDigitHour.backLower.background = digitBottomDrawable
secondDigitHour.frontLower.background = digitBottomDrawable
secondDigitHour.backLower.background = digitBottomDrawable

firstDigitMinute.frontLower.background = digitBottomDrawable
firstDigitMinute.backLower.background = digitBottomDrawable
secondDigitMinute.frontLower.background = digitBottomDrawable
secondDigitMinute.backLower.background = digitBottomDrawable

firstDigitSecond.frontLower.background = digitBottomDrawable
firstDigitSecond.backLower.background = digitBottomDrawable
secondDigitSecond.frontLower.background = digitBottomDrawable
Expand All @@ -184,6 +218,9 @@ class CountDownClock : LinearLayout {
if (dividerColor == 0) {
dividerColor = ContextCompat.getColor(context, R.color.transparent)
}
firstDigitHour.digitDivider.setBackgroundColor(dividerColor)
secondDigitHour.digitDivider.setBackgroundColor(dividerColor)

firstDigitMinute.digitDivider.setBackgroundColor(dividerColor)
secondDigitMinute.digitDivider.setBackgroundColor(dividerColor)
firstDigitSecond.digitDivider.setBackgroundColor(dividerColor)
Expand All @@ -193,31 +230,45 @@ class CountDownClock : LinearLayout {
private fun setDigitSplitterColor(digitsSplitterColor: Int) {
if (digitsSplitterColor != 0) {
digitsSplitter.setTextColor(digitsSplitterColor)
digitsSplitter2.setTextColor(digitsSplitterColor)
} else {
digitsSplitter.setTextColor(ContextCompat.getColor(context, R.color.transparent))
digitsSplitter2.setTextColor(ContextCompat.getColor(context, R.color.transparent))
}
}

private fun setSplitterDigitTextSize(digitsTextSize: Float) {
digitsSplitter.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
digitsSplitter2.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
}

private fun setDigitPadding(digitPadding: Int) {
firstDigitMinute.setPadding(digitPadding, digitPadding, digitPadding, digitPadding)

firstDigitHour.setPadding(digitPadding, digitPadding, digitPadding, digitPadding)
secondDigitHour.setPadding(digitPadding, digitPadding, 0, digitPadding)

firstDigitMinute.setPadding(0, digitPadding, digitPadding, digitPadding)
secondDigitMinute.setPadding(digitPadding, digitPadding, 0, digitPadding)

firstDigitSecond.setPadding(0, digitPadding, digitPadding, digitPadding)
secondDigitSecond.setPadding(digitPadding, digitPadding, digitPadding, digitPadding)
}

private fun setSplitterPadding(splitterPadding: Int) {
digitsSplitter.setPadding(splitterPadding, 0, splitterPadding, 0)
digitsSplitter2.setPadding(splitterPadding, 0, splitterPadding, 0)
}

private fun setDigitTextColor(digitsTextColor: Int) {
var textColor = digitsTextColor
if (textColor == 0) {
textColor = ContextCompat.getColor(context, R.color.transparent)
}
firstDigitHour.frontUpperText.setTextColor(textColor)
firstDigitHour.backUpperText.setTextColor(textColor)
secondDigitHour.frontUpperText.setTextColor(textColor)
secondDigitHour.backUpperText.setTextColor(textColor)

firstDigitMinute.frontUpperText.setTextColor(textColor)
firstDigitMinute.backUpperText.setTextColor(textColor)
secondDigitMinute.frontUpperText.setTextColor(textColor)
Expand All @@ -227,6 +278,11 @@ class CountDownClock : LinearLayout {
secondDigitSecond.frontUpperText.setTextColor(textColor)
secondDigitSecond.backUpperText.setTextColor(textColor)

firstDigitHour.frontLowerText.setTextColor(textColor)
firstDigitHour.backLowerText.setTextColor(textColor)
secondDigitHour.frontLowerText.setTextColor(textColor)
secondDigitHour.backLowerText.setTextColor(textColor)

firstDigitMinute.frontLowerText.setTextColor(textColor)
firstDigitMinute.backLowerText.setTextColor(textColor)
secondDigitMinute.frontLowerText.setTextColor(textColor)
Expand All @@ -238,25 +294,44 @@ class CountDownClock : LinearLayout {
}

private fun setDigitTextSize(digitsTextSize: Float) {
firstDigitHour.frontUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
firstDigitHour.backUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitHour.frontUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitHour.backUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)

firstDigitMinute.frontUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
firstDigitMinute.backUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitMinute.frontUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitMinute.backUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)

firstDigitSecond.frontUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
firstDigitSecond.backUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitSecond.frontUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitSecond.backUpperText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)

firstDigitHour.frontLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
firstDigitHour.backLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitHour.frontLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitHour.backLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)

firstDigitMinute.frontLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
firstDigitMinute.backLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitMinute.frontLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitMinute.backLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)


firstDigitSecond.frontLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
firstDigitSecond.backLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitSecond.frontLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
secondDigitSecond.backLowerText.setTextSize(TypedValue.COMPLEX_UNIT_PX, digitsTextSize)
}

private fun setHalfDigitHeightAndDigitWidth(halfDigitHeight: Int, digitWidth: Int) {
setHeightAndWidthToView(firstDigitHour.frontUpper, halfDigitHeight, digitWidth)
setHeightAndWidthToView(firstDigitHour.backUpper, halfDigitHeight, digitWidth)
setHeightAndWidthToView(secondDigitHour.frontUpper, halfDigitHeight, digitWidth)
setHeightAndWidthToView(secondDigitHour.backUpper, halfDigitHeight, digitWidth)

setHeightAndWidthToView(firstDigitMinute.frontUpper, halfDigitHeight, digitWidth)
setHeightAndWidthToView(firstDigitMinute.backUpper, halfDigitHeight, digitWidth)
setHeightAndWidthToView(secondDigitMinute.frontUpper, halfDigitHeight, digitWidth)
Expand All @@ -268,6 +343,11 @@ class CountDownClock : LinearLayout {
setHeightAndWidthToView(secondDigitSecond.backUpper, halfDigitHeight, digitWidth)

// Lower
setHeightAndWidthToView(firstDigitHour.frontLower, halfDigitHeight, digitWidth)
setHeightAndWidthToView(firstDigitHour.backLower, halfDigitHeight, digitWidth)
setHeightAndWidthToView(secondDigitHour.frontLower, halfDigitHeight, digitWidth)
setHeightAndWidthToView(secondDigitHour.backLower, halfDigitHeight, digitWidth)

setHeightAndWidthToView(firstDigitMinute.frontLower, halfDigitHeight, digitWidth)
setHeightAndWidthToView(firstDigitMinute.backLower, halfDigitHeight, digitWidth)
setHeightAndWidthToView(secondDigitMinute.frontLower, halfDigitHeight, digitWidth)
Expand All @@ -279,6 +359,9 @@ class CountDownClock : LinearLayout {
setHeightAndWidthToView(secondDigitSecond.backLower, halfDigitHeight, digitWidth)

// Dividers
firstDigitHour.digitDivider.layoutParams.width = digitWidth
secondDigitHour.digitDivider.layoutParams.width = digitWidth

firstDigitMinute.digitDivider.layoutParams.width = digitWidth
secondDigitMinute.digitDivider.layoutParams.width = digitWidth
firstDigitSecond.digitDivider.layoutParams.width = digitWidth
Expand All @@ -293,6 +376,9 @@ class CountDownClock : LinearLayout {
}

private fun setAnimationDuration(animationDuration: Int) {

firstDigitHour.setAnimationDuration(animationDuration.toLong())
secondDigitHour.setAnimationDuration(animationDuration.toLong())
firstDigitMinute.setAnimationDuration(animationDuration.toLong())
secondDigitMinute.setAnimationDuration(animationDuration.toLong())
firstDigitSecond.setAnimationDuration(animationDuration.toLong())
Expand All @@ -305,10 +391,17 @@ class CountDownClock : LinearLayout {

private fun setTransparentBackgroundColor() {
val transparent = ContextCompat.getColor(context, R.color.transparent)
firstDigitHour.frontLower.setBackgroundColor(transparent)
firstDigitHour.backLower.setBackgroundColor(transparent)
secondDigitHour.frontLower.setBackgroundColor(transparent)
secondDigitHour.backLower.setBackgroundColor(transparent)


firstDigitMinute.frontLower.setBackgroundColor(transparent)
firstDigitMinute.backLower.setBackgroundColor(transparent)
secondDigitMinute.frontLower.setBackgroundColor(transparent)
secondDigitMinute.backLower.setBackgroundColor(transparent)

firstDigitSecond.frontLower.setBackgroundColor(transparent)
firstDigitSecond.backLower.setBackgroundColor(transparent)
secondDigitSecond.frontLower.setBackgroundColor(transparent)
Expand Down
Loading