diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 046af900..62f5a052 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -79,7 +79,16 @@
android:theme="@style/Theme.Transparent" />
+
+
+
+
+
+
@@ -108,7 +117,7 @@
@@ -122,6 +131,21 @@
android:resource="@xml/widget_digital_clock_info" />
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/clock/activities/SettingsActivity.kt
index a15ed0fb..c2195c22 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/activities/SettingsActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/activities/SettingsActivity.kt
@@ -178,7 +178,7 @@ class SettingsActivity : SimpleActivity() {
private fun setupCustomizeWidgetColors() {
settings_customize_widget_colors_holder.setOnClickListener {
- Intent(this, WidgetDateTimeConfigureActivity::class.java).apply {
+ Intent(this, WidgetDigitalConfigureActivity::class.java).apply {
putExtra(IS_CUSTOMIZING_COLORS, true)
startActivity(this)
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetAnalogueConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetAnalogueConfigureActivity.kt
new file mode 100644
index 00000000..d045375d
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetAnalogueConfigureActivity.kt
@@ -0,0 +1,123 @@
+package com.simplemobiletools.clock.activities
+
+import android.app.Activity
+import android.appwidget.AppWidgetManager
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.widget.SeekBar
+import com.simplemobiletools.clock.R
+import com.simplemobiletools.clock.extensions.config
+import com.simplemobiletools.clock.helpers.MyAnalogueTimeWidgetProvider
+import com.simplemobiletools.commons.dialogs.ColorPickerDialog
+import com.simplemobiletools.commons.dialogs.WidgetLockedDialog
+import com.simplemobiletools.commons.extensions.*
+import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
+import kotlinx.android.synthetic.main.widget_config_analogue.*
+
+class WidgetAnalogueConfigureActivity : SimpleActivity() {
+ private var mBgAlpha = 0f
+ private var mWidgetId = 0
+ private var mBgColor = 0
+ private var mBgColorWithoutTransparency = 0
+ private var mWidgetLockedDialog: WidgetLockedDialog? = null
+
+ public override fun onCreate(savedInstanceState: Bundle?) {
+ useDynamicTheme = false
+ super.onCreate(savedInstanceState)
+ setResult(Activity.RESULT_CANCELED)
+ setContentView(R.layout.widget_config_analogue)
+ initVariables()
+
+ val isCustomizingColors = intent.extras?.getBoolean(IS_CUSTOMIZING_COLORS) ?: false
+ mWidgetId = intent.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: AppWidgetManager.INVALID_APPWIDGET_ID
+
+ if (mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID && !isCustomizingColors) {
+ finish()
+ }
+
+ config_analogue_save.setOnClickListener { saveConfig() }
+ config_analogue_bg_color.setOnClickListener { pickBackgroundColor() }
+
+ val primaryColor = getProperPrimaryColor()
+ config_analogue_bg_seekbar.setColors(getProperTextColor(), primaryColor, primaryColor)
+
+ if (!isCustomizingColors && !isOrWasThankYouInstalled()) {
+ mWidgetLockedDialog = WidgetLockedDialog(this) {
+ if (!isOrWasThankYouInstalled()) {
+ finish()
+ }
+ }
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ window.decorView.setBackgroundColor(0)
+
+ if (mWidgetLockedDialog != null && isOrWasThankYouInstalled()) {
+ mWidgetLockedDialog?.dismissDialog()
+ }
+ }
+
+ private fun initVariables() {
+ mBgColor = config.widgetBgColor
+ mBgAlpha = Color.alpha(mBgColor) / 255.toFloat()
+ mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor))
+
+ config_analogue_bg_seekbar.setOnSeekBarChangeListener(bgSeekbarChangeListener)
+ config_analogue_bg_seekbar.progress = (mBgAlpha * 100).toInt()
+ updateBackgroundColor()
+ }
+
+ private fun saveConfig() {
+ storeWidgetColors()
+ requestWidgetUpdate()
+
+ Intent().apply {
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mWidgetId)
+ setResult(Activity.RESULT_OK, this)
+ }
+ finish()
+ }
+
+ private fun storeWidgetColors() {
+ config.apply {
+ widgetBgColor = mBgColor
+ }
+ }
+
+ private fun pickBackgroundColor() {
+ ColorPickerDialog(this, mBgColorWithoutTransparency) { wasPositivePressed, color ->
+ if (wasPositivePressed) {
+ mBgColorWithoutTransparency = color
+ updateBackgroundColor()
+ }
+ }
+ }
+
+ private fun requestWidgetUpdate() {
+ Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyAnalogueTimeWidgetProvider::class.java).apply {
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(mWidgetId))
+ sendBroadcast(this)
+ }
+ }
+
+ private fun updateBackgroundColor() {
+ mBgColor = mBgColorWithoutTransparency.adjustAlpha(mBgAlpha)
+ config_analogue_bg_color.setFillWithStroke(mBgColor, Color.BLACK)
+ config_analogue_background.applyColorFilter(mBgColor)
+ config_analogue_save.setBackgroundColor(mBgColor)
+ }
+
+ private val bgSeekbarChangeListener = object : SeekBar.OnSeekBarChangeListener {
+ override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
+ mBgAlpha = progress.toFloat() / 100.toFloat()
+ updateBackgroundColor()
+ }
+
+ override fun onStartTrackingTouch(seekBar: SeekBar) {}
+
+ override fun onStopTrackingTouch(seekBar: SeekBar) {}
+ }
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetDateTimeConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetDigitalConfigureActivity.kt
similarity index 73%
rename from app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetDateTimeConfigureActivity.kt
rename to app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetDigitalConfigureActivity.kt
index 9a7b3a11..63e5479e 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetDateTimeConfigureActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/activities/WidgetDigitalConfigureActivity.kt
@@ -9,17 +9,15 @@ import android.widget.SeekBar
import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.extensions.config
import com.simplemobiletools.clock.extensions.getFormattedDate
-import com.simplemobiletools.clock.extensions.getFormattedTime
-import com.simplemobiletools.clock.helpers.MyWidgetDateTimeProvider
-import com.simplemobiletools.clock.helpers.getPassedSeconds
+import com.simplemobiletools.clock.helpers.MyDigitalTimeWidgetProvider
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
import com.simplemobiletools.commons.dialogs.WidgetLockedDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
-import kotlinx.android.synthetic.main.widget_config_date_time.*
+import kotlinx.android.synthetic.main.widget_config_digital.*
import java.util.*
-class WidgetDateTimeConfigureActivity : SimpleActivity() {
+class WidgetDigitalConfigureActivity : SimpleActivity() {
private var mBgAlpha = 0f
private var mWidgetId = 0
private var mBgColor = 0
@@ -31,7 +29,7 @@ class WidgetDateTimeConfigureActivity : SimpleActivity() {
useDynamicTheme = false
super.onCreate(savedInstanceState)
setResult(Activity.RESULT_CANCELED)
- setContentView(R.layout.widget_config_date_time)
+ setContentView(R.layout.widget_config_digital)
initVariables()
val isCustomizingColors = intent.extras?.getBoolean(IS_CUSTOMIZING_COLORS) ?: false
@@ -41,12 +39,12 @@ class WidgetDateTimeConfigureActivity : SimpleActivity() {
finish()
}
- config_save.setOnClickListener { saveConfig() }
- config_bg_color.setOnClickListener { pickBackgroundColor() }
- config_text_color.setOnClickListener { pickTextColor() }
+ config_digital_save.setOnClickListener { saveConfig() }
+ config_digital_bg_color.setOnClickListener { pickBackgroundColor() }
+ config_digital_text_color.setOnClickListener { pickTextColor() }
val primaryColor = getProperPrimaryColor()
- config_bg_seekbar.setColors(mTextColor, primaryColor, primaryColor)
+ config_digital_bg_seekbar.setColors(mTextColor, primaryColor, primaryColor)
if (!isCustomizingColors && !isOrWasThankYouInstalled()) {
mWidgetLockedDialog = WidgetLockedDialog(this) {
@@ -71,8 +69,8 @@ class WidgetDateTimeConfigureActivity : SimpleActivity() {
mBgAlpha = Color.alpha(mBgColor) / 255.toFloat()
mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor))
- config_bg_seekbar.setOnSeekBarChangeListener(bgSeekbarChangeListener)
- config_bg_seekbar.progress = (mBgAlpha * 100).toInt()
+ config_digital_bg_seekbar.setOnSeekBarChangeListener(bgSeekbarChangeListener)
+ config_digital_bg_seekbar.progress = (mBgAlpha * 100).toInt()
updateBackgroundColor()
updateCurrentDateTime()
@@ -81,11 +79,7 @@ class WidgetDateTimeConfigureActivity : SimpleActivity() {
}
private fun updateCurrentDateTime() {
- val calendar = Calendar.getInstance()
- config_time.text = getFormattedTime(getPassedSeconds(), false, false).toString()
- config_date.text = getFormattedDate(calendar)
- config_time.setShadowLayer(1f, 0f, 1f, Color.BLACK)
- config_date.setShadowLayer(1f, 0f, 1f, Color.BLACK)
+ config_digital_date.text = getFormattedDate(Calendar.getInstance())
}
private fun saveConfig() {
@@ -125,24 +119,24 @@ class WidgetDateTimeConfigureActivity : SimpleActivity() {
}
private fun requestWidgetUpdate() {
- Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidgetDateTimeProvider::class.java).apply {
+ Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyDigitalTimeWidgetProvider::class.java).apply {
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(mWidgetId))
sendBroadcast(this)
}
}
private fun updateTextColor() {
- config_text_color.setFillWithStroke(mTextColor, Color.BLACK)
- config_save.setTextColor(mTextColor)
- config_time.setTextColor(mTextColor)
- config_date.setTextColor(mTextColor)
+ config_digital_text_color.setFillWithStroke(mTextColor, Color.BLACK)
+ config_digital_save.setTextColor(mTextColor)
+ config_digital_time.setTextColor(mTextColor)
+ config_digital_date.setTextColor(mTextColor)
}
private fun updateBackgroundColor() {
mBgColor = mBgColorWithoutTransparency.adjustAlpha(mBgAlpha)
- config_bg_color.setFillWithStroke(mBgColor, Color.BLACK)
- config_background.applyColorFilter(mBgColor)
- config_save.setBackgroundColor(mBgColor)
+ config_digital_bg_color.setFillWithStroke(mBgColor, Color.BLACK)
+ config_digital_background.applyColorFilter(mBgColor)
+ config_digital_save.setBackgroundColor(mBgColor)
}
private val bgSeekbarChangeListener = object : SeekBar.OnSeekBarChangeListener {
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
index f7456d1a..b9bfac16 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
@@ -177,11 +177,29 @@ fun Context.hideNotification(id: Int) {
fun Context.hideTimerNotification(timerId: Int) = hideNotification(timerId)
fun Context.updateWidgets() {
- val component = ComponentName(applicationContext, MyWidgetDateTimeProvider::class.java)
+ updateDigitalWidgets()
+ updateAnalogueWidgets()
+}
+
+fun Context.updateDigitalWidgets() {
+ val component = ComponentName(applicationContext, MyDigitalTimeWidgetProvider::class.java)
val widgetIds = AppWidgetManager.getInstance(applicationContext)?.getAppWidgetIds(component) ?: return
if (widgetIds.isNotEmpty()) {
val ids = intArrayOf(R.xml.widget_digital_clock_info)
- Intent(applicationContext, MyWidgetDateTimeProvider::class.java).apply {
+ Intent(applicationContext, MyDigitalTimeWidgetProvider::class.java).apply {
+ action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
+ sendBroadcast(this)
+ }
+ }
+}
+
+fun Context.updateAnalogueWidgets() {
+ val component = ComponentName(applicationContext, MyAnalogueTimeWidgetProvider::class.java)
+ val widgetIds = AppWidgetManager.getInstance(applicationContext)?.getAppWidgetIds(component) ?: return
+ if (widgetIds.isNotEmpty()) {
+ val ids = intArrayOf(R.xml.widget_analogue_clock_info)
+ Intent(applicationContext, MyAnalogueTimeWidgetProvider::class.java).apply {
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
sendBroadcast(this)
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyAnalogueTimeWidgetProvider.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyAnalogueTimeWidgetProvider.kt
new file mode 100644
index 00000000..f8a79b2f
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyAnalogueTimeWidgetProvider.kt
@@ -0,0 +1,54 @@
+package com.simplemobiletools.clock.helpers
+
+import android.app.PendingIntent
+import android.appwidget.AppWidgetManager
+import android.appwidget.AppWidgetProvider
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.widget.RemoteViews
+import com.simplemobiletools.clock.R
+import com.simplemobiletools.clock.activities.SplashActivity
+import com.simplemobiletools.clock.extensions.config
+import com.simplemobiletools.commons.extensions.applyColorFilter
+import com.simplemobiletools.commons.extensions.getLaunchIntent
+
+class MyAnalogueTimeWidgetProvider : AppWidgetProvider() {
+ override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
+ super.onUpdate(context, appWidgetManager, appWidgetIds)
+ performUpdate(context)
+ }
+
+ private fun performUpdate(context: Context) {
+ val appWidgetManager = AppWidgetManager.getInstance(context) ?: return
+ appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach {
+ RemoteViews(context.packageName, R.layout.widget_analogue).apply {
+ updateColors(context, this)
+ setupAppOpenIntent(context, this)
+ appWidgetManager.updateAppWidget(it, this)
+ }
+ }
+ }
+
+ private fun updateColors(context: Context, views: RemoteViews) {
+ views.apply {
+ applyColorFilter(R.id.widget_background, context.config.widgetBgColor)
+ }
+ }
+
+ private fun getComponentName(context: Context) = ComponentName(context, this::class.java)
+
+ private fun setupAppOpenIntent(context: Context, views: RemoteViews) {
+ (context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply {
+ putExtra(OPEN_TAB, TAB_CLOCK)
+ val pendingIntent = PendingIntent.getActivity(context, OPEN_APP_INTENT_ID, this, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
+ views.setOnClickPendingIntent(R.id.widget_date_time_holder, pendingIntent)
+ }
+ }
+
+ override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle?) {
+ super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions)
+ performUpdate(context)
+ }
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyWidgetDateTimeProvider.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyDigitalTimeWidgetProvider.kt
similarity index 98%
rename from app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyWidgetDateTimeProvider.kt
rename to app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyDigitalTimeWidgetProvider.kt
index ad6feaaa..b7804123 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyWidgetDateTimeProvider.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/MyDigitalTimeWidgetProvider.kt
@@ -20,7 +20,7 @@ import com.simplemobiletools.commons.extensions.setText
import com.simplemobiletools.commons.extensions.setVisibleIf
import java.util.*
-class MyWidgetDateTimeProvider : AppWidgetProvider() {
+class MyDigitalTimeWidgetProvider : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
super.onUpdate(context, appWidgetManager, appWidgetIds)
performUpdate(context)
diff --git a/app/src/main/res/drawable-hdpi/img_widget_preview.png b/app/src/main/res/drawable-hdpi/img_digital_widget_preview.png
similarity index 100%
rename from app/src/main/res/drawable-hdpi/img_widget_preview.png
rename to app/src/main/res/drawable-hdpi/img_digital_widget_preview.png
diff --git a/app/src/main/res/drawable-xhdpi/img_widget_preview.png b/app/src/main/res/drawable-xhdpi/img_digital_widget_preview.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/img_widget_preview.png
rename to app/src/main/res/drawable-xhdpi/img_digital_widget_preview.png
diff --git a/app/src/main/res/drawable-xxhdpi/img_widget_preview.png b/app/src/main/res/drawable-xxhdpi/img_digital_widget_preview.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/img_widget_preview.png
rename to app/src/main/res/drawable-xxhdpi/img_digital_widget_preview.png
diff --git a/app/src/main/res/drawable-xxxhdpi/img_widget_preview.png b/app/src/main/res/drawable-xxxhdpi/img_digital_widget_preview.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/img_widget_preview.png
rename to app/src/main/res/drawable-xxxhdpi/img_digital_widget_preview.png
diff --git a/app/src/main/res/layout/widget_analogue.xml b/app/src/main/res/layout/widget_analogue.xml
new file mode 100644
index 00000000..02457b9a
--- /dev/null
+++ b/app/src/main/res/layout/widget_analogue.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/widget_config_analogue.xml b/app/src/main/res/layout/widget_config_analogue.xml
new file mode 100644
index 00000000..ab917ed0
--- /dev/null
+++ b/app/src/main/res/layout/widget_config_analogue.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/widget_config_date_time.xml b/app/src/main/res/layout/widget_config_digital.xml
similarity index 70%
rename from app/src/main/res/layout/widget_config_date_time.xml
rename to app/src/main/res/layout/widget_config_digital.xml
index 43e33057..0d7d403f 100644
--- a/app/src/main/res/layout/widget_config_date_time.xml
+++ b/app/src/main/res/layout/widget_config_digital.xml
@@ -1,42 +1,47 @@
-
+ android:layout_above="@+id/config_digital_text_color" />