some wallpapers fixes

This commit is contained in:
gdlbo
2023-04-02 21:37:06 +03:00
parent 40f3d74f07
commit 064f5d8b31
10 changed files with 114 additions and 117 deletions
@@ -1,23 +1,19 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.utils.AndroidUtils.isTablet;
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer;
import static ru.vtosters.lite.utils.Preferences.autoalltranslate;
import static ru.vtosters.lite.utils.Preferences.vkme;
import android.annotation.SuppressLint;
import android.os.Bundle;
import androidx.preference.Preference;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vtosters.lite.R;
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
import ru.vtosters.lite.ui.wallpapers.WallpaperMenuFragment;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.NavigatorUtils;
import ru.vtosters.lite.utils.Preferences;
import java.util.Arrays;
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
import ru.vtosters.lite.utils.Preferences;
public class MessagesFragment extends TrackedMaterialPreferenceToolbarFragment {
@Override
public void onCreate(Bundle bundle) {
@@ -39,7 +35,7 @@ public class MessagesFragment extends TrackedMaterialPreferenceToolbarFragment {
return true;
});
findPreference("autotranslate").setEnabled(!autoalltranslate());
findPreference("autotranslate").setEnabled(!Preferences.autoalltranslate());
findPreference("lang_service").setOnPreferenceClickListener(preference -> {
var items = Arrays.asList(
@@ -61,23 +57,29 @@ public class MessagesFragment extends TrackedMaterialPreferenceToolbarFragment {
return true;
});
findPreference("vkme_notifs").setEnabled(vkme());
findPreference("vkme_notifs").setEnabled(Preferences.vkme());
findPreference("vkme").setIcon(R.drawable.ic_vkme_28);
if (isTablet()) {
if (AndroidUtils.isTablet()) {
findPreference("vkmesett").setVisible(false);
}
var wp = findPreference("wallpapers");
wp.setOnPreferenceClickListener(preference -> {
NavigatorUtils.switchFragment(requireContext(), WallpaperMenuFragment.class);
return true;
});
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
findPreference("autotranslate").setEnabled(!autoalltranslate());
findPreference("vkme_notifs").setEnabled(vkme());
findPreference("autotranslate").setEnabled(!Preferences.autoalltranslate());
findPreference("vkme_notifs").setEnabled(Preferences.vkme());
return super.onPreferenceTreeClick(preference);
}
public boolean restart() {
restartApplicationWithTimer();
LifecycleUtils.restartApplicationWithTimer();
return true;
}
@@ -6,13 +6,10 @@ import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
import androidx.preference.PreferenceCategory;
import b.h.g.k.VKProgressDialog;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vtosters.lite.R;
import b.h.g.k.VKProgressDialog;
import ru.vtosters.lite.concurrent.VTExecutors;
import ru.vtosters.lite.themes.ThemesCore;
import ru.vtosters.lite.themes.ThemesManager;
@@ -20,12 +17,7 @@ import ru.vtosters.lite.themes.palettes.PalettesManager;
import ru.vtosters.lite.ui.components.DockBarEditorManager;
import ru.vtosters.lite.ui.dialogs.PalettesBottomSheetDialog;
import ru.vtosters.lite.ui.views.rarepebble.ColorPickerView;
import ru.vtosters.lite.ui.wallpapers.WallpaperMenuFragment;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.NavigatorUtils;
import ru.vtosters.lite.utils.Preferences;
import ru.vtosters.lite.utils.ThemesUtils;
import ru.vtosters.lite.utils.*;
public class ThemesFragment extends TrackedMaterialPreferenceToolbarFragment {
@@ -114,13 +106,6 @@ public class ThemesFragment extends TrackedMaterialPreferenceToolbarFragment {
findPreference("accentprefs").setVisible(!ThemesUtils.isMonetTheme());
var wp = findPreference("wallpapers");
wp.setIcon(ThemesUtils.recolorDrawable(AndroidUtils.getGlobalContext().getDrawable(R.drawable.ic_media_outline_28)));
wp.setOnPreferenceClickListener(preference -> {
NavigatorUtils.switchFragment(requireContext(), WallpaperMenuFragment.class);
return true;
});
findPreference("systememoji").setOnPreferenceClickListener(preference -> {
restart();
return true;
@@ -20,33 +20,24 @@ enum ImageEffects {
public void applyEffect(ByteBuffer bitmap, int height, int width) {
int radius;
switch (Preferences.getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) {
case "low":
radius = 8;
break;
case "med":
radius = 14;
break;
case "high":
radius = 20;
break;
default:
case "low" -> radius = 8;
case "med" -> radius = 14;
case "high" -> radius = 20;
default -> {
return;
}
}
NativeEffects.gaussian(bitmap, height, width, radius);
}
@Override
public String getSummary() {
switch (Preferences.getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) {
case "low":
return AndroidUtils.getString(R.string.wallpapers_low);
case "med":
return AndroidUtils.getString(R.string.wallpapers_med);
case "high":
return AndroidUtils.getString(R.string.wallpapers_high);
default:
return AndroidUtils.getString(R.string.wallpapers_disabled);
}
return switch (Preferences.getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) {
case "low" -> AndroidUtils.getString(R.string.wallpapers_low);
case "med" -> AndroidUtils.getString(R.string.wallpapers_med);
case "high" -> AndroidUtils.getString(R.string.wallpapers_high);
default -> AndroidUtils.getString(R.string.wallpapers_disabled);
};
}
},
Dim(true,
@@ -57,26 +48,22 @@ enum ImageEffects {
public void applyEffect(ByteBuffer bitmap, int height, int width) {
var delta = 0;
switch (Preferences.getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) {
case "dim_black":
delta = -50; break;
case "dim_white":
delta = 50; break;
default:
case "dim_black" -> delta = -50;
case "dim_white" -> delta = 50;
default -> {
return;
}
}
NativeEffects.dim(bitmap, height, width, delta);
}
@Override
public String getSummary() {
switch (Preferences.getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) {
case "dim_black":
return AndroidUtils.getString(R.string.wallpapers_dim_black);
case "dim_white":
return AndroidUtils.getString(R.string.wallpapers_dim_white);
default:
return AndroidUtils.getString(R.string.wallpapers_disabled);
}
return switch (Preferences.getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) {
case "dim_black" -> AndroidUtils.getString(R.string.wallpapers_dim_black);
case "dim_white" -> AndroidUtils.getString(R.string.wallpapers_dim_white);
default -> AndroidUtils.getString(R.string.wallpapers_disabled);
};
}
},
Mosaic(true,
@@ -87,30 +74,24 @@ enum ImageEffects {
public void applyEffect(ByteBuffer bitmap, int height, int width) {
var scale = 0;
switch (Preferences.getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) {
case "high":
scale = 50; break;
case "med":
scale = 25; break;
case "low":
scale = 10; break;
default:
case "high" -> scale = 50;
case "med" -> scale = 25;
case "low" -> scale = 10;
default -> {
return;
}
}
NativeEffects.mosaic(bitmap, height, width, scale);
}
@Override
public String getSummary() {
switch (Preferences.getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) {
case "low":
return AndroidUtils.getString(R.string.wallpapers_low);
case "med":
return AndroidUtils.getString(R.string.wallpapers_med);
case "high":
return AndroidUtils.getString(R.string.wallpapers_high);
default:
return AndroidUtils.getString(R.string.wallpapers_disabled);
}
return switch (Preferences.getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) {
case "low" -> AndroidUtils.getString(R.string.wallpapers_low);
case "med" -> AndroidUtils.getString(R.string.wallpapers_med);
case "high" -> AndroidUtils.getString(R.string.wallpapers_high);
default -> AndroidUtils.getString(R.string.wallpapers_disabled);
};
}
},
Monochrome(false, null, null,
@@ -181,7 +162,7 @@ enum ImageEffects {
getGlobalContext().getString(R.string.filter_snow)) {
@Override
public void applyEffect(ByteBuffer bitmap, int height, int width) {
if (isApplied()){
if (isApplied()) {
NativeEffects.snow(bitmap);
}
}
@@ -237,6 +218,19 @@ enum ImageEffects {
return Preferences.getPreferences().getBoolean(this.toString(), false);
}
public static Boolean hasEffects() {
return !Preferences.getString("msg_Blur").contains("disabled") && !Preferences.getString("msg_Blur").isEmpty() ||
!Preferences.getString("msg_Dim").contains("disabled") && !Preferences.getString("msg_Dim").isEmpty() ||
!Preferences.getString("msg_Mosaic").contains("disabled") && !Preferences.getString("msg_Mosaic").isEmpty() ||
Preferences.getBoolValue("msg_Emboss", false) ||
Preferences.getBoolValue("msg_Sepia", false) ||
Preferences.getBoolValue("msg_Invert", false) ||
Preferences.getBoolValue("msg_Snow", false) ||
Preferences.getBoolValue("msg_Flea", false) ||
Preferences.getBoolValue("msg_Engrave", false) ||
Preferences.getBoolValue("msg_Monochrome", false);
}
@NonNull
@Override
public String toString() {
@@ -1,21 +1,26 @@
package ru.vtosters.lite.ui.wallpapers;
import static ru.vtosters.lite.utils.AndroidUtils.getResources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import static ru.vtosters.lite.utils.AndroidUtils.getResources;
public class ImageFilters {
public static Drawable getFilteredDrawable(Drawable orig) {
if (orig == null) return null;
if (!(orig instanceof BitmapDrawable)) return orig;
if (!(orig instanceof BitmapDrawable) || !ImageEffects.hasEffects()) {
return orig;
}
Bitmap bitmap = ((BitmapDrawable) orig).getBitmap();
if (bitmap.getConfig() != Bitmap.Config.ARGB_8888) {
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
}
@@ -30,6 +35,7 @@ public class ImageFilters {
for (var type : ImageEffects.values()) {
type.applyEffect(directBuff, bitmap.getHeight(), bitmap.getWidth());
}
directBuff.flip();
bitmap.copyPixelsFromBuffer(directBuff);
return new BitmapDrawable(getResources(), bitmap);
@@ -9,14 +9,23 @@ public class NativeEffects {
}
public static native String monochrome(ByteBuffer input);
public static native String invert(ByteBuffer input);
public static native String sepia(ByteBuffer input);
public static native String emboss(ByteBuffer input, int height, int width);
public static native String engrave(ByteBuffer input, int height, int width);
public static native String flea(ByteBuffer input);
public static native String snow(ByteBuffer input);
// FIXME: slow when comparing with MediaNative.blurBitmap
public static native String gaussian(ByteBuffer input, int height, int width, float radius);
public static native String dim(ByteBuffer input, int height, int width, int delta);
public static native String mosaic(ByteBuffer input, int height, int width, int scale);
}
@@ -69,7 +69,6 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment {
),
1488
);
removeStickCache();
return true;
});
@@ -83,7 +82,6 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment {
removeWallpaper();
requestUpdateWallpaper();
mWPPreviewPref.redraw();
removeStickCache();
return true;
});
@@ -184,12 +182,6 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment {
}
}
private void removeStickCache() {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().apply();
ImEngineProvider.b().a();
}
@Override
public int T4() {
return R.string.wallpapers;
@@ -1,24 +1,21 @@
package ru.vtosters.lite.ui.wallpapers;
import static ru.vtosters.lite.ui.wallpapers.WallpapersHooks.*;
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.vtosters.lite.R;
import ru.vtosters.lite.ui.adapters.MessagesPreviewAdapter;
import ru.vtosters.lite.utils.AndroidUtils;
import static ru.vtosters.lite.ui.wallpapers.WallpapersHooks.getWallpaper;
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
public class WallpaperPreferences extends Preference {
RecyclerView mRecyclerView;
@@ -4,6 +4,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.View;
import android.widget.ImageView;
import com.vtosters.lite.R;
@@ -24,16 +25,14 @@ import static ru.vtosters.lite.utils.Preferences.getBoolValue;
public class WallpapersHooks {
// TODO: force compress by default not asking user about that?
private static final Supplier<Boolean> compress = () -> getBoolValue("compresswp", true);
private static final File originalWp = new File(getGlobalContext().getFilesDir(), "wallpaper.jpeg");
private static final File compressedWp = new File(getGlobalContext().getFilesDir(), "compressedwp.jpeg");
// TODO: cache to file?
private static Drawable mWallpaper;
private static boolean mUpdateWallpaperRequested = true;
private static final File originalWp = new File(getGlobalContext().getFilesDir(), "wallpaper_new.jpeg");
private static final File compressedWp = new File(getGlobalContext().getFilesDir(), "compressedwp_new.jpeg");
// TODO: respect blur, when there is blur/mosaic effect applied these two can be even less, just HD (1280x720) for e.g.
private static final int MAX_WP_WIDTH = 1080;
private static final int MAX_WP_HEIGHT = 1920;
// TODO: cache to file?
private static Drawable mWallpaper;
private static boolean mUpdateWallpaperRequested = true;
public static void setBg(View view) {
if (hasWallpapers()) {
@@ -44,6 +43,14 @@ public class WallpapersHooks {
}
public static Drawable getWallpaper() {
var oldwp = new File(getGlobalContext().getFilesDir(), "wallpaper.jpeg");
var oldwpcompressed = new File(getGlobalContext().getFilesDir(), "compressedwp.jpeg");
if (oldwp.exists() || oldwpcompressed.exists()) {
oldwp.delete();
oldwpcompressed.delete();
}
if (mWallpaper == null || mUpdateWallpaperRequested) {
if (!originalWp.exists()) {
return null;
@@ -61,6 +68,7 @@ public class WallpapersHooks {
if (drawable == null) {
return null;
}
mWallpaper = getFilteredDrawable(drawable);
mUpdateWallpaperRequested = false;
}
@@ -70,9 +78,9 @@ public class WallpapersHooks {
private static boolean prepareCompressed() {
// TODO remove this check? with "compress" enabled it should be fine
if (!eligibleWallpaperFile(originalWp)) {
return false;
}
// if (!eligibleWallpaperFile(originalWp)) {
// return false;
// }
try (var f = new FileOutputStream(compressedWp)) {
var bitmap = BitmapFactory.decodeFile(originalWp.getAbsolutePath());
@@ -81,7 +89,13 @@ public class WallpapersHooks {
}
var drawable = new BitmapDrawable(null, bitmap);
// TODO: remove duplication without changes when provided image already fits required params
drawable.getBitmap().compress(Bitmap.CompressFormat.WEBP, 90, f);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
drawable.getBitmap().compress(Bitmap.CompressFormat.WEBP_LOSSY, 85, f);
} else {
drawable.getBitmap().compress(Bitmap.CompressFormat.WEBP, 85, f);
}
} catch (Exception e) {
Log.d("Wallpapers", e.getMessage());
return false;
+3
View File
@@ -12,6 +12,9 @@
android:title="@string/vkme_notifs"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/vtlinterfacemsg">
<Preference
android:key="wallpapers"
android:title="@string/wallpapers_title"/>
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="voice"
-5
View File
@@ -28,11 +28,6 @@
android:summary="@string/monettheme_summ"
android:title="@string/monettheme_title"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/vtlmessages">
<Preference
android:key="wallpapers"
android:title="@string/wallpapers_title"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/interfaceemoji">
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"