version upgrade, theme fix, added initial status schedule support

This commit is contained in:
nuclearfog 2023-07-21 11:35:23 +02:00
parent df114ba494
commit 75be99fe87
No known key found for this signature in database
GPG Key ID: 03488A185C476379
19 changed files with 87 additions and 47 deletions

View File

@ -11,8 +11,8 @@ android {
applicationId 'org.nuclearfog.twidda' applicationId 'org.nuclearfog.twidda'
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 33 targetSdkVersion 33
versionCode 93 versionCode 94
versionName '3.2.6' versionName '3.3'
resConfigs 'en', 'es', 'de-rDE', 'zh-rCN' resConfigs 'en', 'es', 'de-rDE', 'zh-rCN'
} }
@ -41,25 +41,25 @@ android {
} }
dependencies { dependencies {
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'org.jsoup:jsoup:1.15.4' implementation 'androidx.media3:media3-exoplayer:1.1.0'
implementation 'androidx.media3:media3-ui:1.1.0'
implementation 'androidx.media3:media3-datasource-okhttp:1.1.0'
//noinspection GradleDependency //noinspection GradleDependency
implementation 'com.squareup.okhttp3:okhttp:4.11.0' implementation 'com.squareup.okhttp3:okhttp:4.11.0'
//noinspection GradleDependency //noinspection GradleDependency
implementation 'com.squareup.picasso:picasso:2.8' implementation 'com.squareup.picasso:picasso:2.8'
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
implementation 'com.github.QuadFlask:colorpicker:0.0.15' implementation 'com.github.QuadFlask:colorpicker:0.0.15'
implementation 'com.github.nuclearfog:ZoomView:1.0.4' implementation 'com.github.nuclearfog:ZoomView:1.0.4'
implementation 'com.github.nuclearfog:Tagger:2.4' implementation 'com.github.nuclearfog:Tagger:2.4'
implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1' implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1'
implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT' implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT'
implementation 'com.github.UnifiedPush:android-connector:2.1.1' implementation 'com.github.UnifiedPush:android-connector:2.1.1'
implementation 'androidx.media3:media3-exoplayer:1.1.0' implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.media3:media3-ui:1.1.0' implementation 'jp.wasabeef:picasso-transformations:2.4.0'
implementation 'androidx.media3:media3-datasource-okhttp:1.1.0' implementation 'org.jsoup:jsoup:1.15.4'
} }

View File

@ -449,9 +449,7 @@ public class Mastodon implements Connection {
@Override @Override
public Trends getTrends() throws MastodonException { public Trends getTrends() throws MastodonException {
List<String> params = new ArrayList<>(); Trends result = getTrends(ENDPOINT_TRENDS, new ArrayList<>());
params.add("limit=" + settings.getListSize());
Trends result = getTrends(ENDPOINT_TRENDS, params);
Collections.sort(result); Collections.sort(result);
return result; return result;
} }
@ -461,7 +459,6 @@ public class Mastodon implements Connection {
public Trends searchHashtags(String search) throws MastodonException { public Trends searchHashtags(String search) throws MastodonException {
List<String> params = new ArrayList<>(); List<String> params = new ArrayList<>();
params.add("q=" + StringUtils.encode(search)); params.add("q=" + StringUtils.encode(search));
params.add("limit=" + settings.getListSize());
params.add("type=hashtags"); params.add("type=hashtags");
Trends result = getTrends(ENDPOINT_SEARCH_TIMELINE, params); Trends result = getTrends(ENDPOINT_SEARCH_TIMELINE, params);
Collections.sort(result); Collections.sort(result);
@ -472,7 +469,6 @@ public class Mastodon implements Connection {
@Override @Override
public Trends showHashtagFollowing(long cursor) throws ConnectionException { public Trends showHashtagFollowing(long cursor) throws ConnectionException {
List<String> params = new ArrayList<>(); List<String> params = new ArrayList<>();
params.add("limit=" + settings.getListSize());
if (cursor != 0L) if (cursor != 0L)
params.add("max_id=" + cursor); params.add("max_id=" + cursor);
return getTrends(ENDPOINT_HASHTAG_FOLLOWING, params); return getTrends(ENDPOINT_HASHTAG_FOLLOWING, params);
@ -661,8 +657,10 @@ public class Mastodon implements Connection {
params.add("status=" + StringUtils.encode(update.getText())); params.add("status=" + StringUtils.encode(update.getText()));
if (!update.getLanguageCode().isEmpty()) if (!update.getLanguageCode().isEmpty())
params.add("language=" + update.getLanguageCode()); params.add("language=" + update.getLanguageCode());
if (update.getReplyId() != 0) if (update.getReplyId() != 0L)
params.add("in_reply_to_id=" + update.getReplyId()); params.add("in_reply_to_id=" + update.getReplyId());
if (update.getScheduleTime() != 0L)
params.add("scheduled_at=" + update.getScheduleTime());
if (update.getVisibility() == Status.VISIBLE_DIRECT) if (update.getVisibility() == Status.VISIBLE_DIRECT)
params.add("visibility=direct"); params.add("visibility=direct");
else if (update.getVisibility() == Status.VISIBLE_PRIVATE) else if (update.getVisibility() == Status.VISIBLE_PRIVATE)
@ -1380,6 +1378,7 @@ public class Mastodon implements Connection {
*/ */
private Trends getTrends(String endpoint, List<String> params) throws MastodonException { private Trends getTrends(String endpoint, List<String> params) throws MastodonException {
try { try {
params.add("limit=" + settings.getListSize());
Response response = get(endpoint, params); Response response = get(endpoint, params);
ResponseBody body = response.body(); ResponseBody body = response.body();
if (response.code() == 200 && body != null) { if (response.code() == 200 && body != null) {

View File

@ -135,7 +135,7 @@ public class MastodonUser implements User {
@Override @Override
public String getProfileImageThumbnailUrl() { public String getProfileImageThumbnailUrl() {
return profileUrl; return profileUrl; // todo switch to thumbnail url if supported by API
} }
@ -147,7 +147,7 @@ public class MastodonUser implements User {
@Override @Override
public String getBannerImageThumbnailUrl() { public String getBannerImageThumbnailUrl() {
return bannerUrl; return bannerUrl; // todo switch to thumbnail url if supported by API
} }
@ -171,6 +171,7 @@ public class MastodonUser implements User {
@Override @Override
public boolean isVerified() { public boolean isVerified() {
// using getFields() instead
return false; return false;
} }

View File

@ -36,6 +36,7 @@ public class StatusUpdate implements Serializable, Closeable {
// main attributes // main attributes
private long statusId = 0L; private long statusId = 0L;
private long replyId = 0L; private long replyId = 0L;
private long scheduleTime = 0L;
private boolean sensitive = false; private boolean sensitive = false;
private boolean spoiler = false; private boolean spoiler = false;
private int visibility = Status.VISIBLE_PUBLIC; private int visibility = Status.VISIBLE_PUBLIC;
@ -199,6 +200,15 @@ public class StatusUpdate implements Serializable, Closeable {
this.location = new LocationUpdate(location.getLongitude(), location.getLatitude()); this.location = new LocationUpdate(location.getLongitude(), location.getLatitude());
} }
/**
* set time to schedule the post
*
* @param scheduleTime future time
*/
public void setScheduleTime(long scheduleTime) {
this.scheduleTime = scheduleTime;
}
/** /**
* set status visibility * set status visibility
* *
@ -338,6 +348,13 @@ public class StatusUpdate implements Serializable, Closeable {
return spoiler; return spoiler;
} }
/**
* @return time to post the status
*/
public long getScheduleTime() {
return scheduleTime;
}
/** /**
* get visibility states * get visibility states
* *

View File

@ -10,6 +10,7 @@ import android.graphics.Color;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable;
@ -76,7 +77,7 @@ public class AppStyles {
public static void setTheme(ViewGroup root) { public static void setTheme(ViewGroup root) {
AppStyles instance = new AppStyles(root.getContext()); AppStyles instance = new AppStyles(root.getContext());
root.setBackgroundColor(instance.settings.getBackgroundColor()); root.setBackgroundColor(instance.settings.getBackgroundColor());
instance.setSubViewTheme(root); instance.setSubViewTheme(root, instance.settings.getBackgroundColor());
} }
/** /**
@ -88,7 +89,7 @@ public class AppStyles {
public static void setTheme(ViewGroup root, @ColorInt int background) { public static void setTheme(ViewGroup root, @ColorInt int background) {
AppStyles instance = new AppStyles(root.getContext()); AppStyles instance = new AppStyles(root.getContext());
root.setBackgroundColor(background); root.setBackgroundColor(background);
instance.setSubViewTheme(root); instance.setSubViewTheme(root, background);
} }
/** /**
@ -99,7 +100,7 @@ public class AppStyles {
*/ */
public static void setEditorTheme(ViewGroup root, ImageView background) { public static void setEditorTheme(ViewGroup root, ImageView background) {
AppStyles instance = new AppStyles(root.getContext()); AppStyles instance = new AppStyles(root.getContext());
instance.setSubViewTheme(root); instance.setSubViewTheme(root, instance.settings.getPopupColor());
setDrawableColor(background, instance.settings.getPopupColor()); setDrawableColor(background, instance.settings.getPopupColor());
} }
@ -351,20 +352,22 @@ public class AppStyles {
* parsing all views from a sub ViewGroup recursively and set all colors and fonts * parsing all views from a sub ViewGroup recursively and set all colors and fonts
* *
* @param group current ViewGroup to parse for sub views * @param group current ViewGroup to parse for sub views
* @param color root background color
*/ */
private void setSubViewTheme(ViewGroup group) { private void setSubViewTheme(ViewGroup group, int color) {
for (int pos = 0; pos < group.getChildCount(); pos++) { for (int pos = 0; pos < group.getChildCount(); pos++) {
View child = group.getChildAt(pos); View child = group.getChildAt(pos);
if (child instanceof SwitchButton) { if (child instanceof SwitchButton) {
SwitchButton sw = (SwitchButton) child; SwitchButton sw = (SwitchButton) child;
int[] color = {settings.getIconColor()}; int[] thumbColor = {settings.getIconColor()};
sw.setTintColor(settings.getHighlightColor()); sw.setTintColor(settings.getHighlightColor());
sw.setThumbColor(new ColorStateList(SWITCH_STATES, color)); sw.setThumbColor(new ColorStateList(SWITCH_STATES, thumbColor));
} else if (child instanceof SeekBar) { } else if (child instanceof SeekBar) {
SeekBar seekBar = (SeekBar) child; SeekBar seekBar = (SeekBar) child;
setSeekBarColor(seekBar, settings); setSeekBarColor(seekBar, settings);
} else if (child instanceof Spinner) { } else if (child instanceof Spinner) {
Spinner dropdown = (Spinner) child; Spinner dropdown = (Spinner) child;
dropdown.setPopupBackgroundDrawable(new ColorDrawable(color));
setDrawableColor(dropdown.getBackground(), settings.getIconColor()); setDrawableColor(dropdown.getBackground(), settings.getIconColor());
} else if (child instanceof TextView) { } else if (child instanceof TextView) {
TextView tv = (TextView) child; TextView tv = (TextView) child;
@ -389,9 +392,9 @@ public class AppStyles {
if (child instanceof CardView) { if (child instanceof CardView) {
CardView card = (CardView) child; CardView card = (CardView) child;
card.setCardBackgroundColor(settings.getCardColor()); card.setCardBackgroundColor(settings.getCardColor());
setSubViewTheme(card); setSubViewTheme(card, color);
} else if (!(child instanceof ViewPager2)) { } else if (!(child instanceof ViewPager2)) {
setSubViewTheme((ViewGroup) child); setSubViewTheme((ViewGroup) child, color);
} }
} }
} }

View File

@ -132,7 +132,7 @@ public class GlobalSettings {
private static final int DEFAULT_BACKGROUND_COLOR = 0xff0f114a; private static final int DEFAULT_BACKGROUND_COLOR = 0xff0f114a;
private static final int DEFAULT_HIGHLIGHT_COLOR = 0xffff00ff; private static final int DEFAULT_HIGHLIGHT_COLOR = 0xffff00ff;
private static final int DEFAULT_FONT_COLOR = Color.WHITE; private static final int DEFAULT_FONT_COLOR = Color.WHITE;
private static final int DEFAULT_POPUP_COLOR = 0xff19aae8; private static final int DEFAULT_POPUP_COLOR = 0xFF0B509C;
private static final int DEFAULT_CARD_COLOR = 0x40000000; private static final int DEFAULT_CARD_COLOR = 0x40000000;
private static final int DEFAULT_ICON_COLOR = Color.WHITE; private static final int DEFAULT_ICON_COLOR = Color.WHITE;
private static final int DEFAULT_RT_ICON_COLOR = Color.GREEN; private static final int DEFAULT_RT_ICON_COLOR = Color.GREEN;

View File

@ -43,8 +43,8 @@ import org.nuclearfog.twidda.ui.adapter.recyclerview.IconAdapter.OnMediaClickLis
import org.nuclearfog.twidda.ui.dialogs.AudioPlayerDialog; import org.nuclearfog.twidda.ui.dialogs.AudioPlayerDialog;
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog; import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog;
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener; import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener;
import org.nuclearfog.twidda.ui.dialogs.EmojiPicker; import org.nuclearfog.twidda.ui.dialogs.EmojiPickerDialog;
import org.nuclearfog.twidda.ui.dialogs.EmojiPicker.OnEmojiSelectListener; import org.nuclearfog.twidda.ui.dialogs.EmojiPickerDialog.OnEmojiSelectListener;
import org.nuclearfog.twidda.ui.dialogs.PollDialog; import org.nuclearfog.twidda.ui.dialogs.PollDialog;
import org.nuclearfog.twidda.ui.dialogs.PollDialog.PollUpdateCallback; import org.nuclearfog.twidda.ui.dialogs.PollDialog.PollUpdateCallback;
import org.nuclearfog.twidda.ui.dialogs.ProgressDialog; import org.nuclearfog.twidda.ui.dialogs.ProgressDialog;
@ -103,7 +103,7 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
private ProgressDialog loadingCircle; private ProgressDialog loadingCircle;
private PollDialog pollDialog; private PollDialog pollDialog;
private AudioPlayerDialog audioDialog; private AudioPlayerDialog audioDialog;
private EmojiPicker emojiPicker; private EmojiPickerDialog emojiPicker;
private StatusPreferenceDialog preferenceDialog; private StatusPreferenceDialog preferenceDialog;
private IconAdapter adapter; private IconAdapter adapter;
@ -140,7 +140,7 @@ public class StatusEditor extends MediaActivity implements ActivityResultCallbac
preferenceDialog = new StatusPreferenceDialog(this, statusUpdate); preferenceDialog = new StatusPreferenceDialog(this, statusUpdate);
pollDialog = new PollDialog(this, this); pollDialog = new PollDialog(this, this);
audioDialog = new AudioPlayerDialog(this); audioDialog = new AudioPlayerDialog(this);
emojiPicker = new EmojiPicker(this, this); emojiPicker = new EmojiPickerDialog(this, this);
adapter = new IconAdapter(this, true); adapter = new IconAdapter(this, true);
iconList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)); iconList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));

View File

@ -66,12 +66,11 @@ public class DropdownAdapter extends BaseAdapter {
textItem.setTextColor(settings.getTextColor()); textItem.setTextColor(settings.getTextColor());
textItem.setTypeface(settings.getTypeFace()); textItem.setTypeface(settings.getTypeFace());
textItem.setBackgroundColor(settings.getCardColor()); textItem.setBackgroundColor(settings.getCardColor());
convertView.setBackgroundColor(settings.getBackgroundColor());
} else { } else {
textItem = convertView.findViewById(R.id.dropdown_textitem); textItem = convertView.findViewById(R.id.dropdown_textitem);
} }
textItem.setText(items[position]); textItem.setText(items[position]);
if (fonts.length >= items.length) { if (position < fonts.length) {
textItem.setTypeface(fonts[position]); textItem.setTypeface(fonts[position]);
} }
return convertView; return convertView;

View File

@ -13,6 +13,7 @@ import androidx.annotation.Nullable;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.config.GlobalSettings;
/** /**
* Custom alert dialog class to show error and warning messages to user * Custom alert dialog class to show error and warning messages to user
@ -147,6 +148,7 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
private Button confirm, cancel; private Button confirm, cancel;
private OnConfirmListener listener; private OnConfirmListener listener;
private GlobalSettings settings;
private int type = 0; private int type = 0;
private String messageStr = ""; private String messageStr = "";
@ -156,6 +158,7 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
*/ */
public ConfirmDialog(Activity activity, OnConfirmListener listener) { public ConfirmDialog(Activity activity, OnConfirmListener listener) {
super(activity, R.style.ConfirmDialog); super(activity, R.style.ConfirmDialog);
settings = GlobalSettings.get(activity);
this.listener = listener; this.listener = listener;
} }
@ -170,7 +173,7 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
title = findViewById(R.id.confirm_title); title = findViewById(R.id.confirm_title);
message = findViewById(R.id.confirm_message); message = findViewById(R.id.confirm_message);
AppStyles.setTheme(root); AppStyles.setTheme(root, settings.getPopupColor());
confirm.setOnClickListener(this); confirm.setOnClickListener(this);
cancel.setOnClickListener(this); cancel.setOnClickListener(this);

View File

@ -12,6 +12,7 @@ import androidx.annotation.NonNull;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.config.GlobalSettings;
public class DescriptionDialog extends Dialog implements OnClickListener { public class DescriptionDialog extends Dialog implements OnClickListener {
@ -19,12 +20,14 @@ public class DescriptionDialog extends Dialog implements OnClickListener {
private static final String KEY_SAVE = " description-save"; private static final String KEY_SAVE = " description-save";
private DescriptionCallback callback; private DescriptionCallback callback;
private GlobalSettings settings;
private EditText descriptionEdit; private EditText descriptionEdit;
public DescriptionDialog(Activity activity, DescriptionCallback callback) { public DescriptionDialog(Activity activity, DescriptionCallback callback) {
super(activity, R.style.DefaultDialog); super(activity, R.style.DefaultDialog);
settings = GlobalSettings.get(activity);
this.callback = callback; this.callback = callback;
} }
@ -36,7 +39,7 @@ public class DescriptionDialog extends Dialog implements OnClickListener {
ViewGroup root = findViewById(R.id.dialog_description_root); ViewGroup root = findViewById(R.id.dialog_description_root);
View applyButton = findViewById(R.id.dialog_description_apply); View applyButton = findViewById(R.id.dialog_description_apply);
descriptionEdit = findViewById(R.id.dialog_description_input); descriptionEdit = findViewById(R.id.dialog_description_input);
AppStyles.setTheme(root); AppStyles.setTheme(root, settings.getPopupColor());
applyButton.setOnClickListener(this); applyButton.setOnClickListener(this);
} }

View File

@ -31,7 +31,7 @@ import java.util.List;
* *
* @author nuclearfog * @author nuclearfog
*/ */
public class EmojiPicker extends BottomSheetDialog implements AsyncCallback<List<Emoji>>, OnEmojiClickListener { public class EmojiPickerDialog extends BottomSheetDialog implements AsyncCallback<List<Emoji>>, OnEmojiClickListener {
private OnEmojiSelectListener listener; private OnEmojiSelectListener listener;
private EmojiAdapter adapter; private EmojiAdapter adapter;
@ -41,7 +41,7 @@ public class EmojiPicker extends BottomSheetDialog implements AsyncCallback<List
* @param activity activity used to show emoji picker * @param activity activity used to show emoji picker
* @param listener emoji add listener * @param listener emoji add listener
*/ */
public EmojiPicker(Activity activity, OnEmojiSelectListener listener) { public EmojiPickerDialog(Activity activity, OnEmojiSelectListener listener) {
super(activity, R.style.EmojiPickerDialog); super(activity, R.style.EmojiPickerDialog);
emojiLoader = new EmojiLoader(activity.getApplicationContext()); emojiLoader = new EmojiLoader(activity.getApplicationContext());
adapter = new EmojiAdapter(this); adapter = new EmojiAdapter(this);

View File

@ -27,6 +27,7 @@ import org.nuclearfog.twidda.backend.async.StatusFilterAction.FilterActionResult
import org.nuclearfog.twidda.backend.helper.update.FilterUpdate; import org.nuclearfog.twidda.backend.helper.update.FilterUpdate;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.backend.utils.ErrorUtils; import org.nuclearfog.twidda.backend.utils.ErrorUtils;
import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.model.Filter; import org.nuclearfog.twidda.model.Filter;
import org.nuclearfog.twidda.ui.adapter.listview.DropdownAdapter; import org.nuclearfog.twidda.ui.adapter.listview.DropdownAdapter;
@ -50,6 +51,7 @@ public class FilterDialog extends Dialog implements OnClickListener, OnCheckedCh
private StatusFilterAction filterAction; private StatusFilterAction filterAction;
private FilterDialogCallback callback; private FilterDialogCallback callback;
private FilterUpdate update; private FilterUpdate update;
private GlobalSettings settings;
/** /**
* *
@ -58,6 +60,7 @@ public class FilterDialog extends Dialog implements OnClickListener, OnCheckedCh
super(activity, R.style.DefaultDialog); super(activity, R.style.DefaultDialog);
this.callback = callback; this.callback = callback;
update = new FilterUpdate(); update = new FilterUpdate();
settings = GlobalSettings.get(activity);
filterAction = new StatusFilterAction(activity); filterAction = new StatusFilterAction(activity);
timeUnitAdapter = new DropdownAdapter(activity.getApplicationContext()); timeUnitAdapter = new DropdownAdapter(activity.getApplicationContext());
timeUnitAdapter.setItems(R.array.timeunits); timeUnitAdapter.setItems(R.array.timeunits);
@ -83,7 +86,7 @@ public class FilterDialog extends Dialog implements OnClickListener, OnCheckedCh
txt_duration = findViewById(R.id.dialog_filter_time); txt_duration = findViewById(R.id.dialog_filter_time);
timeunit.setAdapter(timeUnitAdapter); timeunit.setAdapter(timeUnitAdapter);
AppStyles.setTheme(root); AppStyles.setTheme(root, settings.getPopupColor());
btn_create.setOnClickListener(this); btn_create.setOnClickListener(this);
sw_home.setOnCheckedChangeListener(this); sw_home.setOnCheckedChangeListener(this);

View File

@ -10,6 +10,7 @@ import androidx.annotation.NonNull;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.model.Media.Meta; import org.nuclearfog.twidda.model.Media.Meta;
import org.nuclearfog.twidda.ui.adapter.listview.MetaAdapter; import org.nuclearfog.twidda.ui.adapter.listview.MetaAdapter;
@ -21,6 +22,7 @@ import org.nuclearfog.twidda.ui.adapter.listview.MetaAdapter;
public class MetaDialog extends Dialog { public class MetaDialog extends Dialog {
private MetaAdapter adapter; private MetaAdapter adapter;
private GlobalSettings settings;
/** /**
* *
@ -28,6 +30,7 @@ public class MetaDialog extends Dialog {
public MetaDialog(Activity activity) { public MetaDialog(Activity activity) {
super(activity, R.style.MetaDialog); super(activity, R.style.MetaDialog);
adapter = new MetaAdapter(activity.getApplicationContext()); adapter = new MetaAdapter(activity.getApplicationContext());
settings = GlobalSettings.get(activity);
} }
@ -39,7 +42,7 @@ public class MetaDialog extends Dialog {
ListView list = findViewById(R.id.dialog_meta_list); ListView list = findViewById(R.id.dialog_meta_list);
list.setAdapter(adapter); list.setAdapter(adapter);
AppStyles.setTheme(root); AppStyles.setTheme(root, settings.getPopupColor());
} }

View File

@ -12,6 +12,7 @@ import androidx.annotation.NonNull;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.backend.utils.StringUtils; import org.nuclearfog.twidda.backend.utils.StringUtils;
import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.model.Metrics; import org.nuclearfog.twidda.model.Metrics;
import java.io.Serializable; import java.io.Serializable;
@ -28,6 +29,8 @@ public class MetricsDialog extends Dialog {
private TextView views, profileClicks, linkClicks, quotes, videoViews; private TextView views, profileClicks, linkClicks, quotes, videoViews;
private View linkIcon, quoteIcon, videoIcon; private View linkIcon, quoteIcon, videoIcon;
private GlobalSettings settings;
private Metrics metrics; private Metrics metrics;
/** /**
@ -35,6 +38,7 @@ public class MetricsDialog extends Dialog {
*/ */
public MetricsDialog(Activity activity) { public MetricsDialog(Activity activity) {
super(activity, R.style.DefaultDialog); super(activity, R.style.DefaultDialog);
settings = GlobalSettings.get(activity);
} }
@ -51,7 +55,7 @@ public class MetricsDialog extends Dialog {
linkIcon = findViewById(R.id.dialog_metrics_link_clicks_icon); linkIcon = findViewById(R.id.dialog_metrics_link_clicks_icon);
quoteIcon = findViewById(R.id.dialog_metrics_quotes_icon); quoteIcon = findViewById(R.id.dialog_metrics_quotes_icon);
videoIcon = findViewById(R.id.dialog_metrics_video_view_icon); videoIcon = findViewById(R.id.dialog_metrics_video_view_icon);
AppStyles.setTheme(root); AppStyles.setTheme(root, settings.getPopupColor());
} }

View File

@ -20,6 +20,7 @@ import com.kyleduo.switchbutton.SwitchButton;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.helper.update.PollUpdate; import org.nuclearfog.twidda.backend.helper.update.PollUpdate;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.model.Instance; import org.nuclearfog.twidda.model.Instance;
import org.nuclearfog.twidda.ui.adapter.listview.DropdownAdapter; import org.nuclearfog.twidda.ui.adapter.listview.DropdownAdapter;
import org.nuclearfog.twidda.ui.adapter.recyclerview.EditOptionsAdapter; import org.nuclearfog.twidda.ui.adapter.recyclerview.EditOptionsAdapter;
@ -39,6 +40,7 @@ public class PollDialog extends Dialog implements OnClickListener {
private EditOptionsAdapter optionAdapter; private EditOptionsAdapter optionAdapter;
private DropdownAdapter timeUnitAdapter; private DropdownAdapter timeUnitAdapter;
private PollUpdateCallback callback; private PollUpdateCallback callback;
private GlobalSettings settings;
private SwitchButton multiple_choice, hide_votes; private SwitchButton multiple_choice, hide_votes;
private Spinner timeUnitSelector; private Spinner timeUnitSelector;
@ -57,6 +59,7 @@ public class PollDialog extends Dialog implements OnClickListener {
optionAdapter = new EditOptionsAdapter(); optionAdapter = new EditOptionsAdapter();
timeUnitAdapter = new DropdownAdapter(activity.getApplicationContext()); timeUnitAdapter = new DropdownAdapter(activity.getApplicationContext());
timeUnitAdapter.setItems(R.array.timeunits); timeUnitAdapter.setItems(R.array.timeunits);
settings = GlobalSettings.get(activity);
} }
@ -76,7 +79,7 @@ public class PollDialog extends Dialog implements OnClickListener {
optionsList.setAdapter(optionAdapter); optionsList.setAdapter(optionAdapter);
timeUnitSelector.setAdapter(timeUnitAdapter); timeUnitSelector.setAdapter(timeUnitAdapter);
timeUnitSelector.setSelection(2); timeUnitSelector.setSelection(2);
AppStyles.setTheme(root); AppStyles.setTheme(root, settings.getPopupColor());
confirm.setOnClickListener(this); confirm.setOnClickListener(this);
close.setOnClickListener(this); close.setOnClickListener(this);

View File

@ -23,12 +23,14 @@ public class ProgressDialog extends Dialog implements OnClickListener {
@Nullable @Nullable
private OnProgressStopListener listener; private OnProgressStopListener listener;
private GlobalSettings settings;
/** /**
* *
*/ */
public ProgressDialog(Activity activity, @Nullable OnProgressStopListener listener) { public ProgressDialog(Activity activity, @Nullable OnProgressStopListener listener) {
super(activity, R.style.LoadingDialog); super(activity, R.style.LoadingDialog);
settings = GlobalSettings.get(getContext());
this.listener = listener; this.listener = listener;
} }
@ -40,7 +42,6 @@ public class ProgressDialog extends Dialog implements OnClickListener {
ProgressBar circle = findViewById(R.id.progress_item); ProgressBar circle = findViewById(R.id.progress_item);
ImageView cancel = findViewById(R.id.kill_button); ImageView cancel = findViewById(R.id.kill_button);
GlobalSettings settings = GlobalSettings.get(getContext());
AppStyles.setProgressColor(circle, settings.getHighlightColor()); AppStyles.setProgressColor(circle, settings.getHighlightColor());
AppStyles.setDrawableColor(cancel, settings.getIconColor()); AppStyles.setDrawableColor(cancel, settings.getIconColor());
if (listener != null) { if (listener != null) {

View File

@ -22,6 +22,7 @@ import org.nuclearfog.twidda.backend.async.ReportUpdater.ReportResult;
import org.nuclearfog.twidda.backend.helper.update.ReportUpdate; import org.nuclearfog.twidda.backend.helper.update.ReportUpdate;
import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.backend.utils.ErrorUtils; import org.nuclearfog.twidda.backend.utils.ErrorUtils;
import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.ui.adapter.listview.DropdownAdapter; import org.nuclearfog.twidda.ui.adapter.listview.DropdownAdapter;
import java.io.Serializable; import java.io.Serializable;
@ -37,6 +38,7 @@ public class ReportDialog extends Dialog implements OnClickListener, AsyncCallba
private DropdownAdapter adapter; private DropdownAdapter adapter;
private ReportUpdater reportUpdater; private ReportUpdater reportUpdater;
private GlobalSettings settings;
private TextView textTitle; private TextView textTitle;
private SwitchButton switchForward; private SwitchButton switchForward;
@ -52,6 +54,7 @@ public class ReportDialog extends Dialog implements OnClickListener, AsyncCallba
super(activity, R.style.DefaultDialog); super(activity, R.style.DefaultDialog);
adapter = new DropdownAdapter(activity.getApplicationContext()); adapter = new DropdownAdapter(activity.getApplicationContext());
reportUpdater = new ReportUpdater(activity.getApplicationContext()); reportUpdater = new ReportUpdater(activity.getApplicationContext());
settings = GlobalSettings.get(getContext());
adapter.setItems(R.array.reports); adapter.setItems(R.array.reports);
} }
@ -60,14 +63,14 @@ public class ReportDialog extends Dialog implements OnClickListener, AsyncCallba
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_report); setContentView(R.layout.dialog_report);
ViewGroup root = findViewById(R.id.dialog_report_root); ViewGroup rootView = findViewById(R.id.dialog_report_root);
View reportButton = findViewById(R.id.dialog_report_apply); View reportButton = findViewById(R.id.dialog_report_apply);
reportCategory = findViewById(R.id.dialog_report_category); reportCategory = findViewById(R.id.dialog_report_category);
textTitle = findViewById(R.id.dialog_report_title); textTitle = findViewById(R.id.dialog_report_title);
switchForward = findViewById(R.id.dialog_report_switch_forward); switchForward = findViewById(R.id.dialog_report_switch_forward);
editDescription = findViewById(R.id.dialog_report_description); editDescription = findViewById(R.id.dialog_report_description);
AppStyles.setTheme(root);
AppStyles.setTheme(rootView, settings.getPopupColor());
reportCategory.setAdapter(adapter); reportCategory.setAdapter(adapter);
reportButton.setOnClickListener(this); reportButton.setOnClickListener(this);

View File

@ -35,6 +35,7 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
private SwitchButton sensitiveCheck, spoilerCheck; private SwitchButton sensitiveCheck, spoilerCheck;
private DropdownAdapter visibility_adapter, language_adapter; private DropdownAdapter visibility_adapter, language_adapter;
private GlobalSettings settings;
private StatusUpdate statusUpdate; private StatusUpdate statusUpdate;
private String[] languageCodes; private String[] languageCodes;
@ -46,6 +47,7 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
this.statusUpdate = statusUpdate; this.statusUpdate = statusUpdate;
visibility_adapter = new DropdownAdapter(activity.getApplicationContext()); visibility_adapter = new DropdownAdapter(activity.getApplicationContext());
language_adapter = new DropdownAdapter(activity.getApplicationContext()); language_adapter = new DropdownAdapter(activity.getApplicationContext());
settings = GlobalSettings.get(getContext());
// initialize language selector // initialize language selector
Map<String, String> languages = new TreeMap<>(); Map<String, String> languages = new TreeMap<>();
@ -70,9 +72,8 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
visibilitySelector = findViewById(R.id.dialog_status_visibility); visibilitySelector = findViewById(R.id.dialog_status_visibility);
sensitiveCheck = findViewById(R.id.dialog_status_sensitive); sensitiveCheck = findViewById(R.id.dialog_status_sensitive);
spoilerCheck = findViewById(R.id.dialog_status_spoiler); spoilerCheck = findViewById(R.id.dialog_status_spoiler);
GlobalSettings settings = GlobalSettings.get(getContext());
AppStyles.setTheme(rootView);
AppStyles.setTheme(rootView, settings.getPopupColor());
languageSelector.setAdapter(language_adapter); languageSelector.setAdapter(language_adapter);
languageSelector.setSelection(0, false); languageSelector.setSelection(0, false);
languageSelector.setSelected(false); languageSelector.setSelected(false);

View File

@ -311,7 +311,6 @@
android:id="@+id/spinner_font" android:id="@+id/spinner_font"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:popupBackground="@android:color/transparent"
app:layout_constraintStart_toStartOf="@+id/enable_status_hide_sensitive_descr" app:layout_constraintStart_toStartOf="@+id/enable_status_hide_sensitive_descr"
app:layout_constraintTop_toBottomOf="@id/enable_status_hide_sensitive" app:layout_constraintTop_toBottomOf="@id/enable_status_hide_sensitive"
app:layout_constraintEnd_toStartOf="@id/spinner_scale" app:layout_constraintEnd_toStartOf="@id/spinner_scale"
@ -322,7 +321,6 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/settings_spinner_margin" android:layout_marginStart="@dimen/settings_spinner_margin"
android:popupBackground="@android:color/transparent"
app:layout_constraintHorizontal_weight="2" app:layout_constraintHorizontal_weight="2"
app:layout_constraintStart_toEndOf="@id/spinner_font" app:layout_constraintStart_toEndOf="@id/spinner_font"
app:layout_constraintTop_toTopOf="@id/spinner_font" app:layout_constraintTop_toTopOf="@id/spinner_font"
@ -509,7 +507,6 @@
android:id="@+id/spinner_woeid" android:id="@+id/spinner_woeid"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:popupBackground="@android:color/transparent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/settings_trend_text" app:layout_constraintTop_toBottomOf="@id/settings_trend_text"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"