some wallpapers fixes
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user