Added selecting widget background color

pull/183/head
M66B 5 years ago
parent a4ccf652e4
commit 6470c4f45c

@ -21,6 +21,7 @@ package eu.faircode.email;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
@ -37,6 +38,10 @@ import android.widget.TextView;
import androidx.constraintlayout.widget.Group;
import androidx.preference.PreferenceManager;
import com.flask.colorpicker.ColorPickerView;
import com.flask.colorpicker.builder.ColorPickerClickListener;
import com.flask.colorpicker.builder.ColorPickerDialogBuilder;
import java.util.ArrayList;
import java.util.List;
@ -45,6 +50,7 @@ public class ActivityWidget extends ActivityBase {
private Spinner spAccount;
private CheckBox cbSemiTransparent;
private Button btnColor;
private View inOld;
private View inNew;
private RadioButton rbOld;
@ -53,6 +59,7 @@ public class ActivityWidget extends ActivityBase {
private ContentLoadingProgressBar pbWait;
private Group grpReady;
private int background = Color.TRANSPARENT;
private ArrayAdapter<EntityAccount> adapterAccount;
@Override
@ -65,6 +72,9 @@ public class ActivityWidget extends ActivityBase {
return;
}
if (savedInstanceState != null)
background = savedInstanceState.getInt("fair:color");
appWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
@ -73,6 +83,7 @@ public class ActivityWidget extends ActivityBase {
spAccount = findViewById(R.id.spAccount);
cbSemiTransparent = findViewById(R.id.cbSemiTransparent);
btnColor = findViewById(R.id.btnColor);
inOld = findViewById(R.id.inOld);
inNew = findViewById(R.id.inNew);
rbOld = findViewById(R.id.rbOld);
@ -87,13 +98,37 @@ public class ActivityWidget extends ActivityBase {
cbSemiTransparent.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
inOld.setBackgroundResource(R.drawable.widget_background);
inNew.setBackgroundResource(R.drawable.widget_background);
} else {
inOld.setBackgroundColor(Color.TRANSPARENT);
inNew.setBackgroundColor(Color.TRANSPARENT);
}
setBackground();
btnColor.setEnabled(!isChecked);
}
});
btnColor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ColorPickerDialogBuilder
.with(ActivityWidget.this)
.setTitle(R.string.title_widget_background)
.showColorEdit(true)
.wheelType(ColorPickerView.WHEEL_TYPE.FLOWER)
.density(6)
.lightnessSliderOnly()
.setPositiveButton(android.R.string.ok, new ColorPickerClickListener() {
@Override
public void onClick(DialogInterface dialog, int selectedColor, Integer[] allColors) {
background = selectedColor;
setBackground();
}
})
.setNegativeButton(R.string.title_reset, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
background = Color.TRANSPARENT;
setBackground();
}
})
.build()
.show();
}
});
@ -126,6 +161,7 @@ public class ActivityWidget extends ActivityBase {
editor.remove("widget." + appWidgetId + ".name");
editor.putLong("widget." + appWidgetId + ".account", account == null ? -1L : account.id);
editor.putBoolean("widget." + appWidgetId + ".semi", cbSemiTransparent.isChecked());
editor.putInt("widget." + appWidgetId + ".background", background);
editor.putInt("widget." + appWidgetId + ".layout", rbNew.isChecked() ? 1 : 0);
editor.apply();
@ -143,6 +179,7 @@ public class ActivityWidget extends ActivityBase {
((TextView) inOld.findViewById(R.id.tvCount)).setText("12");
((TextView) inNew.findViewById(R.id.tvCount)).setText("12");
btnColor.setEnabled(!cbSemiTransparent.isChecked());
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
@ -179,4 +216,20 @@ public class ActivityWidget extends ActivityBase {
}
}.execute(this, new Bundle(), "widget:accounts");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("fair:color", background);
super.onSaveInstanceState(outState);
}
private void setBackground() {
if (cbSemiTransparent.isChecked()) {
inOld.setBackgroundResource(R.drawable.widget_background);
inNew.setBackgroundResource(R.drawable.widget_background);
} else {
inOld.setBackgroundColor(background);
inNew.setBackgroundColor(background);
}
}
}

@ -21,8 +21,10 @@ package eu.faircode.email;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
@ -30,6 +32,7 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Spinner;
import android.widget.TextView;
@ -38,6 +41,10 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.preference.PreferenceManager;
import com.flask.colorpicker.ColorPickerView;
import com.flask.colorpicker.builder.ColorPickerClickListener;
import com.flask.colorpicker.builder.ColorPickerDialogBuilder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -50,12 +57,14 @@ public class ActivityWidgetUnified extends ActivityBase {
private CheckBox cbUnseen;
private CheckBox cbFlagged;
private CheckBox cbSemiTransparent;
private Button btnColor;
private Spinner spFontSize;
private Spinner spPadding;
private Button btnSave;
private ContentLoadingProgressBar pbWait;
private Group grpReady;
private int background = Color.TRANSPARENT;
private ArrayAdapter<EntityAccount> adapterAccount;
private ArrayAdapter<TupleFolderEx> adapterFolder;
private ArrayAdapter<String> adapterFontSize;
@ -71,6 +80,9 @@ public class ActivityWidgetUnified extends ActivityBase {
return;
}
if (savedInstanceState != null)
background = savedInstanceState.getInt("fair:color");
appWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
@ -82,6 +94,7 @@ public class ActivityWidgetUnified extends ActivityBase {
cbUnseen = findViewById(R.id.cbUnseen);
cbFlagged = findViewById(R.id.cbFlagged);
cbSemiTransparent = findViewById(R.id.cbSemiTransparent);
btnColor = findViewById(R.id.btnColor);
spFontSize = findViewById(R.id.spFontSize);
spPadding = findViewById(R.id.spPadding);
btnSave = findViewById(R.id.btnSave);
@ -91,6 +104,40 @@ public class ActivityWidgetUnified extends ActivityBase {
final Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
cbSemiTransparent.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
btnColor.setEnabled(!isChecked);
}
});
btnColor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ColorPickerDialogBuilder
.with(ActivityWidgetUnified.this)
.setTitle(R.string.title_widget_background)
.showColorEdit(true)
.wheelType(ColorPickerView.WHEEL_TYPE.FLOWER)
.density(6)
.lightnessSliderOnly()
.setPositiveButton(android.R.string.ok, new ColorPickerClickListener() {
@Override
public void onClick(DialogInterface dialog, int selectedColor, Integer[] allColors) {
background = selectedColor;
}
})
.setNegativeButton(R.string.title_reset, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
background = Color.TRANSPARENT;
}
})
.build()
.show();
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
@ -114,6 +161,7 @@ public class ActivityWidgetUnified extends ActivityBase {
editor.putBoolean("widget." + appWidgetId + ".unseen", cbUnseen.isChecked());
editor.putBoolean("widget." + appWidgetId + ".flagged", cbFlagged.isChecked());
editor.putBoolean("widget." + appWidgetId + ".semi", cbSemiTransparent.isChecked());
editor.putInt("widget." + appWidgetId + ".background", background);
editor.putInt("widget." + appWidgetId + ".font", spFontSize.getSelectedItemPosition());
editor.putInt("widget." + appWidgetId + ".padding", spPadding.getSelectedItemPosition());
@ -216,6 +264,7 @@ public class ActivityWidgetUnified extends ActivityBase {
adapterPadding.setDropDownViewResource(R.layout.spinner_item1_dropdown);
spPadding.setAdapter(adapterPadding);
btnColor.setEnabled(!cbSemiTransparent.isChecked());
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
@ -252,4 +301,10 @@ public class ActivityWidgetUnified extends ActivityBase {
}
}.execute(this, new Bundle(), "widget:accounts");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("fair:color", background);
super.onSaveInstanceState(outState);
}
}

@ -57,6 +57,7 @@ public class Widget extends AppWidgetProvider {
String name = prefs.getString("widget." + appWidgetId + ".name", null);
long account = prefs.getLong("widget." + appWidgetId + ".account", -1L);
boolean semi = prefs.getBoolean("widget." + appWidgetId + ".semi", true);
int background = prefs.getInt("widget." + appWidgetId + ".background", Color.TRANSPARENT);
int layout = prefs.getInt("widget." + appWidgetId + ".layout", 0);
List<EntityFolder> folders = db.folder().getNotifyingFolders(account);
@ -99,7 +100,7 @@ public class Widget extends AppWidgetProvider {
views.setOnClickPendingIntent(R.id.widget, pi);
if (!semi)
views.setInt(R.id.widget, "setBackgroundColor", Color.TRANSPARENT);
views.setInt(R.id.widget, "setBackgroundColor", background);
if (layout == 1)
views.setImageViewResource(R.id.ivMessage, unseen == 0

@ -44,6 +44,7 @@ public class WidgetUnified extends AppWidgetProvider {
long folder = prefs.getLong("widget." + appWidgetId + ".folder", -1L);
String type = prefs.getString("widget." + appWidgetId + ".type", null);
boolean semi = prefs.getBoolean("widget." + appWidgetId + ".semi", true);
int background = prefs.getInt("widget." + appWidgetId + ".background", Color.TRANSPARENT);
int font = prefs.getInt("widget." + appWidgetId + ".font", 0);
int padding = prefs.getInt("widget." + appWidgetId + ".padding", 0);
@ -58,7 +59,7 @@ public class WidgetUnified extends AppWidgetProvider {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_unified);
if (!semi)
views.setInt(R.id.widget, "setBackgroundColor", Color.TRANSPARENT);
views.setInt(R.id.widget, "setBackgroundColor", background);
if (font > 0)
views.setTextViewTextSize(R.id.title, TypedValue.COMPLEX_UNIT_SP, getFontSizeSp(font));

@ -37,6 +37,17 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spAccount" />
<Button
android:id="@+id/btnColor"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:tag="disable"
android:text="@string/title_widget_background"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSemiTransparent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLayout"
android:layout_width="wrap_content"
@ -45,7 +56,7 @@
android:background="@color/lightBluePrimary"
android:padding="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSemiTransparent">
app:layout_constraintTop_toBottomOf="@id/btnColor">
<include
android:id="@+id/inOld"
@ -108,6 +119,6 @@
android:id="@+id/grpReady"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvAccount,spAccount,cbSemiTransparent,clLayout,btnSave" />
app:constraint_referenced_ids="tvAccount,spAccount,cbSemiTransparent,btnColor,clLayout,btnSave" />
</androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ScrollViewEx>

@ -68,6 +68,17 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbFlagged" />
<Button
android:id="@+id/btnColor"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:tag="disable"
android:text="@string/title_widget_background"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSemiTransparent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvFontSize"
android:layout_width="wrap_content"
@ -76,7 +87,7 @@
android:text="@string/title_widget_font_size"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbSemiTransparent" />
app:layout_constraintTop_toBottomOf="@id/btnColor" />
<Spinner
android:id="@+id/spFontSize"
@ -128,5 +139,9 @@
android:id="@+id/grpReady"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvAccount,spAccount,tvFolder,spFolder,cbUnseen,cbFlagged,btnSave" />
app:constraint_referenced_ids="
tvAccount,spAccount,tvFolder,spFolder,
cbUnseen,cbFlagged,
cbSemiTransparent,btnColor,
tvFontSize,spFontSize,tvPadding,spPadding,btnSave" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1337,6 +1337,7 @@
<string name="title_widget_font_size">Font size</string>
<string name="title_widget_padding">Padding size</string>
<string name="title_widget_semi_transparent">Semi transparent background</string>
<string name="title_widget_background">Background color</string>
<string name="title_accessibility_collapsed">Collapsed</string>
<string name="title_accessibility_expanded">Expanded</string>

Loading…
Cancel
Save