From 584147e0c2b4673ace4ec6a17ef3dc1cdcf71339 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 6 May 2022 09:56:57 +0200 Subject: [PATCH] Added day/night mode for sync widget --- .../eu/faircode/email/ActivityWidgetSync.java | 20 +++++++++++++++++++ .../java/eu/faircode/email/WidgetSync.java | 16 +++++++++++++-- .../drawable/twotone_sync_disabled_24_dn.xml | 10 ++++++++++ .../main/res/layout/activity_widget_sync.xml | 15 +++++++++++++- app/src/main/res/layout/widget_sync.xml | 6 +++--- 5 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable/twotone_sync_disabled_24_dn.xml diff --git a/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java b/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java index c61516edb8..e81a1e25e0 100644 --- a/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java +++ b/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java @@ -24,10 +24,12 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; +import android.widget.CompoundButton; import androidx.preference.PreferenceManager; @@ -38,6 +40,7 @@ import com.flask.colorpicker.builder.ColorPickerDialogBuilder; public class ActivityWidgetSync extends ActivityBase { private int appWidgetId; + private CheckBox cbDayNight; private CheckBox cbSemiTransparent; private ViewButtonColor btnColor; private Button btnSave; @@ -56,13 +59,17 @@ public class ActivityWidgetSync extends ActivityBase { AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + boolean daynight = prefs.getBoolean("widget." + appWidgetId + ".daynight", false); boolean semi = prefs.getBoolean("widget." + appWidgetId + ".semi", true); int background = prefs.getInt("widget." + appWidgetId + ".background", Color.TRANSPARENT); + daynight = daynight && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setSubtitle(R.string.title_widget_title_sync); setContentView(R.layout.activity_widget_sync); + cbDayNight = findViewById(R.id.cbDayNight); cbSemiTransparent = findViewById(R.id.cbSemiTransparent); btnColor = findViewById(R.id.btnColor); btnSave = findViewById(R.id.btnSave); @@ -70,6 +77,14 @@ public class ActivityWidgetSync extends ActivityBase { final Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); + cbDayNight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + cbSemiTransparent.setEnabled(!checked); + btnColor.setEnabled(!checked); + } + }); + btnColor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -106,6 +121,7 @@ public class ActivityWidgetSync extends ActivityBase { public void onClick(View view) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ActivityWidgetSync.this); SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean("widget." + appWidgetId + ".daynight", cbDayNight.isChecked()); editor.putBoolean("widget." + appWidgetId + ".semi", cbSemiTransparent.isChecked()); editor.putInt("widget." + appWidgetId + ".background", btnColor.getColor()); editor.putInt("widget." + appWidgetId + ".version", BuildConfig.VERSION_CODE); @@ -119,8 +135,12 @@ public class ActivityWidgetSync extends ActivityBase { }); // Initialize + cbDayNight.setChecked(daynight); + cbDayNight.setVisibility(Build.VERSION.SDK_INT < Build.VERSION_CODES.S ? View.GONE : View.VISIBLE); cbSemiTransparent.setChecked(semi); + cbSemiTransparent.setEnabled(!daynight); btnColor.setColor(background); + btnColor.setEnabled(!daynight); setResult(RESULT_CANCELED, resultValue); } diff --git a/app/src/main/java/eu/faircode/email/WidgetSync.java b/app/src/main/java/eu/faircode/email/WidgetSync.java index ea8bee0faf..fee4222861 100644 --- a/app/src/main/java/eu/faircode/email/WidgetSync.java +++ b/app/src/main/java/eu/faircode/email/WidgetSync.java @@ -26,7 +26,9 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.ColorStateList; import android.graphics.Color; +import android.os.Build; import android.widget.RemoteViews; import androidx.core.graphics.ColorUtils; @@ -48,6 +50,7 @@ public class WidgetSync extends AppWidgetProvider { int colorWidgetForeground = context.getResources().getColor(R.color.colorWidgetForeground); for (int appWidgetId : appWidgetIds) { + boolean daynight = prefs.getBoolean("widget." + appWidgetId + ".daynight", false); boolean semi = prefs.getBoolean("widget." + appWidgetId + ".semi", true); int background = prefs.getInt("widget." + appWidgetId + ".background", Color.TRANSPARENT); int version = prefs.getInt("widget." + appWidgetId + ".version", 0); @@ -57,9 +60,18 @@ public class WidgetSync extends AppWidgetProvider { RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_sync); views.setOnClickPendingIntent(R.id.ivSync, pi); - views.setImageViewResource(R.id.ivSync, enabled ? R.drawable.twotone_sync_24 : R.drawable.twotone_sync_disabled_24); - if (background == Color.TRANSPARENT) { + if (!daynight && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + views.setColorStateListAttr(R.id.background, "setBackgroundTintList", 0); + views.setImageViewResource(R.id.ivSync, enabled ? R.drawable.twotone_sync_24 : R.drawable.twotone_sync_disabled_24); + } else + views.setImageViewResource(R.id.ivSync, enabled ? R.drawable.twotone_sync_24_dn : R.drawable.twotone_sync_disabled_24_dn); + + if (daynight && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + views.setInt(R.id.background, "setBackgroundColor", Color.WHITE); + views.setColorStateListAttr(R.id.background, "setBackgroundTintList", android.R.attr.colorBackground); + views.setColorAttr(R.id.ivSync, "setColorFilter", android.R.attr.textColorPrimary); + } else if (background == Color.TRANSPARENT) { if (semi) views.setInt(R.id.background, "setBackgroundResource", R.drawable.widget_background); else diff --git a/app/src/main/res/drawable/twotone_sync_disabled_24_dn.xml b/app/src/main/res/drawable/twotone_sync_disabled_24_dn.xml new file mode 100644 index 0000000000..75988dee49 --- /dev/null +++ b/app/src/main/res/drawable/twotone_sync_disabled_24_dn.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_widget_sync.xml b/app/src/main/res/layout/activity_widget_sync.xml index bd0ef313cb..23b8967824 100644 --- a/app/src/main/res/layout/activity_widget_sync.xml +++ b/app/src/main/res/layout/activity_widget_sync.xml @@ -12,22 +12,35 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + + app:layout_constraintTop_toBottomOf="@id/cbDayNight" /> + android:background="?android:colorBackground" + android:theme="@style/Theme.AppCompat.DayNight"> + android:src="@drawable/twotone_sync_disabled_24" /> \ No newline at end of file