diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index dfad92489..85fbc26d2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -85,7 +85,8 @@ public class SettingsFragment extends MastodonToolbarFragment{ private PushSubscription pushSubscription; private ImageView themeTransitionWindowView; - private TextItem checkForUpdateItem; + private TextItem checkForUpdateItem, clearImageCacheItem; + private ImageCache imageCache; @Override public void onCreate(Bundle savedInstanceState){ @@ -93,6 +94,7 @@ public class SettingsFragment extends MastodonToolbarFragment{ if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N) setRetainInstance(true); setTitle(R.string.settings); + imageCache = ImageCache.getInstance(getActivity()); accountID=getArguments().getString("account"); AccountSession session=AccountSessionManager.getInstance().getAccount(accountID); Instance instance = AccountSessionManager.getInstance().getInstanceInfo(session.domain); @@ -282,6 +284,8 @@ public class SettingsFragment extends MastodonToolbarFragment{ items.add(new TextItem(R.string.sk_settings_contribute, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/LucasGGamerM/moshidon"), R.drawable.ic_fluent_open_24_regular)); items.add(new TextItem(R.string.sk_settings_donate, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/sponsors/LucasGGamerM"), R.drawable.ic_fluent_heart_24_regular)); items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache)); + clearImageCacheItem = new TextItem(R.string.settings_clear_cache, UiUtils.formatFileSize(getContext(), imageCache.getDiskCache().size(), true), this::clearImageCache, 0); + items.add(clearImageCacheItem); items.add(new TextItem(R.string.sk_clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.sk_clear_recent_languages, R.string.sk_confirm_clear_recent_languages, R.string.clear, ()->{ GlobalUserPreferences.recentLanguages.remove(accountID); GlobalUserPreferences.save(); @@ -530,9 +534,13 @@ public class SettingsFragment extends MastodonToolbarFragment{ private void clearImageCache(){ MastodonAPIController.runInBackground(()->{ Activity activity=getActivity(); - ImageCache.getInstance(getActivity()).clear(); + imageCache.clear(); Toast.makeText(activity, R.string.media_cache_cleared, Toast.LENGTH_SHORT).show(); }); + if (list.findViewHolderForAdapterPosition(items.indexOf(clearImageCacheItem)) instanceof TextViewHolder tvh) { + clearImageCacheItem.secondaryText = UiUtils.formatFileSize(getContext(), 0, true); + tvh.rebind(); + } } @Subscribe @@ -663,27 +671,29 @@ public class SettingsFragment extends MastodonToolbarFragment{ private class TextItem extends Item{ private String text; + private String secondaryText; private Runnable onClick; private boolean loading; private int icon; public TextItem(@StringRes int text, Runnable onClick) { - this(text, onClick, false, 0); - } - - public TextItem(@StringRes int text, Runnable onClick, boolean loading) { - this(text, onClick, loading, 0); + this(text, null, onClick, false, 0); } public TextItem(@StringRes int text, Runnable onClick, @DrawableRes int icon) { - this(text, onClick, false, icon); + this(text, null, onClick, false, icon); } - public TextItem(@StringRes int text, Runnable onClick, boolean loading, @DrawableRes int icon){ + public TextItem(@StringRes int text, String secondaryText, Runnable onClick, @DrawableRes int icon) { + this(text, secondaryText, onClick, false, icon); + } + + public TextItem(@StringRes int text, String secondaryText, Runnable onClick, boolean loading, @DrawableRes int icon){ this.text=getString(text); this.onClick=onClick; this.loading=loading; this.icon=icon; + this.secondaryText = secondaryText; } @Override @@ -935,22 +945,27 @@ public class SettingsFragment extends MastodonToolbarFragment{ } private class TextViewHolder extends BindableViewHolder implements UsableRecyclerView.Clickable{ - private final TextView text; + private final TextView text, secondaryText; private final ProgressBar progress; private final ImageView icon; public TextViewHolder(){ super(getActivity(), R.layout.item_settings_text, list); text = itemView.findViewById(R.id.text); + secondaryText = itemView.findViewById(R.id.secondary_text); progress = itemView.findViewById(R.id.progress); icon = itemView.findViewById(R.id.icon); } @Override public void onBind(TextItem item){ + icon.setVisibility(item.icon != 0 ? View.VISIBLE : View.GONE); + secondaryText.setVisibility(item.secondaryText != null ? View.VISIBLE : View.GONE); + text.setText(item.text); progress.animate().alpha(item.loading ? 1 : 0); - if (item.icon != 0) icon.setImageDrawable(getActivity().getTheme().getDrawable(item.icon)); + icon.setImageResource(item.icon); + secondaryText.setText(item.secondaryText); } @Override diff --git a/mastodon/src/main/res/layout/item_settings_text.xml b/mastodon/src/main/res/layout/item_settings_text.xml index d976eecf7..78f1a2ca8 100644 --- a/mastodon/src/main/res/layout/item_settings_text.xml +++ b/mastodon/src/main/res/layout/item_settings_text.xml @@ -24,8 +24,13 @@ android:layout_width="24dp" android:layout_height="24dp" android:layout_gravity="center" - android:alpha="0" - /> + android:alpha="0" /> +