From 81752895ab3de1f359ec5ca891f3505ff9dc30b3 Mon Sep 17 00:00:00 2001 From: Vologhat <47892605+Vologhat@users.noreply.github.com> Date: Sat, 1 Jul 2023 16:39:36 +0300 Subject: [PATCH] Revert "auto refactor code" This reverts commit ad970d097a7c82aa40263f7f7c94df58ebc7f88c. --- .../libvkx/client/LibVKXClient.java | 2 +- .../gmscore/tools/apk/arsc/ArscBlamer.java | 40 +- .../apk/arsc/BinaryResourceConfiguration.java | 461 +++++++++--------- .../apk/arsc/BinaryResourceIdentifier.java | 12 +- .../tools/apk/arsc/BinaryResourceString.java | 36 +- .../tools/apk/arsc/BinaryResourceValue.java | 158 +++--- .../devrel/gmscore/tools/apk/arsc/Chunk.java | 242 ++++----- .../gmscore/tools/apk/arsc/LibraryChunk.java | 12 +- .../gmscore/tools/apk/arsc/PackageChunk.java | 68 +-- .../tools/apk/arsc/ResourceTableChunk.java | 11 +- .../tools/apk/arsc/StringPoolChunk.java | 24 +- .../gmscore/tools/apk/arsc/TypeChunk.java | 114 ++--- .../gmscore/tools/apk/arsc/TypeSpecChunk.java | 2 +- .../gmscore/tools/apk/arsc/UnknownChunk.java | 2 +- .../gmscore/tools/apk/arsc/XmlAttribute.java | 24 +- .../gmscore/tools/apk/arsc/XmlCdataChunk.java | 2 +- .../gmscore/tools/apk/arsc/XmlChunk.java | 2 +- .../tools/apk/arsc/XmlEndElementChunk.java | 2 +- .../tools/apk/arsc/XmlNamespaceEndChunk.java | 2 +- .../apk/arsc/XmlNamespaceStartChunk.java | 2 +- .../tools/apk/arsc/XmlStartElementChunk.java | 2 +- .../java/com/vk/api/audio/AudioGetLyrics.java | 2 +- .../com/vk/api/gifts/GiftGetByStickerId.java | 20 +- .../vk/core/drawable/RecoloredDrawable.java | 18 +- .../com/vk/core/utils/VerifyInfoHelper.java | 104 ++-- .../DialogGetMentionSuggestionCmd.java | 50 +- .../common/DialogActionsHelper.java | 6 +- .../ui/components/common/MsgActionHelper.java | 4 +- .../msg_list/adapter/VhBindArgs.java | 166 +++++-- .../adapter/msgparts/MsgPartCallHolder.java | 6 +- .../msg_list/adapter/vh/VhMsg.java | 194 +++++--- .../vk/im/ui/q/h/e/MentionsController.java | 53 +- .../im/ui/views/avatars/StoryBorderView.java | 88 ++-- .../com/vk/music/view/x/LyricsHolder.java | 2 +- .../community/CommunityBorderedImageView.java | 18 +- .../com/vk/sharing/view/TargetImageView.java | 82 ++-- .../details/StickerDetailsAdapter.java | 38 +- .../vk/stories/view/StoryCircleImageView.java | 2 +- .../BottomNavigationItemView.java | 16 +- .../main/java/ru/vtosters/hooks/GcmHook.java | 2 +- .../java/ru/vtosters/hooks/NewsfeedHook.java | 4 +- .../java/ru/vtosters/hooks/RenameHook.java | 2 + .../ru/vtosters/hooks/other/ThemesUtils.java | 2 + .../ru/vtosters/hooks/ssfs/BannerHook.java | 1 + .../vtosters/lite/music/TransportStream.java | 2 +- .../ru/vtosters/lite/music/VKM3UParser.java | 3 +- .../catalog/inject/CatalogJsonInjector.java | 2 +- .../lite/themes/utils/ArscEditor.java | 49 +- .../lite/ui/adapters/CategorizedAdapter.java | 26 +- .../ui/components/DockBarEditorManager.java | 128 ++--- .../ui/fragments/DataSettingsFragment.java | 18 +- .../lite/ui/fragments/OtherFragment.java | 20 + .../ru/vtosters/lite/ui/items/DockBarTab.java | 8 +- .../vtosters/lite/ui/items/SuperAppItem.java | 12 +- .../ru/vtosters/lite/ui/vkui/MenuBuilder.java | 1 + .../lite/ui/wallpapers/WallpapersHooks.java | 4 + 56 files changed, 1306 insertions(+), 1067 deletions(-) diff --git a/app/src/main/java/bruhcollective/itaysonlab/libvkx/client/LibVKXClient.java b/app/src/main/java/bruhcollective/itaysonlab/libvkx/client/LibVKXClient.java index f95a535dd..2232550d1 100644 --- a/app/src/main/java/bruhcollective/itaysonlab/libvkx/client/LibVKXClient.java +++ b/app/src/main/java/bruhcollective/itaysonlab/libvkx/client/LibVKXClient.java @@ -10,9 +10,9 @@ import com.vk.music.common.MusicPlaybackLaunchContext; import java.util.ArrayList; import java.util.List; +import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; import static ru.vtosters.hooks.other.Preferences.getBoolValue; import static ru.vtosters.hooks.other.Preferences.isValidSignature; -import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; public class LibVKXClient { @SuppressLint("StaticFieldLeak") diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ArscBlamer.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ArscBlamer.java index 2956a77a4..df22f8e98 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ArscBlamer.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ArscBlamer.java @@ -59,23 +59,27 @@ public class ArscBlamer { * Maps type chunk entries to blamed resources. */ private final Multimap typeEntryToBlame = HashMultimap.create(); - /** - * This is the {@link ResourceTableChunk} inside of the resources.arsc file in the APK. - */ - private final ResourceTableChunk resourceTable; + /** * Maps resources to the type chunk entries they reference. */ private Multimap resourceEntries; + /** * Maps resources which have no base config to the type chunk entries they reference. */ private Multimap baselessKeys; + /** * Contains all of the type chunks in {@link #resourceTable}. */ private List typeChunks; + /** + * This is the {@link ResourceTableChunk} inside of the resources.arsc file in the APK. + */ + private final ResourceTableChunk resourceTable; + /** * Creates a new {@link ArscBlamer}. * @@ -86,14 +90,6 @@ public class ArscBlamer { this.stringToBlame = createEntryListArray(resourceTable.getStringPool().getStringCount()); } - private static List[] createEntryListArray(int size) { - ArrayListResourceEntry[] result = new ArrayListResourceEntry[size]; - for (int i = 0; i < size; ++i) { - result[i] = new ArrayListResourceEntry(); - } - return result; - } - /** * Generates blame mappings. */ @@ -261,6 +257,14 @@ public class ArscBlamer { return false; } + private static List[] createEntryListArray(int size) { + ArrayListResourceEntry[] result = new ArrayListResourceEntry[size]; + for (int i = 0; i < size; ++i) { + result[i] = new ArrayListResourceEntry(); + } + return result; + } + /** * Allows creation of concrete parameterized type arr {@link ArscBlamer#createEntryListArray}. */ @@ -279,12 +283,6 @@ public class ArscBlamer { private final String typeName; private final String entryName; - private ResourceEntry(String packageName, String typeName, String entryName) { - this.packageName = packageName; - this.typeName = typeName; - this.entryName = entryName; - } - static ResourceEntry create(TypeChunk.Entry entry) { PackageChunk packageChunk = Preconditions.checkNotNull(entry.parent().getPackageChunk()); String packageName = packageChunk.getPackageName(); @@ -293,6 +291,12 @@ public class ArscBlamer { return new ResourceEntry(packageName, typeName, entryName); } + private ResourceEntry(String packageName, String typeName, String entryName) { + this.packageName = packageName; + this.typeName = typeName; + this.entryName = entryName; + } + public String packageName() { return packageName; } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceConfiguration.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceConfiguration.java index 06a50e176..922871833 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceConfiguration.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceConfiguration.java @@ -31,148 +31,6 @@ import static java.nio.charset.StandardCharsets.US_ASCII; * Describes a particular resource configuration. */ public class BinaryResourceConfiguration implements SerializableResource { - /** - * The below constants are from android.content.res.Configuration. - */ - private static final int DENSITY_DPI_UNDEFINED = 0; - private static final int DENSITY_DPI_LDPI = 120; - private static final int DENSITY_DPI_MDPI = 160; - private static final int DENSITY_DPI_TVDPI = 213; - private static final int DENSITY_DPI_HDPI = 240; - private static final int DENSITY_DPI_XHDPI = 320; - private static final int DENSITY_DPI_XXHDPI = 480; - private static final int DENSITY_DPI_XXXHDPI = 640; - private static final int DENSITY_DPI_ANY = 0xFFFE; - private static final int DENSITY_DPI_NONE = 0xFFFF; - private static final Map DENSITY_DPI_VALUES = - ImmutableMap.builder() - .put(DENSITY_DPI_UNDEFINED, "") - .put(DENSITY_DPI_LDPI, "ldpi") - .put(DENSITY_DPI_MDPI, "mdpi") - .put(DENSITY_DPI_TVDPI, "tvdpi") - .put(DENSITY_DPI_HDPI, "hdpi") - .put(DENSITY_DPI_XHDPI, "xhdpi") - .put(DENSITY_DPI_XXHDPI, "xxhdpi") - .put(DENSITY_DPI_XXXHDPI, "xxxhdpi") - .put(DENSITY_DPI_ANY, "anydpi") - .put(DENSITY_DPI_NONE, "nodpi") - .build(); - private static final int KEYBOARD_NOKEYS = 1; - private static final int KEYBOARD_QWERTY = 2; - private static final int KEYBOARD_12KEY = 3; - private static final Map KEYBOARD_VALUES = ImmutableMap.of( - KEYBOARD_NOKEYS, "nokeys", - KEYBOARD_QWERTY, "qwerty", - KEYBOARD_12KEY, "12key"); - private static final int KEYBOARDHIDDEN_MASK = 0x03; - private static final int KEYBOARDHIDDEN_NO = 1; - private static final int KEYBOARDHIDDEN_YES = 2; - private static final int KEYBOARDHIDDEN_SOFT = 3; - private static final Map KEYBOARDHIDDEN_VALUES = ImmutableMap.of( - KEYBOARDHIDDEN_NO, "keysexposed", - KEYBOARDHIDDEN_YES, "keyshidden", - KEYBOARDHIDDEN_SOFT, "keyssoft"); - private static final int NAVIGATION_NONAV = 1; - private static final int NAVIGATION_DPAD = 2; - private static final int NAVIGATION_TRACKBALL = 3; - private static final int NAVIGATION_WHEEL = 4; - private static final Map NAVIGATION_VALUES = ImmutableMap.of( - NAVIGATION_NONAV, "nonav", - NAVIGATION_DPAD, "dpad", - NAVIGATION_TRACKBALL, "trackball", - NAVIGATION_WHEEL, "wheel"); - private static final int NAVIGATIONHIDDEN_MASK = 0x0C; - private static final int NAVIGATIONHIDDEN_NO = 0x04; - private static final int NAVIGATIONHIDDEN_YES = 0x08; - private static final Map NAVIGATIONHIDDEN_VALUES = ImmutableMap.of( - NAVIGATIONHIDDEN_NO, "navexposed", - NAVIGATIONHIDDEN_YES, "navhidden"); - private static final int ORIENTATION_PORTRAIT = 0x01; - private static final int ORIENTATION_LANDSCAPE = 0x02; - private static final Map ORIENTATION_VALUES = ImmutableMap.of( - ORIENTATION_PORTRAIT, "port", - ORIENTATION_LANDSCAPE, "land"); - private static final int SCREENLAYOUT_LAYOUTDIR_MASK = 0xC0; - private static final int SCREENLAYOUT_LAYOUTDIR_LTR = 0x40; - private static final int SCREENLAYOUT_LAYOUTDIR_RTL = 0x80; - private static final Map SCREENLAYOUT_LAYOUTDIR_VALUES = ImmutableMap.of( - SCREENLAYOUT_LAYOUTDIR_LTR, "ldltr", - SCREENLAYOUT_LAYOUTDIR_RTL, "ldrtl"); - private static final int SCREENLAYOUT_LONG_MASK = 0x30; - private static final int SCREENLAYOUT_LONG_NO = 0x10; - private static final int SCREENLAYOUT_LONG_YES = 0x20; - private static final Map SCREENLAYOUT_LONG_VALUES = ImmutableMap.of( - SCREENLAYOUT_LONG_NO, "notlong", - SCREENLAYOUT_LONG_YES, "long"); - private static final int SCREENLAYOUT_ROUND_MASK = 0x03; - private static final int SCREENLAYOUT_ROUND_NO = 0x01; - private static final int SCREENLAYOUT_ROUND_YES = 0x02; - private static final Map SCREENLAYOUT_ROUND_VALUES = ImmutableMap.of( - SCREENLAYOUT_ROUND_NO, "notround", - SCREENLAYOUT_ROUND_YES, "round"); - private static final int SCREENLAYOUT_SIZE_MASK = 0x0F; - private static final int SCREENLAYOUT_SIZE_SMALL = 0x01; - private static final int SCREENLAYOUT_SIZE_NORMAL = 0x02; - private static final int SCREENLAYOUT_SIZE_LARGE = 0x03; - private static final int SCREENLAYOUT_SIZE_XLARGE = 0x04; - private static final Map SCREENLAYOUT_SIZE_VALUES = ImmutableMap.of( - SCREENLAYOUT_SIZE_SMALL, "small", - SCREENLAYOUT_SIZE_NORMAL, "normal", - SCREENLAYOUT_SIZE_LARGE, "large", - SCREENLAYOUT_SIZE_XLARGE, "xlarge"); - private static final int TOUCHSCREEN_NOTOUCH = 1; - private static final int TOUCHSCREEN_FINGER = 3; - private static final Map TOUCHSCREEN_VALUES = ImmutableMap.of( - TOUCHSCREEN_NOTOUCH, "notouch", - TOUCHSCREEN_FINGER, "finger"); - private static final int UI_MODE_NIGHT_MASK = 0x30; - private static final int UI_MODE_NIGHT_NO = 0x10; - private static final int UI_MODE_NIGHT_YES = 0x20; - private static final Map UI_MODE_NIGHT_VALUES = ImmutableMap.of( - UI_MODE_NIGHT_NO, "notnight", - UI_MODE_NIGHT_YES, "night"); - private static final int UI_MODE_TYPE_MASK = 0x0F; - private static final int UI_MODE_TYPE_DESK = 0x02; - private static final int UI_MODE_TYPE_CAR = 0x03; - private static final int UI_MODE_TYPE_TELEVISION = 0x04; - private static final int UI_MODE_TYPE_APPLIANCE = 0x05; - private static final int UI_MODE_TYPE_WATCH = 0x06; - private static final int UI_MODE_TYPE_VR_HEADSET = 0x07; - // start - miui - private static final int UI_MODE_TYPE_GODZILLAUI = 0x0b; - private static final int UI_MODE_TYPE_SMALLUI = 0x0c; - private static final int UI_MODE_TYPE_MEDIUMUI = 0x0d; - private static final int UI_MODE_TYPE_LARGEUI = 0x0e; - private static final int UI_MODE_TYPE_HUGEUI = 0x0f; - private static final Map UI_MODE_TYPE_VALUES = - ImmutableMap.builder() - .put(UI_MODE_TYPE_DESK, "desk") - .put(UI_MODE_TYPE_CAR, "car") - .put(UI_MODE_TYPE_TELEVISION, "television") - .put(UI_MODE_TYPE_APPLIANCE, "appliance") - .put(UI_MODE_TYPE_WATCH, "watch") - .put(UI_MODE_TYPE_VR_HEADSET, "vrheadset") - .put(UI_MODE_TYPE_GODZILLAUI, "godzillaui") - .put(UI_MODE_TYPE_SMALLUI, "smallui") - .put(UI_MODE_TYPE_MEDIUMUI, "mediumui") - .put(UI_MODE_TYPE_LARGEUI, "largeui") - .put(UI_MODE_TYPE_HUGEUI, "hugeui").build(); - /** - * The minimum size in bytes that this configuration must be to contain screen config info. - */ - private static final int SCREEN_CONFIG_MIN_SIZE = 32; - /** - * The minimum size in bytes that this configuration must be to contain screen dp info. - */ - private static final int SCREEN_DP_MIN_SIZE = 36; - /** - * The minimum size in bytes that this configuration must be to contain locale info. - */ - private static final int LOCALE_MIN_SIZE = 48; - /** - * The minimum size in bytes that this config must be to contain the screenConfig extension. - */ - private static final int SCREEN_CONFIG_EXTENSION_MIN_SIZE = 52; private final int size; private final int mcc; private final int mnc; @@ -195,60 +53,9 @@ public class BinaryResourceConfiguration implements SerializableResource { private final int screenHeightDp; private final byte[] localeScript; private final byte[] localeVariant; - // end - miui private final int screenLayout2; private final byte[] unknown; - private BinaryResourceConfiguration(int size, - int mcc, - int mnc, - byte[] language, - byte[] region, - int orientation, - int touchscreen, - int density, - int keyboard, - int navigation, - int inputFlags, - int screenWidth, - int screenHeight, - int sdkVersion, - int minorVersion, - int screenLayout, - int uiMode, - int smallestScreenWidthDp, - int screenWidthDp, - int screenHeightDp, - byte[] localeScript, - byte[] localeVariant, - int screenLayout2, - byte[] unknown) { - this.size = size; - this.mcc = mcc; - this.mnc = mnc; - this.language = language; - this.region = region; - this.orientation = orientation; - this.touchscreen = touchscreen; - this.density = density; - this.keyboard = keyboard; - this.navigation = navigation; - this.inputFlags = inputFlags; - this.screenWidth = screenWidth; - this.screenHeight = screenHeight; - this.sdkVersion = sdkVersion; - this.minorVersion = minorVersion; - this.screenLayout = screenLayout; - this.uiMode = uiMode; - this.smallestScreenWidthDp = smallestScreenWidthDp; - this.screenWidthDp = screenWidthDp; - this.screenHeightDp = screenHeightDp; - this.localeScript = localeScript; - this.localeVariant = localeVariant; - this.screenLayout2 = screenLayout2; - this.unknown = unknown; - } - static BinaryResourceConfiguration create(ByteBuffer buffer) { int startPosition = buffer.position(); // The starting buffer position to calculate bytes read. int size = buffer.getInt(); @@ -314,6 +121,245 @@ public class BinaryResourceConfiguration implements SerializableResource { screenHeightDp, localeScript, localeVariant, screenLayout2, unknown); } + private BinaryResourceConfiguration(int size, + int mcc, + int mnc, + byte[] language, + byte[] region, + int orientation, + int touchscreen, + int density, + int keyboard, + int navigation, + int inputFlags, + int screenWidth, + int screenHeight, + int sdkVersion, + int minorVersion, + int screenLayout, + int uiMode, + int smallestScreenWidthDp, + int screenWidthDp, + int screenHeightDp, + byte[] localeScript, + byte[] localeVariant, + int screenLayout2, + byte[] unknown) { + this.size = size; + this.mcc = mcc; + this.mnc = mnc; + this.language = language; + this.region = region; + this.orientation = orientation; + this.touchscreen = touchscreen; + this.density = density; + this.keyboard = keyboard; + this.navigation = navigation; + this.inputFlags = inputFlags; + this.screenWidth = screenWidth; + this.screenHeight = screenHeight; + this.sdkVersion = sdkVersion; + this.minorVersion = minorVersion; + this.screenLayout = screenLayout; + this.uiMode = uiMode; + this.smallestScreenWidthDp = smallestScreenWidthDp; + this.screenWidthDp = screenWidthDp; + this.screenHeightDp = screenHeightDp; + this.localeScript = localeScript; + this.localeVariant = localeVariant; + this.screenLayout2 = screenLayout2; + this.unknown = unknown; + } + + /** + * The different types of configs that can be present in a {@link BinaryResourceConfiguration}. + */ + public enum Type { + MCC, + MNC, + LANGUAGE_STRING, + REGION_STRING, + SCREEN_LAYOUT_DIRECTION, + SMALLEST_SCREEN_WIDTH_DP, + SCREEN_WIDTH_DP, + SCREEN_HEIGHT_DP, + SCREEN_LAYOUT_SIZE, + SCREEN_LAYOUT_LONG, + SCREEN_LAYOUT_ROUND, + ORIENTATION, + UI_MODE_TYPE, + UI_MODE_NIGHT, + DENSITY_DPI, + TOUCHSCREEN, + KEYBOARD_HIDDEN, + KEYBOARD, + NAVIGATION_HIDDEN, + NAVIGATION, + SDK_VERSION + } + + /** + * The below constants are from android.content.res.Configuration. + */ + private static final int DENSITY_DPI_UNDEFINED = 0; + private static final int DENSITY_DPI_LDPI = 120; + private static final int DENSITY_DPI_MDPI = 160; + private static final int DENSITY_DPI_TVDPI = 213; + private static final int DENSITY_DPI_HDPI = 240; + private static final int DENSITY_DPI_XHDPI = 320; + private static final int DENSITY_DPI_XXHDPI = 480; + private static final int DENSITY_DPI_XXXHDPI = 640; + private static final int DENSITY_DPI_ANY = 0xFFFE; + private static final int DENSITY_DPI_NONE = 0xFFFF; + private static final Map DENSITY_DPI_VALUES = + ImmutableMap.builder() + .put(DENSITY_DPI_UNDEFINED, "") + .put(DENSITY_DPI_LDPI, "ldpi") + .put(DENSITY_DPI_MDPI, "mdpi") + .put(DENSITY_DPI_TVDPI, "tvdpi") + .put(DENSITY_DPI_HDPI, "hdpi") + .put(DENSITY_DPI_XHDPI, "xhdpi") + .put(DENSITY_DPI_XXHDPI, "xxhdpi") + .put(DENSITY_DPI_XXXHDPI, "xxxhdpi") + .put(DENSITY_DPI_ANY, "anydpi") + .put(DENSITY_DPI_NONE, "nodpi") + .build(); + + private static final int KEYBOARD_NOKEYS = 1; + private static final int KEYBOARD_QWERTY = 2; + private static final int KEYBOARD_12KEY = 3; + private static final Map KEYBOARD_VALUES = ImmutableMap.of( + KEYBOARD_NOKEYS, "nokeys", + KEYBOARD_QWERTY, "qwerty", + KEYBOARD_12KEY, "12key"); + + private static final int KEYBOARDHIDDEN_MASK = 0x03; + private static final int KEYBOARDHIDDEN_NO = 1; + private static final int KEYBOARDHIDDEN_YES = 2; + private static final int KEYBOARDHIDDEN_SOFT = 3; + private static final Map KEYBOARDHIDDEN_VALUES = ImmutableMap.of( + KEYBOARDHIDDEN_NO, "keysexposed", + KEYBOARDHIDDEN_YES, "keyshidden", + KEYBOARDHIDDEN_SOFT, "keyssoft"); + + private static final int NAVIGATION_NONAV = 1; + private static final int NAVIGATION_DPAD = 2; + private static final int NAVIGATION_TRACKBALL = 3; + private static final int NAVIGATION_WHEEL = 4; + private static final Map NAVIGATION_VALUES = ImmutableMap.of( + NAVIGATION_NONAV, "nonav", + NAVIGATION_DPAD, "dpad", + NAVIGATION_TRACKBALL, "trackball", + NAVIGATION_WHEEL, "wheel"); + + private static final int NAVIGATIONHIDDEN_MASK = 0x0C; + private static final int NAVIGATIONHIDDEN_NO = 0x04; + private static final int NAVIGATIONHIDDEN_YES = 0x08; + private static final Map NAVIGATIONHIDDEN_VALUES = ImmutableMap.of( + NAVIGATIONHIDDEN_NO, "navexposed", + NAVIGATIONHIDDEN_YES, "navhidden"); + + private static final int ORIENTATION_PORTRAIT = 0x01; + private static final int ORIENTATION_LANDSCAPE = 0x02; + private static final Map ORIENTATION_VALUES = ImmutableMap.of( + ORIENTATION_PORTRAIT, "port", + ORIENTATION_LANDSCAPE, "land"); + + private static final int SCREENLAYOUT_LAYOUTDIR_MASK = 0xC0; + private static final int SCREENLAYOUT_LAYOUTDIR_LTR = 0x40; + private static final int SCREENLAYOUT_LAYOUTDIR_RTL = 0x80; + private static final Map SCREENLAYOUT_LAYOUTDIR_VALUES = ImmutableMap.of( + SCREENLAYOUT_LAYOUTDIR_LTR, "ldltr", + SCREENLAYOUT_LAYOUTDIR_RTL, "ldrtl"); + + private static final int SCREENLAYOUT_LONG_MASK = 0x30; + private static final int SCREENLAYOUT_LONG_NO = 0x10; + private static final int SCREENLAYOUT_LONG_YES = 0x20; + private static final Map SCREENLAYOUT_LONG_VALUES = ImmutableMap.of( + SCREENLAYOUT_LONG_NO, "notlong", + SCREENLAYOUT_LONG_YES, "long"); + + private static final int SCREENLAYOUT_ROUND_MASK = 0x03; + private static final int SCREENLAYOUT_ROUND_NO = 0x01; + private static final int SCREENLAYOUT_ROUND_YES = 0x02; + private static final Map SCREENLAYOUT_ROUND_VALUES = ImmutableMap.of( + SCREENLAYOUT_ROUND_NO, "notround", + SCREENLAYOUT_ROUND_YES, "round"); + + private static final int SCREENLAYOUT_SIZE_MASK = 0x0F; + private static final int SCREENLAYOUT_SIZE_SMALL = 0x01; + private static final int SCREENLAYOUT_SIZE_NORMAL = 0x02; + private static final int SCREENLAYOUT_SIZE_LARGE = 0x03; + private static final int SCREENLAYOUT_SIZE_XLARGE = 0x04; + private static final Map SCREENLAYOUT_SIZE_VALUES = ImmutableMap.of( + SCREENLAYOUT_SIZE_SMALL, "small", + SCREENLAYOUT_SIZE_NORMAL, "normal", + SCREENLAYOUT_SIZE_LARGE, "large", + SCREENLAYOUT_SIZE_XLARGE, "xlarge"); + + private static final int TOUCHSCREEN_NOTOUCH = 1; + private static final int TOUCHSCREEN_FINGER = 3; + private static final Map TOUCHSCREEN_VALUES = ImmutableMap.of( + TOUCHSCREEN_NOTOUCH, "notouch", + TOUCHSCREEN_FINGER, "finger"); + + private static final int UI_MODE_NIGHT_MASK = 0x30; + private static final int UI_MODE_NIGHT_NO = 0x10; + private static final int UI_MODE_NIGHT_YES = 0x20; + private static final Map UI_MODE_NIGHT_VALUES = ImmutableMap.of( + UI_MODE_NIGHT_NO, "notnight", + UI_MODE_NIGHT_YES, "night"); + + private static final int UI_MODE_TYPE_MASK = 0x0F; + private static final int UI_MODE_TYPE_DESK = 0x02; + private static final int UI_MODE_TYPE_CAR = 0x03; + private static final int UI_MODE_TYPE_TELEVISION = 0x04; + private static final int UI_MODE_TYPE_APPLIANCE = 0x05; + private static final int UI_MODE_TYPE_WATCH = 0x06; + private static final int UI_MODE_TYPE_VR_HEADSET = 0x07; + + // start - miui + private static final int UI_MODE_TYPE_GODZILLAUI = 0x0b; + private static final int UI_MODE_TYPE_SMALLUI = 0x0c; + private static final int UI_MODE_TYPE_MEDIUMUI = 0x0d; + private static final int UI_MODE_TYPE_LARGEUI = 0x0e; + private static final int UI_MODE_TYPE_HUGEUI = 0x0f; + // end - miui + + private static final Map UI_MODE_TYPE_VALUES = + ImmutableMap.builder() + .put(UI_MODE_TYPE_DESK, "desk") + .put(UI_MODE_TYPE_CAR, "car") + .put(UI_MODE_TYPE_TELEVISION, "television") + .put(UI_MODE_TYPE_APPLIANCE, "appliance") + .put(UI_MODE_TYPE_WATCH, "watch") + .put(UI_MODE_TYPE_VR_HEADSET, "vrheadset") + .put(UI_MODE_TYPE_GODZILLAUI, "godzillaui") + .put(UI_MODE_TYPE_SMALLUI, "smallui") + .put(UI_MODE_TYPE_MEDIUMUI, "mediumui") + .put(UI_MODE_TYPE_LARGEUI, "largeui") + .put(UI_MODE_TYPE_HUGEUI, "hugeui").build(); + + /** + * The minimum size in bytes that this configuration must be to contain screen config info. + */ + private static final int SCREEN_CONFIG_MIN_SIZE = 32; + + /** + * The minimum size in bytes that this configuration must be to contain screen dp info. + */ + private static final int SCREEN_DP_MIN_SIZE = 36; + + /** + * The minimum size in bytes that this configuration must be to contain locale info. + */ + private static final int LOCALE_MIN_SIZE = 48; + + /** + * The minimum size in bytes that this config must be to contain the screenConfig extension. + */ + private static final int SCREEN_CONFIG_EXTENSION_MIN_SIZE = 52; + /** * The number of bytes that this resource configuration takes up. */ @@ -662,7 +708,7 @@ public class BinaryResourceConfiguration implements SerializableResource { Map result = new LinkedHashMap<>(); // Preserve order for #toString(). result.put(Type.MCC, mcc() != 0 ? "mcc" + mcc() : ""); result.put(Type.MNC, mnc() != 0 ? "mnc" + mnc() : ""); - result.put(Type.LANGUAGE_STRING, !languageString().isEmpty() ? languageString() : ""); + result.put(Type.LANGUAGE_STRING, !languageString().isEmpty() ? "" + languageString() : ""); result.put(Type.REGION_STRING, !regionString().isEmpty() ? "r" + regionString() : ""); result.put(Type.SCREEN_LAYOUT_DIRECTION, getOrDefault(SCREENLAYOUT_LAYOUTDIR_VALUES, screenLayoutDirection(), "")); @@ -696,31 +742,4 @@ public class BinaryResourceConfiguration implements SerializableResource { V value = map.get(key); return value != null ? value : defaultValue; } - - /** - * The different types of configs that can be present in a {@link BinaryResourceConfiguration}. - */ - public enum Type { - MCC, - MNC, - LANGUAGE_STRING, - REGION_STRING, - SCREEN_LAYOUT_DIRECTION, - SMALLEST_SCREEN_WIDTH_DP, - SCREEN_WIDTH_DP, - SCREEN_HEIGHT_DP, - SCREEN_LAYOUT_SIZE, - SCREEN_LAYOUT_LONG, - SCREEN_LAYOUT_ROUND, - ORIENTATION, - UI_MODE_TYPE, - UI_MODE_NIGHT, - DENSITY_DPI, - TOUCHSCREEN, - KEYBOARD_HIDDEN, - KEYBOARD, - NAVIGATION_HIDDEN, - NAVIGATION, - SDK_VERSION - } } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceIdentifier.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceIdentifier.java index 6f97d7cf5..32a61cf60 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceIdentifier.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceIdentifier.java @@ -49,12 +49,6 @@ public class BinaryResourceIdentifier { private final int typeId; private final int entryId; - private BinaryResourceIdentifier(int packageId, int typeId, int entryId) { - this.packageId = packageId; - this.typeId = typeId; - this.entryId = entryId; - } - /** * Returns a {@link BinaryResourceIdentifier} from a {@code resourceId} of the form 0xpptteeee. */ @@ -75,6 +69,12 @@ public class BinaryResourceIdentifier { return new BinaryResourceIdentifier(packageId, typeId, entryId); } + private BinaryResourceIdentifier(int packageId, int typeId, int entryId) { + this.packageId = packageId; + this.typeId = typeId; + this.entryId = entryId; + } + /** * The (1-based) id of the {@link PackageChunk} containing this resource. */ diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceString.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceString.java index 23196cca7..3fe721a60 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceString.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceString.java @@ -31,6 +31,24 @@ import static java.nio.charset.StandardCharsets.UTF_8; */ public final class BinaryResourceString { + /** + * Type of {@link BinaryResourceString} to encode / decode. + */ + public enum Type { + UTF8(UTF_8), + UTF16(UTF_16LE); + + private final Charset charset; + + Type(Charset charset) { + this.charset = charset; + } + + public Charset charset() { + return charset; + } + } + private BinaryResourceString() { } // Private constructor @@ -148,22 +166,4 @@ public final class BinaryResourceString { } return length; } - - /** - * Type of {@link BinaryResourceString} to encode / decode. - */ - public enum Type { - UTF8(UTF_8), - UTF16(UTF_16LE); - - private final Charset charset; - - Type(Charset charset) { - this.charset = charset; - } - - public Charset charset() { - return charset; - } - } } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceValue.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceValue.java index 64a992352..50e8d9e44 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceValue.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/BinaryResourceValue.java @@ -31,78 +31,6 @@ import java.util.Objects; */ public class BinaryResourceValue implements SerializableResource { - /** - * The serialized size in bytes of a {@link BinaryResourceValue}. - */ - public static final int SIZE = 8; - public int size; - public Type type; - public int data; - public BinaryResourceValue(int size, Type type, int data) { - this.size = size; - this.type = type; - this.data = data; - } - - public static BinaryResourceValue create(ByteBuffer buffer) { - int size = (buffer.getShort() & 0xFFFF); - buffer.get(); // Unused - Type type = Type.fromCode(buffer.get()); - int data = buffer.getInt(); - return new BinaryResourceValue(size, type, data); - } - - /** - * The length in bytes of this value. - */ - public int size() { - return size; - } - - /** - * The raw data type of this value. - */ - public Type type() { - return type; - } - - /** - * The actual 4-byte value; interpretation of the value depends on {@code dataType}. - */ - public int data() { - return data; - } - - @Override - public byte[] toByteArray() { - return toByteArray(false); - } - - @Override - public byte[] toByteArray(boolean shrink) { - ByteBuffer buffer = ByteBuffer.allocate(SIZE).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) size()); - buffer.put((byte) 0); // Unused - buffer.put(type().code()); - buffer.putInt(data()); - return buffer.array(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - BinaryResourceValue that = (BinaryResourceValue) o; - return size == that.size && - data == that.data && - type == that.type; - } - - @Override - public int hashCode() { - return Objects.hash(size, type, data); - } - /** * Resource type codes. */ @@ -172,6 +100,8 @@ public class BinaryResourceValue implements SerializableResource { */ INT_COLOR_RGB4(0x1f); + private final byte code; + private static final Map FROM_BYTE; static { @@ -182,18 +112,90 @@ public class BinaryResourceValue implements SerializableResource { FROM_BYTE = builder.build(); } - private final byte code; - Type(int code) { this.code = UnsignedBytes.checkedCast(code); } - public static Type fromCode(byte code) { - return Preconditions.checkNotNull(FROM_BYTE.get(code), "Unknown resource type: %s", code); - } - public byte code() { return code; } + + public static Type fromCode(byte code) { + return Preconditions.checkNotNull(FROM_BYTE.get(code), "Unknown resource type: %s", code); + } + } + + /** + * The serialized size in bytes of a {@link BinaryResourceValue}. + */ + public static final int SIZE = 8; + + public int size; + public Type type; + public int data; + + public static BinaryResourceValue create(ByteBuffer buffer) { + int size = (buffer.getShort() & 0xFFFF); + buffer.get(); // Unused + Type type = Type.fromCode(buffer.get()); + int data = buffer.getInt(); + return new BinaryResourceValue(size, type, data); + } + + public BinaryResourceValue(int size, Type type, int data) { + this.size = size; + this.type = type; + this.data = data; + } + + /** + * The length in bytes of this value. + */ + public int size() { + return size; + } + + /** + * The raw data type of this value. + */ + public Type type() { + return type; + } + + /** + * The actual 4-byte value; interpretation of the value depends on {@code dataType}. + */ + public int data() { + return data; + } + + @Override + public byte[] toByteArray() { + return toByteArray(false); + } + + @Override + public byte[] toByteArray(boolean shrink) { + ByteBuffer buffer = ByteBuffer.allocate(SIZE).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) size()); + buffer.put((byte) 0); // Unused + buffer.put(type().code()); + buffer.putInt(data()); + return buffer.array(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BinaryResourceValue that = (BinaryResourceValue) o; + return size == that.size && + data == that.data && + type == that.type; + } + + @Override + public int hashCode() { + return Objects.hash(size, type, data); } } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/Chunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/Chunk.java index f31e4692d..665b8cd06 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/Chunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/Chunk.java @@ -35,36 +35,86 @@ import java.util.Map; */ public abstract class Chunk implements SerializableResource { + /** + * Types of chunks that can exist. + */ + public enum Type { + NULL(0x0000), + STRING_POOL(0x0001), + TABLE(0x0002), + XML(0x0003), + XML_START_NAMESPACE(0x0100), + XML_END_NAMESPACE(0x0101), + XML_START_ELEMENT(0x0102), + XML_END_ELEMENT(0x0103), + XML_CDATA(0x0104), + XML_RESOURCE_MAP(0x0180), + TABLE_PACKAGE(0x0200), + TABLE_TYPE(0x0201), + TABLE_TYPE_SPEC(0x0202), + TABLE_LIBRARY(0x0203); + + private final short code; + + private static final Map FROM_SHORT; + + static { + Builder builder = ImmutableMap.builder(); + for (Type type : values()) { + builder.put(type.code(), type); + } + FROM_SHORT = builder.build(); + } + + Type(int code) { + this.code = Shorts.checkedCast(code); + } + + public short code() { + return code; + } + + public static Type fromCode(short code) { + return Preconditions.checkNotNull(FROM_SHORT.get(code), "Unknown chunk type: %s", code); + } + } + /** * The byte boundary to pad chunks on. */ public static final int PAD_BOUNDARY = 4; + /** * The number of bytes in every chunk that describes chunk type, header size, and chunk size. */ public static final int METADATA_SIZE = 8; + /** * The offset in bytes, from the start of the chunk, where the chunk size can be found. */ private static final int CHUNK_SIZE_OFFSET = 4; - /** - * Size of the chunk header in bytes. - */ - protected final int headerSize; - /** - * headerSize + dataSize. The total size of this chunk. - */ - protected final int chunkSize; - /** - * Offset of this chunk from the start of the file. - */ - protected final int offset; + /** * The parent to this chunk, if any. */ @Nullable private final Chunk parent; + /** + * Size of the chunk header in bytes. + */ + protected final int headerSize; + + /** + * headerSize + dataSize. The total size of this chunk. + */ + protected final int chunkSize; + + /** + * Offset of this chunk from the start of the file. + */ + protected final int offset; + protected Chunk(ByteBuffer buffer, @Nullable Chunk parent) { this.parent = parent; offset = buffer.position() - 2; @@ -72,74 +122,6 @@ public abstract class Chunk implements SerializableResource { chunkSize = buffer.getInt(); } - /** - * Creates a new chunk whose contents start at {@code buffer}'s current position. - * - * @param buffer A buffer positioned at the start of a chunk. - * @return new chunk - */ - public static Chunk newInstance(ByteBuffer buffer) { - return newInstance(buffer, null); - } - - /** - * Creates a new chunk whose contents start at {@code buffer}'s current position. - * - * @param buffer A buffer positioned at the start of a chunk. - * @param parent The parent to this chunk (or null if there's no parent). - * @return new chunk - */ - public static Chunk newInstance(ByteBuffer buffer, @Nullable Chunk parent) { - Chunk result; - Type type = Type.fromCode(buffer.getShort()); - switch (type) { - case STRING_POOL: - result = new StringPoolChunk(buffer, parent); - break; - case TABLE: - result = new ResourceTableChunk(buffer, parent); - break; - case XML: - result = new XmlChunk(buffer, parent); - break; - case XML_START_NAMESPACE: - result = new XmlNamespaceStartChunk(buffer, parent); - break; - case XML_END_NAMESPACE: - result = new XmlNamespaceEndChunk(buffer, parent); - break; - case XML_START_ELEMENT: - result = new XmlStartElementChunk(buffer, parent); - break; - case XML_END_ELEMENT: - result = new XmlEndElementChunk(buffer, parent); - break; - case XML_CDATA: - result = new XmlCdataChunk(buffer, parent); - break; - case XML_RESOURCE_MAP: - result = new XmlResourceMapChunk(buffer, parent); - break; - case TABLE_PACKAGE: - result = new PackageChunk(buffer, parent); - break; - case TABLE_TYPE: - result = new TypeChunk(buffer, parent); - break; - case TABLE_TYPE_SPEC: - result = new TypeSpecChunk(buffer, parent); - break; - case TABLE_LIBRARY: - result = new LibraryChunk(buffer, parent); - break; - default: - result = new UnknownChunk(buffer, parent); - } - result.init(buffer); - result.seekToEndOfChunk(buffer); - return result; - } - /** * Finishes initialization of a chunk. This should be called immediately after the constructor. * This is separate from the constructor so that the header of a chunk can be fully initialized @@ -274,46 +256,70 @@ public abstract class Chunk implements SerializableResource { } /** - * Types of chunks that can exist. + * Creates a new chunk whose contents start at {@code buffer}'s current position. + * + * @param buffer A buffer positioned at the start of a chunk. + * @return new chunk */ - public enum Type { - NULL(0x0000), - STRING_POOL(0x0001), - TABLE(0x0002), - XML(0x0003), - XML_START_NAMESPACE(0x0100), - XML_END_NAMESPACE(0x0101), - XML_START_ELEMENT(0x0102), - XML_END_ELEMENT(0x0103), - XML_CDATA(0x0104), - XML_RESOURCE_MAP(0x0180), - TABLE_PACKAGE(0x0200), - TABLE_TYPE(0x0201), - TABLE_TYPE_SPEC(0x0202), - TABLE_LIBRARY(0x0203); + public static Chunk newInstance(ByteBuffer buffer) { + return newInstance(buffer, null); + } - private static final Map FROM_SHORT; - - static { - Builder builder = ImmutableMap.builder(); - for (Type type : values()) { - builder.put(type.code(), type); - } - FROM_SHORT = builder.build(); - } - - private final short code; - - Type(int code) { - this.code = Shorts.checkedCast(code); - } - - public static Type fromCode(short code) { - return Preconditions.checkNotNull(FROM_SHORT.get(code), "Unknown chunk type: %s", code); - } - - public short code() { - return code; + /** + * Creates a new chunk whose contents start at {@code buffer}'s current position. + * + * @param buffer A buffer positioned at the start of a chunk. + * @param parent The parent to this chunk (or null if there's no parent). + * @return new chunk + */ + public static Chunk newInstance(ByteBuffer buffer, @Nullable Chunk parent) { + Chunk result; + Type type = Type.fromCode(buffer.getShort()); + switch (type) { + case STRING_POOL: + result = new StringPoolChunk(buffer, parent); + break; + case TABLE: + result = new ResourceTableChunk(buffer, parent); + break; + case XML: + result = new XmlChunk(buffer, parent); + break; + case XML_START_NAMESPACE: + result = new XmlNamespaceStartChunk(buffer, parent); + break; + case XML_END_NAMESPACE: + result = new XmlNamespaceEndChunk(buffer, parent); + break; + case XML_START_ELEMENT: + result = new XmlStartElementChunk(buffer, parent); + break; + case XML_END_ELEMENT: + result = new XmlEndElementChunk(buffer, parent); + break; + case XML_CDATA: + result = new XmlCdataChunk(buffer, parent); + break; + case XML_RESOURCE_MAP: + result = new XmlResourceMapChunk(buffer, parent); + break; + case TABLE_PACKAGE: + result = new PackageChunk(buffer, parent); + break; + case TABLE_TYPE: + result = new TypeChunk(buffer, parent); + break; + case TABLE_TYPE_SPEC: + result = new TypeSpecChunk(buffer, parent); + break; + case TABLE_LIBRARY: + result = new LibraryChunk(buffer, parent); + break; + default: + result = new UnknownChunk(buffer, parent); } + result.init(buffer); + result.seekToEndOfChunk(buffer); + return result; } } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/LibraryChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/LibraryChunk.java index 946604172..4a31546f4 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/LibraryChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/LibraryChunk.java @@ -43,7 +43,7 @@ public final class LibraryChunk extends Chunk { */ private final List entries = new ArrayList<>(); - LibraryChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected LibraryChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); entryCount = buffer.getInt(); } @@ -98,17 +98,17 @@ public final class LibraryChunk extends Chunk { private final int packageId; private final String packageName; - private Entry(int packageId, String packageName) { - this.packageId = packageId; - this.packageName = packageName; - } - static Entry create(ByteBuffer buffer, int offset) { int packageId = buffer.getInt(offset); String packageName = PackageUtils.readPackageName(buffer, offset + 4); return new Entry(packageId, packageName); } + private Entry(int packageId, String packageName) { + this.packageId = packageId; + this.packageName = packageName; + } + /** * The id assigned to the shared library at build time. */ diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/PackageChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/PackageChunk.java index 6eb495f1d..9ede60266 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/PackageChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/PackageChunk.java @@ -43,48 +43,58 @@ public final class PackageChunk extends ChunkWithChunks { * Offset in bytes, from the start of the chunk, where {@code keyStringsOffset} can be found. */ private static final int KEY_OFFSET_OFFSET = 276; - /** - * The offset (from {@code offset}) in the original buffer where type strings start. - */ - private final int typeStringsOffset; - /** - * The index into the type string pool of the last public type. - */ - private final int lastPublicType; - /** - * An offset to the string pool that contains the key strings for this package. - */ - private final int keyStringsOffset; - /** - * The index into the key string pool of the last public key. - */ - private final int lastPublicKey; - /** - * An offset to the type ID(s). This is undocumented in the original code. - */ - private final int typeIdOffset; - /** - * Contains a mapping of a type index to its {@link TypeSpecChunk}. - */ - private final Map typeSpecs = new HashMap<>(); - /** - * Contains a mapping of a type index to all of the {@link TypeChunk} with that index. - */ - private final Multimap types = ArrayListMultimap.create(); + /** * The package id if this is a base package, or 0 if not a base package. */ private int id; + /** * The name of the package. */ private String packageName; + + /** + * The offset (from {@code offset}) in the original buffer where type strings start. + */ + private final int typeStringsOffset; + + /** + * The index into the type string pool of the last public type. + */ + private final int lastPublicType; + + /** + * An offset to the string pool that contains the key strings for this package. + */ + private final int keyStringsOffset; + + /** + * The index into the key string pool of the last public key. + */ + private final int lastPublicKey; + + /** + * An offset to the type ID(s). This is undocumented in the original code. + */ + private final int typeIdOffset; + + /** + * Contains a mapping of a type index to its {@link TypeSpecChunk}. + */ + private final Map typeSpecs = new HashMap<>(); + + /** + * Contains a mapping of a type index to all of the {@link TypeChunk} with that index. + */ + private final Multimap types = ArrayListMultimap.create(); + /** * May contain a library chunk for mapping dynamic references to resolved references. */ private Optional libraryChunk = Optional.empty(); - PackageChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected PackageChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); id = buffer.getInt(); packageName = PackageUtils.readPackageName(buffer, buffer.position()); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ResourceTableChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ResourceTableChunk.java index 1644b74bb..b6dffd660 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ResourceTableChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/ResourceTableChunk.java @@ -36,16 +36,17 @@ import java.util.Map; */ public final class ResourceTableChunk extends ChunkWithChunks { - /** - * The packages contained in this resource table. - */ - private final Map packages = new HashMap<>(); /** * A string pool containing all string resource values in the entire resource table. */ private StringPoolChunk stringPool; - ResourceTableChunk(ByteBuffer buffer, @Nullable Chunk parent) { + /** + * The packages contained in this resource table. + */ + private final Map packages = new HashMap<>(); + + protected ResourceTableChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); // packageCount. We ignore this, because we already know how many chunks we have. Preconditions.checkState(buffer.getInt() >= 1, "ResourceTableChunk package count was < 1."); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/StringPoolChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/StringPoolChunk.java index 61ee5aa60..28b7f5907 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/StringPoolChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/StringPoolChunk.java @@ -89,7 +89,7 @@ public final class StringPoolChunk extends Chunk { */ private boolean isOriginalDeduped = false; - StringPoolChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected StringPoolChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); stringCount = buffer.getInt(); styleCount = buffer.getInt(); @@ -310,10 +310,6 @@ public final class StringPoolChunk extends Chunk { static final int RES_STRING_POOL_SPAN_END = 0xFFFFFFFF; private final List spans; - private StringPoolStyle(List spans) { - this.spans = spans; - } - static StringPoolStyle create(ByteBuffer buffer, int offset, StringPoolChunk parent) { Builder spans = ImmutableList.builder(); int nameIndex = buffer.getInt(offset); @@ -325,6 +321,10 @@ public final class StringPoolChunk extends Chunk { return new StringPoolStyle(spans.build()); } + private StringPoolStyle(List spans) { + this.spans = spans; + } + @Override public byte[] toByteArray() throws IOException { return toByteArray(false); @@ -384,13 +384,6 @@ public final class StringPoolChunk extends Chunk { private final int stop; private final StringPoolChunk parent; - private StringPoolSpan(int nameIndex, int start, int stop, StringPoolChunk parent) { - this.nameIndex = nameIndex; - this.start = start; - this.stop = stop; - this.parent = parent; - } - static StringPoolSpan create(ByteBuffer buffer, int offset, StringPoolChunk parent) { int nameIndex = buffer.getInt(offset); int start = buffer.getInt(offset + 4); @@ -398,6 +391,13 @@ public final class StringPoolChunk extends Chunk { return new StringPoolSpan(nameIndex, start, stop, parent); } + private StringPoolSpan(int nameIndex, int start, int stop, StringPoolChunk parent) { + this.nameIndex = nameIndex; + this.start = start; + this.stop = stop; + this.parent = parent; + } + @Override public final byte[] toByteArray() { return toByteArray(false); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeChunk.java index 66cf7182b..1030df262 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeChunk.java @@ -52,16 +52,18 @@ public final class TypeChunk extends Chunk { * The offset (from {@code offset}) in the original buffer where {@code entries} start. */ private final int entriesStart; - /** - * A sparse list of resource entries defined by this chunk. - */ - private final Map entries = new TreeMap<>(); + /** * The resource configuration that these resource entries correspond to. */ private BinaryResourceConfiguration configuration; - TypeChunk(ByteBuffer buffer, @Nullable Chunk parent) { + /** + * A sparse list of resource entries defined by this chunk. + */ + private final Map entries = new TreeMap<>(); + + protected TypeChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); id = UnsignedBytes.toInt(buffer.get()); buffer.position(buffer.position() + 3); // Skip 3 bytes for packing @@ -174,13 +176,13 @@ public final class TypeChunk extends Chunk { } } - private String getString(int index) { + protected String getString(int index) { ResourceTableChunk resourceTable = getResourceTableChunk(); Preconditions.checkNotNull(resourceTable, "%s has no resource table.", getClass()); return resourceTable.getStringPool().getString(index); } - private String getKeyName(int index) { + protected String getKeyName(int index) { PackageChunk packageChunk = getPackageChunk(); Preconditions.checkNotNull(packageChunk, "%s has no parent package.", getClass()); StringPoolChunk keyPool = packageChunk.getKeyStringPool(); @@ -188,7 +190,7 @@ public final class TypeChunk extends Chunk { return keyPool.getString(index); } - private void updateKey(int index, String value) { + protected void updateKey(int index, String value) { PackageChunk packageChunk = getPackageChunk(); Preconditions.checkNotNull(packageChunk, "%s has no parent package.", getClass()); StringPoolChunk keyPool = packageChunk.getKeyStringPool(); @@ -291,10 +293,10 @@ public final class TypeChunk extends Chunk { private final int headerSize; private final int flags; private final int keyIndex; + private BinaryResourceValue value; + private Map values; private final int parentEntry; private final TypeChunk parent; - private BinaryResourceValue value; - private final Map values; private Entry(int headerSize, int flags, @@ -312,52 +314,6 @@ public final class TypeChunk extends Chunk { this.parent = parent; } - /** - * Creates a new {@link Entry} whose contents start at the 0-based position in - * {@code buffer} given by a 4-byte value read from {@code buffer} and then added to - * {@code baseOffset}. If the value read from {@code buffer} is equal to {@link #NO_ENTRY}, then - * null is returned as there is no resource at that position. - * - *

Otherwise, this position is parsed and returned as an {@link Entry}. - * - * @param buffer A buffer positioned at an offset to an {@link Entry}. - * @param baseOffset Offset that must be added to the value at {@code buffer}'s position. - * @param parent The {@link TypeChunk} that this resource entry belongs to. - * @return New {@link Entry} or null if there is no resource at this location. - */ - @Nullable - public static Entry create(ByteBuffer buffer, int baseOffset, TypeChunk parent) { - int offset = buffer.getInt(); - if (offset == NO_ENTRY) { - return null; - } - int position = buffer.position(); - buffer.position(baseOffset + offset); // Set buffer position to resource entry start - Entry result = newInstance(buffer, parent); - buffer.position(position); // Restore buffer position - return result; - } - - @Nullable - private static Entry newInstance(ByteBuffer buffer, TypeChunk parent) { - int headerSize = buffer.getShort() & 0xFFFF; - int flags = buffer.getShort() & 0xFFFF; - int keyIndex = buffer.getInt(); - BinaryResourceValue value = null; - Map values = new LinkedHashMap<>(); - int parentEntry = 0; - if ((flags & FLAG_COMPLEX) != 0) { - parentEntry = buffer.getInt(); - int valueCount = buffer.getInt(); - for (int i = 0; i < valueCount; ++i) { - values.put(buffer.getInt(), BinaryResourceValue.create(buffer)); - } - } else { - value = BinaryResourceValue.create(buffer); - } - return new Entry(headerSize, flags, keyIndex, value, values, parentEntry, parent); - } - /** * Number of bytes in the header of the {@link Entry}. */ @@ -466,6 +422,52 @@ public final class TypeChunk extends Chunk { return (flags() & FLAG_COMPLEX) != 0; } + /** + * Creates a new {@link Entry} whose contents start at the 0-based position in + * {@code buffer} given by a 4-byte value read from {@code buffer} and then added to + * {@code baseOffset}. If the value read from {@code buffer} is equal to {@link #NO_ENTRY}, then + * null is returned as there is no resource at that position. + * + *

Otherwise, this position is parsed and returned as an {@link Entry}. + * + * @param buffer A buffer positioned at an offset to an {@link Entry}. + * @param baseOffset Offset that must be added to the value at {@code buffer}'s position. + * @param parent The {@link TypeChunk} that this resource entry belongs to. + * @return New {@link Entry} or null if there is no resource at this location. + */ + @Nullable + public static Entry create(ByteBuffer buffer, int baseOffset, TypeChunk parent) { + int offset = buffer.getInt(); + if (offset == NO_ENTRY) { + return null; + } + int position = buffer.position(); + buffer.position(baseOffset + offset); // Set buffer position to resource entry start + Entry result = newInstance(buffer, parent); + buffer.position(position); // Restore buffer position + return result; + } + + @Nullable + private static Entry newInstance(ByteBuffer buffer, TypeChunk parent) { + int headerSize = buffer.getShort() & 0xFFFF; + int flags = buffer.getShort() & 0xFFFF; + int keyIndex = buffer.getInt(); + BinaryResourceValue value = null; + Map values = new LinkedHashMap<>(); + int parentEntry = 0; + if ((flags & FLAG_COMPLEX) != 0) { + parentEntry = buffer.getInt(); + int valueCount = buffer.getInt(); + for (int i = 0; i < valueCount; ++i) { + values.put(buffer.getInt(), BinaryResourceValue.create(buffer)); + } + } else { + value = BinaryResourceValue.create(buffer); + } + return new Entry(headerSize, flags, keyIndex, value, values, parentEntry, parent); + } + @Override public final byte[] toByteArray() { return toByteArray(false); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeSpecChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeSpecChunk.java index 55c6464ed..c12922b8d 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeSpecChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/TypeSpecChunk.java @@ -39,7 +39,7 @@ public final class TypeSpecChunk extends Chunk { */ private final int[] resources; - TypeSpecChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected TypeSpecChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); id = UnsignedBytes.toInt(buffer.get()); buffer.position(buffer.position() + 3); // Skip 3 bytes for packing diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/UnknownChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/UnknownChunk.java index 5bdf015a6..0d07c3199 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/UnknownChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/UnknownChunk.java @@ -34,7 +34,7 @@ public final class UnknownChunk extends Chunk { private final byte[] payload; - UnknownChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected UnknownChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); type = Type.fromCode(buffer.getShort(offset)); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlAttribute.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlAttribute.java index 5b02b89c9..f3d696834 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlAttribute.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlAttribute.java @@ -36,18 +36,6 @@ public class XmlAttribute implements SerializableResource { private final BinaryResourceValue typedValue; private final XmlNodeChunk parent; - private XmlAttribute(int namespaceIndex, - int nameIndex, - int rawValueIndex, - BinaryResourceValue typedValue, - XmlNodeChunk parent) { - this.namespaceIndex = namespaceIndex; - this.nameIndex = nameIndex; - this.rawValueIndex = rawValueIndex; - this.typedValue = typedValue; - this.parent = parent; - } - /** * Creates a new {@link XmlAttribute} based on the bytes at the current {@code buffer} position. * @@ -62,6 +50,18 @@ public class XmlAttribute implements SerializableResource { return new XmlAttribute(namespace, name, rawValue, typedValue, parent); } + private XmlAttribute(int namespaceIndex, + int nameIndex, + int rawValueIndex, + BinaryResourceValue typedValue, + XmlNodeChunk parent) { + this.namespaceIndex = namespaceIndex; + this.nameIndex = nameIndex; + this.rawValueIndex = rawValueIndex; + this.typedValue = typedValue; + this.parent = parent; + } + /** * A string reference to the namespace URI, or -1 if not present. */ diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlCdataChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlCdataChunk.java index f6af250d0..2f961cb35 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlCdataChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlCdataChunk.java @@ -37,7 +37,7 @@ public final class XmlCdataChunk extends XmlNodeChunk { */ private final BinaryResourceValue binaryResourceValue; - XmlCdataChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected XmlCdataChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); rawValue = buffer.getInt(); binaryResourceValue = BinaryResourceValue.create(buffer); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlChunk.java index 1d1867b92..9c55bd42a 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlChunk.java @@ -28,7 +28,7 @@ import java.nio.ByteBuffer; */ public final class XmlChunk extends ChunkWithChunks { - XmlChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected XmlChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlEndElementChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlEndElementChunk.java index e8b9837ed..f3020eeb8 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlEndElementChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlEndElementChunk.java @@ -37,7 +37,7 @@ public final class XmlEndElementChunk extends XmlNodeChunk { */ private final int name; - XmlEndElementChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected XmlEndElementChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); namespace = buffer.getInt(); name = buffer.getInt(); diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceEndChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceEndChunk.java index 14dab122f..49f70957d 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceEndChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceEndChunk.java @@ -25,7 +25,7 @@ import java.nio.ByteBuffer; */ public final class XmlNamespaceEndChunk extends XmlNamespaceChunk { - XmlNamespaceEndChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected XmlNamespaceEndChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceStartChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceStartChunk.java index dcf5b8133..1fbd23383 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceStartChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlNamespaceStartChunk.java @@ -25,7 +25,7 @@ import java.nio.ByteBuffer; */ public final class XmlNamespaceStartChunk extends XmlNamespaceChunk { - XmlNamespaceStartChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected XmlNamespaceStartChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); } diff --git a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlStartElementChunk.java b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlStartElementChunk.java index 75073d279..d219dec23 100644 --- a/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlStartElementChunk.java +++ b/app/src/main/java/com/google/devrel/gmscore/tools/apk/arsc/XmlStartElementChunk.java @@ -71,7 +71,7 @@ public final class XmlStartElementChunk extends XmlNodeChunk { */ private final List attributes = new ArrayList<>(); - XmlStartElementChunk(ByteBuffer buffer, @Nullable Chunk parent) { + protected XmlStartElementChunk(ByteBuffer buffer, @Nullable Chunk parent) { super(buffer, parent); namespace = buffer.getInt(); name = buffer.getInt(); diff --git a/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java b/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java index 9df599cb2..b6a1d8d6f 100644 --- a/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java +++ b/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java @@ -6,9 +6,9 @@ import com.vk.api.base.ApiRequest; import com.vk.dto.music.MusicTrack; import com.vk.log.L; import org.json.JSONObject; -import ru.vtosters.hooks.other.Preferences; import ru.vtosters.lite.music.Genius; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.hooks.other.Preferences; import java.util.ArrayList; diff --git a/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java b/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java index df60d0535..dfa535f88 100644 --- a/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java +++ b/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java @@ -7,6 +7,16 @@ import org.json.JSONException; import org.json.JSONObject; public class GiftGetByStickerId extends ApiRequest { + public static class a { + public final int a; + public final CatalogedGift b; + + public a(int i, CatalogedGift catalogedGift) { + this.a = i; + this.b = catalogedGift; + } + } + public GiftGetByStickerId(Context context, int i) { super("execute.getGiftByStickerId"); b("sticker_id", i); @@ -20,14 +30,4 @@ public class GiftGetByStickerId extends ApiRequest { return new a(jSONObject2.optInt("balance"), new CatalogedGift(jSONObject2.getJSONObject("gift"))); } - - public static class a { - public final int a; - public final CatalogedGift b; - - public a(int i, CatalogedGift catalogedGift) { - this.a = i; - this.b = catalogedGift; - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/core/drawable/RecoloredDrawable.java b/app/src/main/java/com/vk/core/drawable/RecoloredDrawable.java index dfeb4779b..bd60ee6b6 100644 --- a/app/src/main/java/com/vk/core/drawable/RecoloredDrawable.java +++ b/app/src/main/java/com/vk/core/drawable/RecoloredDrawable.java @@ -27,15 +27,6 @@ public class RecoloredDrawable extends Drawable implements Drawable.Callback { onStateChange(new int[0]); } - public RecoloredDrawable(Drawable drawable, int i) { - this(drawable, new ColorStateList(new int[][]{new int[0]}, new int[]{i})); - } - - public RecoloredDrawable() { - this.c = 255; - this.d = 255; - } - public void a(int i) { a(new ColorStateList(new int[][]{new int[0]}, new int[]{i})); } @@ -129,4 +120,13 @@ public class RecoloredDrawable extends Drawable implements Drawable.Callback { public Drawable a() { return this.drawable; } + + public RecoloredDrawable(Drawable drawable, int i) { + this(drawable, new ColorStateList(new int[][]{new int[0]}, new int[]{i})); + } + + public RecoloredDrawable() { + this.c = 255; + this.d = 255; + } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/core/utils/VerifyInfoHelper.java b/app/src/main/java/com/vk/core/utils/VerifyInfoHelper.java index 9a5781a64..f32c281df 100644 --- a/app/src/main/java/com/vk/core/utils/VerifyInfoHelper.java +++ b/app/src/main/java/com/vk/core/utils/VerifyInfoHelper.java @@ -21,13 +21,6 @@ public final class VerifyInfoHelper { public static final VerifyInfoHelper h; public static int devIcon = R.drawable.ic_favorite_16; - static { - h = new VerifyInfoHelper(); - } - - private VerifyInfoHelper() { - } - public static Integer enumSwitchMapping(VerifyInfoHelper.ColorTheme color) { return switch (color) { case normal -> 1; @@ -37,47 +30,18 @@ public final class VerifyInfoHelper { }; } - public static Drawable b(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, boolean dev, Context context, ColorTheme colorTheme, int i, Object obj) { - if ((i & 8) != 0) { - colorTheme = ColorTheme.normal; - } - return verifyInfoHelper.b(z, z2, dev, context, colorTheme); + public enum ColorTheme { + white, + normal, + light, + ultraLight } - public static Drawable b(VerifyInfoHelper verifyInfoHelper, VerifyInfo verifyInfo, Context context, ColorTheme colorTheme, int i, Object obj) { - return b(verifyInfoHelper, verifyInfo.u1(), verifyInfo.t1(), verifyInfo.dev(), context, colorTheme, i, obj); + static { + h = new VerifyInfoHelper(); } - public static Drawable b(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, Context context, ColorTheme colorTheme, int i, Object obj) { - return b(verifyInfoHelper, z, z2, false, context, colorTheme, i, obj); - } - - public static Drawable a(VerifyInfoHelper verifyInfoHelper, VerifyInfo verifyInfo, Context context, ColorTheme colorTheme, int i, Object obj) { - if ((i & 4) != 0) { - colorTheme = ColorTheme.normal; - } - return verifyInfoHelper.b(verifyInfo, context, colorTheme); - } - - public static Drawable a(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, boolean dev, Context context, ColorTheme colorTheme, int i, Object obj) { - if ((i & 8) != 0) { - colorTheme = ColorTheme.normal; - } - return verifyInfoHelper.a(z, z2, dev, context, colorTheme); - } - - public static Drawable a(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, Context context, ColorTheme colorTheme, int i, Object obj) { - return a(verifyInfoHelper, z, z2, false, context, colorTheme, i, obj); - } - - public static void a(VerifyInfoHelper verifyInfoHelper, TextView textView, VerifyInfo verifyInfo, boolean z, ColorTheme colorTheme, int i, Object obj) { - if ((i & 4) != 0) { - z = false; - } - if ((i & 8) != 0) { - colorTheme = ColorTheme.normal; - } - verifyInfoHelper.a(textView, verifyInfo, z, colorTheme); + private VerifyInfoHelper() { } private int a() { @@ -125,6 +89,7 @@ public final class VerifyInfoHelper { return b(this, z, z2, false, context, null, 8, null); } + public int b(ColorTheme colorTheme) { return a(colorTheme); } @@ -139,6 +104,7 @@ public final class VerifyInfoHelper { }; } + public Drawable b(Context context, VerifyInfo verifyInfo) { if (verifyInfo.dev()) { return new RecoloredDrawable(ContextCompat.getDrawable(context, devIcon), c(ColorTheme.normal)); @@ -157,6 +123,21 @@ public final class VerifyInfoHelper { return b(verifyInfo.u1(), verifyInfo.t1(), verifyInfo.dev(), context, colorTheme); } + public static Drawable b(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, boolean dev, Context context, ColorTheme colorTheme, int i, Object obj) { + if ((i & 8) != 0) { + colorTheme = ColorTheme.normal; + } + return verifyInfoHelper.b(z, z2, dev, context, colorTheme); + } + + public static Drawable b(VerifyInfoHelper verifyInfoHelper, VerifyInfo verifyInfo, Context context, ColorTheme colorTheme, int i, Object obj) { + return b(verifyInfoHelper, verifyInfo.u1(), verifyInfo.t1(), verifyInfo.dev(), context, colorTheme, i, obj); + } + + public static Drawable b(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, Context context, ColorTheme colorTheme, int i, Object obj) { + return b(verifyInfoHelper, z, z2, false, context, colorTheme, i, obj); + } + public Drawable a(Context context, VerifyInfo verifyInfo) { if (verifyInfo.dev()) { return new RecoloredDrawable(ContextCompat.getDrawable(context, devIcon), c(ColorTheme.normal)); @@ -200,10 +181,28 @@ public final class VerifyInfoHelper { return new RecoloredDrawable(ContextCompat.getDrawable(context, i), c2); } + public static Drawable a(VerifyInfoHelper verifyInfoHelper, VerifyInfo verifyInfo, Context context, ColorTheme colorTheme, int i, Object obj) { + if ((i & 4) != 0) { + colorTheme = ColorTheme.normal; + } + return verifyInfoHelper.b(verifyInfo, context, colorTheme); + } + public Drawable a(VerifyInfo verifyInfo, Context context, ColorTheme colorTheme) { return a(verifyInfo.u1(), verifyInfo.t1(), verifyInfo.dev(), context, colorTheme); } + public static Drawable a(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, boolean dev, Context context, ColorTheme colorTheme, int i, Object obj) { + if ((i & 8) != 0) { + colorTheme = ColorTheme.normal; + } + return verifyInfoHelper.a(z, z2, dev, context, colorTheme); + } + + public static Drawable a(VerifyInfoHelper verifyInfoHelper, boolean z, boolean z2, Context context, ColorTheme colorTheme, int i, Object obj) { + return a(verifyInfoHelper, z, z2, false, context, colorTheme, i, obj); + } + public Drawable a(boolean z, boolean z2, Context context, ColorTheme colorTheme) { return a(z, z2, false, context, colorTheme); } @@ -231,6 +230,16 @@ public final class VerifyInfoHelper { return new RecoloredDrawable(ContextCompat.getDrawable(context, i), c2); } + public static void a(VerifyInfoHelper verifyInfoHelper, TextView textView, VerifyInfo verifyInfo, boolean z, ColorTheme colorTheme, int i, Object obj) { + if ((i & 4) != 0) { + z = false; + } + if ((i & 8) != 0) { + colorTheme = ColorTheme.normal; + } + verifyInfoHelper.a(textView, verifyInfo, z, colorTheme); + } + public void a(TextView textView, VerifyInfo verifyInfo, boolean z, ColorTheme colorTheme) { Drawable drawable; Context context = textView.getContext(); @@ -258,11 +267,4 @@ public final class VerifyInfoHelper { } ViewExtKt.p(imageView); } - - public enum ColorTheme { - white, - normal, - light, - ultraLight - } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/im/engine/commands/dialogs/DialogGetMentionSuggestionCmd.java b/app/src/main/java/com/vk/im/engine/commands/dialogs/DialogGetMentionSuggestionCmd.java index 18b59bb6e..644415d33 100644 --- a/app/src/main/java/com/vk/im/engine/commands/dialogs/DialogGetMentionSuggestionCmd.java +++ b/app/src/main/java/com/vk/im/engine/commands/dialogs/DialogGetMentionSuggestionCmd.java @@ -31,6 +31,30 @@ public final class DialogGetMentionSuggestionCmd extends BaseImEngineCmd implements Comparator { + List a; + + a(List list) { + this.a = list; + } + + @Override // java.util.Comparator + /* renamed from: a */ + public int compare(Member member, Member member2) { + int indexOf = this.a.indexOf(member); + int indexOf2 = this.a.indexOf(member2); + int i = indexOf; + if (indexOf < 0) { + i = Integer.MAX_VALUE; + } + int i2 = indexOf2; + if (indexOf2 < 0) { + i2 = Integer.MAX_VALUE; + } + return Intrinsics.a(i, i2); + } + } + public DialogGetMentionSuggestionCmd(int i, String str, Source source, boolean z, Object obj) { this.f2365b = i; this.c = str; @@ -126,7 +150,7 @@ public final class DialogGetMentionSuggestionCmd extends BaseImEngineCmd a2; Source source; if (ImDialogsUtils.d(this.f2365b) != PeerType.CHAT) { - return new Suggestion(null, null); + return new Suggestion((EntityValue) null, (ProfilesInfo) null); } Member Z = imEnvironment.Z(); int d = imEnvironment.a0().n().d(); @@ -211,28 +235,4 @@ public final class DialogGetMentionSuggestionCmd extends BaseImEngineCmd implements Comparator { - List a; - - a(List list) { - this.a = list; - } - - @Override // java.util.Comparator - /* renamed from: a */ - public int compare(Member member, Member member2) { - int indexOf = this.a.indexOf(member); - int indexOf2 = this.a.indexOf(member2); - int i = indexOf; - if (indexOf < 0) { - i = Integer.MAX_VALUE; - } - int i2 = indexOf2; - if (indexOf2 < 0) { - i2 = Integer.MAX_VALUE; - } - return Intrinsics.a(i, i2); - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java b/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java index b4e113155..ab52f7655 100644 --- a/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java +++ b/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java @@ -19,7 +19,7 @@ import java.util.List; public final class DialogActionsHelper { public static final DialogActionsHelper a = new DialogActionsHelper(); - public List a(ImConfig imConfig, Dialog dialog, ProfilesSimpleInfo profilesSimpleInfo) { + public final List a(ImConfig imConfig, Dialog dialog, ProfilesSimpleInfo profilesSimpleInfo) { if (dialog != null && profilesSimpleInfo != null) { long b2 = TimeProvider.f.b(); ChatSettings z1 = dialog.z1(); @@ -84,7 +84,7 @@ public final class DialogActionsHelper { return new ArrayList<>(); } - public List a(Dialog dialog, ProfilesSimpleInfo profilesSimpleInfo) { + public final List a(Dialog dialog, ProfilesSimpleInfo profilesSimpleInfo) { long b2 = TimeProvider.f.b(); Profile profile = profilesSimpleInfo.get(dialog.getId()); @@ -138,7 +138,7 @@ public final class DialogActionsHelper { return arrayList; } - public boolean a(Dialog dialog) { + public final boolean a(Dialog dialog) { if (dialog.V1() || !dialog.y1()) { return false; } diff --git a/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java b/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java index a32e89e70..438d192a4 100644 --- a/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java +++ b/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java @@ -16,11 +16,11 @@ import java.util.List; public final class MsgActionHelper { public static final MsgActionHelper a = new MsgActionHelper(); - public List a(ImEngine imEngine, Dialog dialog, Collection collection) { + public final List a(ImEngine imEngine, Dialog dialog, Collection collection) { return a(imEngine != null ? imEngine.g() : null, dialog, collection); } - public List a(ImConfig imConfig, Dialog dialog, Collection collection) { + public final List a(ImConfig imConfig, Dialog dialog, Collection collection) { if (imConfig != null && dialog != null && collection != null) { MsgPermissionHelper.a aVar = new MsgPermissionHelper.a(imConfig, dialog, collection); ArrayList arrayList = new ArrayList<>(); diff --git a/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/VhBindArgs.java b/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/VhBindArgs.java index 4bc07d663..8d8bb9e30 100644 --- a/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/VhBindArgs.java +++ b/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/VhBindArgs.java @@ -74,7 +74,11 @@ public class VhBindArgs { private boolean L() { boolean var1; - var1 = this.K() > this.m || TimeProvider.f.c(); + if (this.K() <= this.m && !TimeProvider.f.c()) { + var1 = false; + } else { + var1 = true; + } return var1; } @@ -105,7 +109,11 @@ public class VhBindArgs { public boolean B() { AdapterEntry var1 = this.a; boolean var2; - var2 = var1 != null && var1.c(); + if (var1 != null && var1.c()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -113,7 +121,11 @@ public class VhBindArgs { public boolean C() { AdapterEntry var1 = this.a; boolean var2; - var2 = var1 != null && var1.c() && this.a.c.getLocalId() == this.b.c.getLocalId(); + if (var1 != null && var1.c() && this.a.c.getLocalId() == this.b.c.getLocalId()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -121,7 +133,11 @@ public class VhBindArgs { public boolean D() { AdapterEntry var1 = this.a; boolean var2; - var2 = var1 != null && var1.a == 83; + if (var1 != null && var1.a == 83) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -129,7 +145,11 @@ public class VhBindArgs { public boolean E() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof MsgFromUser && ((MsgFromUser) var1).i2(); + if (var1 instanceof MsgFromUser && ((MsgFromUser) var1).i2()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -137,7 +157,11 @@ public class VhBindArgs { public boolean F() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof MsgFromUser && ((MsgFromUser) var1).F0(); + if (var1 instanceof MsgFromUser && ((MsgFromUser) var1).F0()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -145,7 +169,11 @@ public class VhBindArgs { public boolean G() { AdapterEntry var1 = this.b; boolean var2; - var2 = var1 != null && var1.a == 51; + if (var1 != null && var1.a == 51) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -158,7 +186,11 @@ public class VhBindArgs { long var1 = this.K(); long var3 = this.m; boolean var5; - var5 = var1 > var3 && var1 < var3 * 2L; + if (var1 > var3 && var1 < var3 * 2L) { + var5 = true; + } else { + var5 = false; + } return var5; } @@ -174,10 +206,18 @@ public class VhBindArgs { MsgFromUser var7 = (MsgFromUser) var1; Msg var3 = this.a.c; boolean var4; - var4 = var3 != null && var3.d() == MsgSyncState.DONE; + if (var3 != null && var3.d() == MsgSyncState.DONE) { + var4 = true; + } else { + var4 = false; + } boolean var5; - var5 = this.o == ImBgSyncState.CONNECTED; + if (this.o == ImBgSyncState.CONNECTED) { + var5 = true; + } else { + var5 = false; + } boolean var6 = var2; if (!var7.H0()) { @@ -202,7 +242,7 @@ public class VhBindArgs { byte var2 = 0; int var3 = var2; if (var1) { - AttachAudioMsg var4 = ((MsgFromUser) this.b.c).c(AttachAudioMsg.class, false); + AttachAudioMsg var4 = (AttachAudioMsg) ((MsgFromUser) this.b.c).c(AttachAudioMsg.class, false); var3 = var2; if (var4 != null) { var3 = var4.f(); @@ -227,7 +267,11 @@ public class VhBindArgs { public boolean c() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof MsgFromUser && ((MsgFromUser) var1).I0(); + if (var1 instanceof MsgFromUser && ((MsgFromUser) var1).I0()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -235,14 +279,22 @@ public class VhBindArgs { public boolean d() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof WithUserContent && ((WithUserContent) var1).D0() != null; + if (var1 instanceof WithUserContent && ((WithUserContent) var1).D0() != null) { + var2 = true; + } else { + var2 = false; + } return var2; } public boolean e() { boolean var1; - var1 = this.b.i > 0; + if (this.b.i > 0) { + var1 = true; + } else { + var1 = false; + } return var1; } @@ -265,7 +317,11 @@ public class VhBindArgs { public boolean g() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof MsgFromUser && ((MsgFromUser) var1).G0(); + if (var1 instanceof MsgFromUser && ((MsgFromUser) var1).G0()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -273,21 +329,33 @@ public class VhBindArgs { public boolean h() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof MsgFromUser && ((MsgFromUser) var1).Z1(); + if (var1 instanceof MsgFromUser && ((MsgFromUser) var1).Z1()) { + var2 = true; + } else { + var2 = false; + } return var2; } public boolean i() { boolean var1; - var1 = this.j && !this.u() && !this.l(); + if (this.j && !this.u() && !this.l()) { + var1 = true; + } else { + var1 = false; + } return var1; } public boolean j() { boolean var1; - var1 = this.j && !this.u() && (!this.B() || !this.A() || this.a.c.H1()); + if (!this.j || this.u() || this.B() && this.A() && !this.a.c.H1()) { + var1 = false; + } else { + var1 = true; + } return var1; } @@ -295,7 +363,11 @@ public class VhBindArgs { public boolean k() { Dialog var1 = this.e; boolean var2; - var2 = var1 != null && var1.U1(); + if (var1 != null && var1.U1()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -303,7 +375,11 @@ public class VhBindArgs { public boolean l() { Dialog var1 = this.e; boolean var2; - var2 = var1 != null && var1.V1(); + if (var1 != null && var1.V1()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -311,7 +387,11 @@ public class VhBindArgs { public boolean m() { Dialog var1 = this.e; boolean var2; - var2 = var1 != null && var1.W1(); + if (var1 != null && var1.W1()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -324,7 +404,11 @@ public class VhBindArgs { public boolean o() { AdapterEntry var1 = this.b; boolean var2; - var2 = var1 != null && var1.a == 101; + if (var1 != null && var1.a == 101) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -332,7 +416,11 @@ public class VhBindArgs { public boolean p() { Msg var1 = this.b.c; boolean var2; - var2 = var1 != null && var1.G1(); + if (var1 != null && var1.G1()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -355,7 +443,11 @@ public class VhBindArgs { public boolean r() { Msg var1 = this.b.c; boolean var2; - var2 = var1 instanceof MsgFromUser && ((MsgFromUser) var1).e2(); + if (var1 instanceof MsgFromUser && ((MsgFromUser) var1).e2()) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -396,19 +488,27 @@ public class VhBindArgs { public boolean v() { IntSet var1 = this.r; boolean var2; - var2 = var1 != null && var1.a(this.b.c.getLocalId()); + if (var1 != null && var1.a(this.b.c.getLocalId())) { + var2 = true; + } else { + var2 = false; + } return var2; } public boolean w() { - return !this.z(); + return this.z() ^ true; } public boolean x() { AdapterEntry var1 = this.c; boolean var2; - var2 = var1 != null && var1.a == 100; + if (var1 != null && var1.a == 100) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -416,7 +516,11 @@ public class VhBindArgs { public boolean y() { AdapterEntry var1 = this.c; boolean var2; - var2 = var1 != null && var1.a == 96; + if (var1 != null && var1.a == 96) { + var2 = true; + } else { + var2 = false; + } return var2; } @@ -424,7 +528,11 @@ public class VhBindArgs { public boolean z() { AdapterEntry var1 = this.c; boolean var2; - var2 = var1 != null && var1.c() && this.c.c.getLocalId() == this.b.c.getLocalId(); + if (var1 != null && var1.c() && this.c.c.getLocalId() == this.b.c.getLocalId()) { + var2 = true; + } else { + var2 = false; + } return var2; } diff --git a/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/msgparts/MsgPartCallHolder.java b/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/msgparts/MsgPartCallHolder.java index 1253c540f..28e6faff4 100644 --- a/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/msgparts/MsgPartCallHolder.java +++ b/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/msgparts/MsgPartCallHolder.java @@ -46,7 +46,7 @@ public final class MsgPartCallHolder extends MsgPartHolderBase { this.G = new StringBuilder(); } - private void a(Msg var1) { + private final void a(Msg var1) { this.G.setLength(0); MsgTimeFormatter var2 = this.F; Context var3 = this.C; @@ -55,7 +55,7 @@ public final class MsgPartCallHolder extends MsgPartHolderBase { this.H.setTimeText(this.G); } - private void a(boolean var1) { + private final void a(boolean var1) { MsgPartIconTwoRowView var2 = this.H; int var3; if (var1) { @@ -67,7 +67,7 @@ public final class MsgPartCallHolder extends MsgPartHolderBase { var2.setIcon(var3); } - private void a(boolean var1, AttachCall var2) { + private final void a(boolean var1, AttachCall var2) { boolean var3 = !var1; if (var2.h() == CallState.ERROR) { this.H.setSubtitleText(m.vkim_msg_list_call_error); diff --git a/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/vh/VhMsg.java b/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/vh/VhMsg.java index e3627a332..808a9d02d 100644 --- a/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/vh/VhMsg.java +++ b/app/src/main/java/com/vk/im/ui/components/viewcontrollers/msg_list/adapter/vh/VhMsg.java @@ -56,6 +56,46 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { private static final int[][] j0; private static final int[][] k0; private static final int[][] l0; + private final MsgPartHolderBase B; + private final MsgPartHolderBindArgs C = new MsgPartHolderBindArgs(); + private final Rect D = new Rect(); + private final Rect E = new Rect(); + private final Rect F = new Rect(); + private final Rect G = new Rect(); + private ColorDrawable H; + private final int I; + private final int J; + private final int K; + private final int L; + private final int M; + private Drawable N; + private Drawable O; + private BombView P; + private BombView.d Q; + private int R; + private int S; + private final DisplayNameFormatter T = new DisplayNameFormatter(); + private final StringBuilder U = new StringBuilder(); + private final StringBuilder V = new StringBuilder(); + private final String W; + private final String X; + private final String Y; + private boolean Z; + private BubbleColors a0; + private final FluidHorizontalLayout b; + @ColorInt + private int b0; + private final AvatarView c; + private MsgListAdapterCallback c0; + private final Space d; + private Msg d0; + private final MsgBubbleView e; + private Dialog e0; + private final MsgStatusView f; + private int f0; + private final ImageView g; + private h g0 = new h(); + private final Space h; static { int[] var0 = new int[]{0, 0, 0, 0}; @@ -79,59 +119,18 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { l0 = new int[][]{var0, {4, 4, 0, 0, 0, 2, 8, 0}, var1, var2, {4, 0, 0, 0, 0, 2, 8, 0}, {0, 0, 0, 0, 0, 2, 8, 0}, {4, 4, 0, 0, 0, 2, 8, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}; } - private final MsgPartHolderBase B; - private final MsgPartHolderBindArgs C = new MsgPartHolderBindArgs(); - private final Rect D = new Rect(); - private final Rect E = new Rect(); - private final Rect F = new Rect(); - private final Rect G = new Rect(); - private final int I; - private final int J; - private final int K; - private final int L; - private final int M; - private final DisplayNameFormatter T = new DisplayNameFormatter(); - private final StringBuilder U = new StringBuilder(); - private final StringBuilder V = new StringBuilder(); - private final String W; - private final String X; - private final String Y; - private final FluidHorizontalLayout b; - private final AvatarView c; - private final Space d; - private final MsgBubbleView e; - private final MsgStatusView f; - private final ImageView g; - private final Space h; - private final ColorDrawable H; - private Drawable N; - private Drawable O; - private final BombView P; - private final BombView.d Q; - private final int R; - private final int S; - private boolean Z; - private BubbleColors a0; - @ColorInt - private int b0; - private MsgListAdapterCallback c0; - private Msg d0; - private Dialog e0; - private int f0; - private final h g0 = new h(); - public VhMsg(View itemView, MsgPartHolderBase vhBase) { super(itemView); Context context = itemView.getContext(); LayoutInflater var4 = LayoutInflater.from(context); this.b = (FluidHorizontalLayout) itemView; - this.c = itemView.findViewById(com.vk.im.ui.h.avatar); - this.d = itemView.findViewById(com.vk.im.ui.h.avatar_space); - this.e = itemView.findViewById(com.vk.im.ui.h.bubble); - this.f = itemView.findViewById(com.vk.im.ui.h.status); - this.g = itemView.findViewById(com.vk.im.ui.h.vkim_channel_share); - this.h = itemView.findViewById(com.vk.im.ui.h.status_space); - this.P = itemView.findViewById(com.vk.im.ui.h.bomb); + this.c = (AvatarView) itemView.findViewById(com.vk.im.ui.h.avatar); + this.d = (Space) itemView.findViewById(com.vk.im.ui.h.avatar_space); + this.e = (MsgBubbleView) itemView.findViewById(com.vk.im.ui.h.bubble); + this.f = (MsgStatusView) itemView.findViewById(com.vk.im.ui.h.status); + this.g = (ImageView) itemView.findViewById(com.vk.im.ui.h.vkim_channel_share); + this.h = (Space) itemView.findViewById(com.vk.im.ui.h.status_space); + this.P = (BombView) itemView.findViewById(com.vk.im.ui.h.bomb); this.B = vhBase; this.H = new ColorDrawable(context.getResources().getColor(com.vk.im.ui.d.msg_search_selection)); this.I = ContextExtKt.b(context, com.vk.im.ui.e.msg_bubble_max_width); @@ -204,10 +203,6 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { }; } - public static VhMsg a(LayoutInflater var0, ViewGroup var1, MsgPartHolderBase var2) { - return new VhMsg(var0.inflate(j.vkim_msg_list_item_msg_from_user, var1, false), var2); - } - private int a(Style var1, Style var2, boolean var3) { int var4; if (var3) { @@ -288,15 +283,20 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { case 103: return VhMsg.Style.EMPTY; default: - String var3 = "Unknown viewType: " + - var1; - throw new IllegalArgumentException(var3); + StringBuilder var3 = new StringBuilder(); + var3.append("Unknown viewType: "); + var3.append(var1); + throw new IllegalArgumentException(var3.toString()); } } return VhMsg.Style.TWO_LINE; } + public static VhMsg a(LayoutInflater var0, ViewGroup var1, MsgPartHolderBase var2) { + return new VhMsg(var0.inflate(j.vkim_msg_list_item_msg_from_user, var1, false), var2); + } + private void a(VhBindArgs args, Rect rect) { Style var3 = this.a(args.b); boolean var4 = args.b.f(); @@ -411,7 +411,11 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { Msg var10 = var5.c; var9 = var6; if (var10 != null) { - var9 = var10.v1() == args.g.t1(); + if (var10.v1() == args.g.t1()) { + var9 = true; + } else { + var9 = false; + } if (var10.O1()) { int var12 = var10.d().ordinal(); @@ -429,7 +433,11 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { b = args.I(); } } else { - var6 = var10.C1() <= args.i; + if (var10.C1() <= args.i) { + var6 = true; + } else { + var6 = false; + } if (!var6 && !var9) { var11 = MsgStatus.UNREAD; @@ -567,14 +575,18 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { partArgs.o = args.n; partArgs.s = args.v(); partArgs.t = args.q; - partArgs.u = !var4.b(); + partArgs.u = var4.b() ^ true; boolean var5; - var5 = var3.i > 0; + if (var3.i > 0) { + var5 = true; + } else { + var5 = false; + } partArgs.v = var5; partArgs.w = args.k; partArgs.x = args.l; - partArgs.y = !this.Z; + partArgs.y = this.Z ^ true; partArgs.z = args.s; partArgs.A = args.t; partArgs.l = this.b0; @@ -659,7 +671,7 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { private void f(VhBindArgs args) { Msg var2 = args.b.c; if (var2 != null) { - this.P.setStateListener(null); + this.P.setStateListener((BombView.d) null); if (var2.M1() && !var2.E1()) { this.P.setVisibility(View.GONE); } else { @@ -798,12 +810,24 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { this.e.setFwdPadding(this.D); this.e.setContentPadding(this.E); boolean var7; - var7 = args.b.a == 83; + if (args.b.a == 83) { + var7 = true; + } else { + var7 = false; + } boolean var5; - var5 = args.a.a == 83; + if (args.a.a == 83) { + var5 = true; + } else { + var5 = false; + } - var5 = !args.F() || !var7 && !var5; + if (!args.F() || !var7 && !var5) { + var5 = true; + } else { + var5 = false; + } MsgBubbleView var8 = this.e; boolean var6 = var4; @@ -880,10 +904,18 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { return false; } else { boolean var5; - var5 = var2.a == 50; + if (var2.a == 50) { + var5 = true; + } else { + var5 = false; + } boolean var6; - var6 = !args.z() && var2.i == 0; + if (!args.z() && var2.i == 0) { + var6 = true; + } else { + var6 = false; + } if (var5 || var6 || args.y() || args.x()) { var4 = true; @@ -902,7 +934,11 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { private boolean u(int var1) { boolean var2; - var2 = var1 == 2 || var1 == 3; + if (var1 != 2 && var1 != 3) { + var2 = false; + } else { + var2 = true; + } return var2; } @@ -924,7 +960,9 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { Msg var1 = this.d0; if (var1 != null) { Dialog var2 = this.e0; - return var2 != null && MsgPermissionHelper.b.a(var2, var1); + if (var2 != null && MsgPermissionHelper.b.a(var2, var1)) { + return true; + } } } return false; @@ -959,7 +997,11 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { public void a(VhBindArgs args) { boolean var2; - var2 = VKThemeHelper.l() == VKTheme.VKAPP_LIGHT; + if (VKThemeHelper.l() == VKTheme.VKAPP_LIGHT) { + var2 = true; + } else { + var2 = false; + } this.Z = var2; AdapterEntry var3 = args.b; @@ -1020,7 +1062,11 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { public boolean f0() { boolean var1; - var1 = this.f0 == 100; + if (this.f0 == 100) { + var1 = true; + } else { + var1 = false; + } return var1; } @@ -1037,7 +1083,7 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { this.B.c(var1); } - private enum Style { + private static enum Style { BUTTON(6), EMPTY(7), FWD_SENDER(4), @@ -1049,14 +1095,14 @@ public class VhMsg extends VhBase implements SwipeToReplyItemTouchCallback.b { public final int index; - Style(int var3) { + private Style(int var3) { this.index = var3; } } private class h implements Functions { - private final int a; - private final Runnable b; + private int a; + private Runnable b; private h() { this.a = Screen.a(12); diff --git a/app/src/main/java/com/vk/im/ui/q/h/e/MentionsController.java b/app/src/main/java/com/vk/im/ui/q/h/e/MentionsController.java index 7a085ca84..007fadc4c 100644 --- a/app/src/main/java/com/vk/im/ui/q/h/e/MentionsController.java +++ b/app/src/main/java/com/vk/im/ui/q/h/e/MentionsController.java @@ -26,23 +26,30 @@ import com.vtosters.lite.R; public final class MentionsController { private final RichEditText a; - private final ImEngine mImEngine; - private final View j; - private final b k; + private boolean state; private CoordinatorLayout mCoordinatorLayout; private VkBottomSheetBehavior mBottomSheetBehavior; private boolean e; - private final DialogMentionComponent mDialogMentionComponent; - private final MentionsManager mMentionsManager; - private final int i; + private DialogMentionComponent mDialogMentionComponent; + private MentionsManager mMentionsManager; + private final ImEngine mImEngine; + private int i; + private final View j; + private final b k; + + public interface b { + boolean c(); + + boolean d(); + } public MentionsController(ImEngine imEngine, int i, View view, b bVar) { this.mImEngine = imEngine; this.i = i; this.j = view; this.k = bVar; - this.a = this.j.findViewById(R.id.writebar_edit); + this.a = (RichEditText) this.j.findViewById(R.id.writebar_edit); this.mMentionsManager = new MentionsManager(this.a, new MentionSuggestionsSupplier() { @Override @@ -64,7 +71,7 @@ public final class MentionsController { @Override public void b() { - MentionsController.this.mDialogMentionComponent.a(0, null); + MentionsController.this.mDialogMentionComponent.a(0, (String) null); MentionsController.this.g(); } }); @@ -85,18 +92,18 @@ public final class MentionsController { }); } - public void g() { + public final void g() { this.e = false; j(); } - private void h() { + private final void h() { if (this.state) { return; } View inflate = ((ViewStub) this.j.findViewById(R.id.mentions_container_stub)).inflate(); - ViewGroup viewGroup = inflate.findViewById(R.id.mentions_container); - viewGroup.addView(this.mDialogMentionComponent.a(viewGroup, null)); + ViewGroup viewGroup = (ViewGroup) inflate.findViewById(R.id.mentions_container); + viewGroup.addView(this.mDialogMentionComponent.a(viewGroup, (Bundle) null)); this.mCoordinatorLayout = inflate.findViewById(R.id.mentions_cl); this.mBottomSheetBehavior = (VkBottomSheetBehavior) ((CoordinatorLayout.LayoutParams) viewGroup.getLayoutParams()).getBehavior(); this.mBottomSheetBehavior.a(new VkBottomSheetBehavior.b() { @@ -113,12 +120,12 @@ public final class MentionsController { this.state = true; } - public void i() { + public final void i() { this.e = true; j(); } - public void j() { + public final void j() { if (this.k.d()) { Context context = this.j.getContext(); Activity f = ContextExtKt.f(context); @@ -132,33 +139,27 @@ public final class MentionsController { } } - public void a() { + public final void a() { this.mDialogMentionComponent.g(); } - public void b() { + public final void b() { this.mDialogMentionComponent.h(); } - public b c() { + public final b c() { return this.k; } - public int d() { + public final int d() { return this.i; } - public void e() { + public final void e() { this.mDialogMentionComponent.q(); } - public void f() { + public final void f() { this.mDialogMentionComponent.r(); } - - public interface b { - boolean c(); - - boolean d(); - } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/im/ui/views/avatars/StoryBorderView.java b/app/src/main/java/com/vk/im/ui/views/avatars/StoryBorderView.java index 8fb4e48ab..27ceffa88 100644 --- a/app/src/main/java/com/vk/im/ui/views/avatars/StoryBorderView.java +++ b/app/src/main/java/com/vk/im/ui/views/avatars/StoryBorderView.java @@ -12,15 +12,15 @@ import android.view.ViewGroup; import com.vk.im.ui.o; public class StoryBorderView extends View { - private final Paint a; - private final int g; - private final int h; private boolean B; + private final Paint a; private LinearGradient f15747b; private int f15748c; private int f15749d; private int f15750e; private int f15751f; + private final int g; + private final int h; public StoryBorderView(Context context) { this(context, null, 0, 6); @@ -34,32 +34,10 @@ public class StoryBorderView extends View { this(context, (i2 & 2) != 0 ? null : attributeSet, (i2 & 4) != 0 ? 0 : i); } - public StoryBorderView(Context context, AttributeSet attributeSet, int i) { - super(context, attributeSet, i); - Paint paint = new Paint(); - paint.setAntiAlias(true); - paint.setStyle(Paint.Style.STROKE); - this.a = paint; - TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, o.StoryBorderView); - setBorderColor(obtainStyledAttributes.getInt(o.StoryBorderView_vkim_borderColor, 0)); - this.g = obtainStyledAttributes.getInt(o.StoryBorderView_vkim_borderGradientStartColor, 0); - this.h = obtainStyledAttributes.getInt(o.StoryBorderView_vkim_borderGradientEndColor, 0); - setBorderWidth(obtainStyledAttributes.getDimensionPixelSize(o.StoryBorderView_vkim_borderWidth, 0)); - obtainStyledAttributes.recycle(); - } - public int getBorderColor() { return this.f15749d; } - public void setBorderColor(int i) { - if (this.f15749d != i) { - this.f15749d = i; - this.a.setColor(i); - invalidate(); - } - } - public int getBorderGradientEndColor() { return this.h; } @@ -72,33 +50,14 @@ public class StoryBorderView extends View { return this.f15750e; } - public void setBorderWidth(int i) { - if (this.f15750e != i) { - this.f15750e = i; - this.a.setStrokeWidth(i); - invalidate(); - } - } - public int getPadding() { return this.f15751f; } - public void setPadding(int i) { - if (this.f15751f != i) { - this.f15751f = i; - setPadding(i, i, i, i); - } - } - public int getViewSize() { return this.f15748c; } - public void setViewSize(int i) { - this.f15748c = i; - } - @Override protected void onDraw(Canvas canvas) { canvas.drawOval(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom(), this.a); @@ -110,6 +69,22 @@ public class StoryBorderView extends View { setMeasuredDimension(i3, i3); } + public void setBorderColor(int i) { + if (this.f15749d != i) { + this.f15749d = i; + this.a.setColor(i); + invalidate(); + } + } + + public void setBorderWidth(int i) { + if (this.f15750e != i) { + this.f15750e = i; + this.a.setStrokeWidth(i); + invalidate(); + } + } + @Override public void setLayoutParams(ViewGroup.LayoutParams layoutParams) { super.setLayoutParams(layoutParams); @@ -133,4 +108,29 @@ public class StoryBorderView extends View { invalidate(); } } + + public void setPadding(int i) { + if (this.f15751f != i) { + this.f15751f = i; + setPadding(i, i, i, i); + } + } + + public void setViewSize(int i) { + this.f15748c = i; + } + + public StoryBorderView(Context context, AttributeSet attributeSet, int i) { + super(context, attributeSet, i); + Paint paint = new Paint(); + paint.setAntiAlias(true); + paint.setStyle(Paint.Style.STROKE); + this.a = paint; + TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, o.StoryBorderView); + setBorderColor(obtainStyledAttributes.getInt(o.StoryBorderView_vkim_borderColor, 0)); + this.g = obtainStyledAttributes.getInt(o.StoryBorderView_vkim_borderGradientStartColor, 0); + this.h = obtainStyledAttributes.getInt(o.StoryBorderView_vkim_borderGradientEndColor, 0); + setBorderWidth(obtainStyledAttributes.getDimensionPixelSize(o.StoryBorderView_vkim_borderWidth, 0)); + obtainStyledAttributes.recycle(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/music/view/x/LyricsHolder.java b/app/src/main/java/com/vk/music/view/x/LyricsHolder.java index 7ae66f0c5..3d72f3a4d 100644 --- a/app/src/main/java/com/vk/music/view/x/LyricsHolder.java +++ b/app/src/main/java/com/vk/music/view/x/LyricsHolder.java @@ -23,8 +23,8 @@ import com.vtosters.lite.R; import com.vtosters.lite.ViewUtils; import com.vtosters.lite.ui.MusicErrorViewHelper; import com.vtosters.lite.ui.holder.RecyclerHolder; -import ru.vtosters.hooks.other.Preferences; import ru.vtosters.lite.music.Genius; +import ru.vtosters.hooks.other.Preferences; import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/app/src/main/java/com/vk/profile/ui/community/CommunityBorderedImageView.java b/app/src/main/java/com/vk/profile/ui/community/CommunityBorderedImageView.java index fa8d30cc5..bfcd7f239 100644 --- a/app/src/main/java/com/vk/profile/ui/community/CommunityBorderedImageView.java +++ b/app/src/main/java/com/vk/profile/ui/community/CommunityBorderedImageView.java @@ -36,37 +36,37 @@ public final class CommunityBorderedImageView extends BorderedCircleImageView im public CommunityBorderedImageView(Context context, AttributeSet attributeSet, int i) { super(context, attributeSet, i); - this.g0 = VKThemeHelper.d(R.attr.accent); - this.h0 = ContextExtKt.a(context, R.color.gray_200); + this.g0 = VKThemeHelper.d((int) R.attr.accent); + this.h0 = ContextExtKt.a(context, (int) R.color.gray_200); this.i0 = new PorterDuffColorFilter(this.g0, PorterDuff.Mode.SRC_IN); this.j0 = new PorterDuffColorFilter(this.h0, PorterDuff.Mode.SRC_IN); } - public void c(int unread, int read) { // get unread and read resid + public final void c(int unread, int read) { // get unread and read resid this.unread = unread; this.read = read; this.T = BitmapFactory.decodeResource(getResources(), this.unread); } - public int getPrimaryColor() { + public final int getPrimaryColor() { return this.g0; } - public void setPrimaryColor(int i) { + public final void setPrimaryColor(int i) { this.g0 = i; this.i0 = new PorterDuffColorFilter(i, PorterDuff.Mode.SRC_IN); } - public int getWasViewedColor() { + public final int getWasViewedColor() { return this.h0; } - public void setWasViewedColor(int i) { + public final void setWasViewedColor(int i) { this.h0 = i; this.j0 = new PorterDuffColorFilter(i, PorterDuff.Mode.SRC_IN); } - public void o() { + public final void o() { this.f0 = false; l(); } @@ -79,7 +79,7 @@ public final class CommunityBorderedImageView extends BorderedCircleImageView im } } - public void setStoryContainer(StoriesContainer storiesContainer) { + public final void setStoryContainer(StoriesContainer storiesContainer) { if (storiesContainer.L1()) { this.f0 = true; m(); diff --git a/app/src/main/java/com/vk/sharing/view/TargetImageView.java b/app/src/main/java/com/vk/sharing/view/TargetImageView.java index 821bfef82..a4f0fa842 100644 --- a/app/src/main/java/com/vk/sharing/view/TargetImageView.java +++ b/app/src/main/java/com/vk/sharing/view/TargetImageView.java @@ -30,14 +30,14 @@ public class TargetImageView extends VKMultiImageView { private static final int I = Screen.a(2); private final int B; private final int C; - private final RectF f21629d; - private final Paint f21630e; - private final RectF g; - private final Paint h; private Drawable D; private String[] F; private int G; + private final RectF f21629d; + private final Paint f21630e; private Canvas f21631f; + private final RectF g; + private final Paint h; public TargetImageView(Context context, Drawable d) { this(context, null, 0, 6); @@ -51,43 +51,6 @@ public class TargetImageView extends VKMultiImageView { this(context, (i2 & 2) != 0 ? null : attributeSet, (i2 & 4) != 0 ? 0 : i); } - public TargetImageView(Context context, AttributeSet attributeSet, int i) { - super(context, attributeSet, i); - this.f21629d = new RectF(); - Paint paint = new Paint(); - paint.setAntiAlias(true); - paint.setDither(true); - paint.setFilterBitmap(true); - this.f21630e = paint; - this.g = new RectF(); - Paint paint2 = new Paint(); - paint2.setAntiAlias(true); - paint2.setStrokeWidth(I); - paint2.setStyle(Paint.Style.STROKE); - this.h = paint2; - this.B = getAccentColor(); - this.C = this.B; - Drawable c2 = ContextExtKt.c(context, R.drawable.ic_check_circle_composite_24_full); - if (c2 != null) { - this.D = c2; - this.F = new String[4]; - int i2 = I * 2; - setPadding(i2, i2, i2, i2); - if (attributeSet != null) { - TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, a0.TargetImageView); - setSelected(obtainStyledAttributes.getBoolean(0, false)); - obtainStyledAttributes.recycle(); - } - Drawable drawable = ContextCompat.getDrawable(context, R.drawable.user_placeholder); - for (int i3 = 0; i3 <= 3; i3++) { - a(); - DraweeHolder a3 = this.a.a(i3); - a3.b().e(drawable); - } - setScaleType(ScalingUtils.b.o); - } - } - private void e() { int i = this.G; for (int i2 = 0; i2 < i; i2++) { @@ -288,4 +251,41 @@ public class TargetImageView extends VKMultiImageView { drawable.setBounds(i - drawable.getIntrinsicWidth(), i2 - this.D.getIntrinsicHeight(), i, i2); f(); } + + public TargetImageView(Context context, AttributeSet attributeSet, int i) { + super(context, attributeSet, i); + this.f21629d = new RectF(); + Paint paint = new Paint(); + paint.setAntiAlias(true); + paint.setDither(true); + paint.setFilterBitmap(true); + this.f21630e = paint; + this.g = new RectF(); + Paint paint2 = new Paint(); + paint2.setAntiAlias(true); + paint2.setStrokeWidth(I); + paint2.setStyle(Paint.Style.STROKE); + this.h = paint2; + this.B = getAccentColor(); + this.C = this.B; + Drawable c2 = ContextExtKt.c(context, R.drawable.ic_check_circle_composite_24_full); + if (c2 != null) { + this.D = c2; + this.F = new String[4]; + int i2 = I * 2; + setPadding(i2, i2, i2, i2); + if (attributeSet != null) { + TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, a0.TargetImageView); + setSelected(obtainStyledAttributes.getBoolean(0, false)); + obtainStyledAttributes.recycle(); + } + Drawable drawable = ContextCompat.getDrawable(context, R.drawable.user_placeholder); + for (int i3 = 0; i3 <= 3; i3++) { + a(); + DraweeHolder a3 = this.a.a(i3); + a3.b().e(drawable); + } + setScaleType(ScalingUtils.b.o); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/stickers/details/StickerDetailsAdapter.java b/app/src/main/java/com/vk/stickers/details/StickerDetailsAdapter.java index 59a35f315..3aacdbe50 100644 --- a/app/src/main/java/com/vk/stickers/details/StickerDetailsAdapter.java +++ b/app/src/main/java/com/vk/stickers/details/StickerDetailsAdapter.java @@ -104,25 +104,6 @@ public final class StickerDetailsAdapter extends RecyclerView.Adapter StoryCircleImageView.this.a(list)); + pipelineDraweeControllerBuilder.a((Supplier>>) () -> StoryCircleImageView.this.a(list)); return; } pipelineDraweeControllerBuilder.b(null); diff --git a/app/src/main/java/com/vtosters/lite/ui/bottomnavigation/BottomNavigationItemView.java b/app/src/main/java/com/vtosters/lite/ui/bottomnavigation/BottomNavigationItemView.java index c9a572e17..3582163d4 100644 --- a/app/src/main/java/com/vtosters/lite/ui/bottomnavigation/BottomNavigationItemView.java +++ b/app/src/main/java/com/vtosters/lite/ui/bottomnavigation/BottomNavigationItemView.java @@ -35,16 +35,16 @@ public class BottomNavigationItemView extends FrameLayout implements MenuView.It private final View mCounterContainer; private final TextView mCounter; private final View mDot; - private final int mMargin; - private final float mSmallScale; - private final ImageView mIcon; - private final ImageView mActionIcon; private int mItemPos; private MenuItemImpl mItemData; private ColorStateList mColorStateList; + private final int mMargin; + private final float mSmallScale; private boolean mShiftingModeEnabled; private boolean mIconsModeEnabled; private boolean mStaticModeEnabled; + private final ImageView mIcon; + private final ImageView mActionIcon; public BottomNavigationItemView(@NonNull Context context) { this(context, null); @@ -101,10 +101,6 @@ public class BottomNavigationItemView extends FrameLayout implements MenuView.It return this.mItemPos; } - public void setItemPosition(int pos) { - this.mItemPos = pos; - } - @SuppressLint("RestrictedApi") public void initialize(MenuItemImpl impl, int i) { this.mItemData = impl; @@ -314,6 +310,10 @@ public class BottomNavigationItemView extends FrameLayout implements MenuView.It ViewCompat.setBackground(this, resId != 0 ? ContextCompat.getDrawable(this.getContext(), resId) : null); } + public void setItemPosition(int pos) { + this.mItemPos = pos; + } + public void setShiftingMode(boolean var1) { this.mShiftingModeEnabled = var1; } diff --git a/app/src/main/java/ru/vtosters/hooks/GcmHook.java b/app/src/main/java/ru/vtosters/hooks/GcmHook.java index 28c15efc4..2f70a4dc5 100644 --- a/app/src/main/java/ru/vtosters/hooks/GcmHook.java +++ b/app/src/main/java/ru/vtosters/hooks/GcmHook.java @@ -22,7 +22,7 @@ public class GcmHook { private static final String agent = String.format("Android-GCM/1.5 (%s %s)", Build.MODEL, Build.MODEL); private static KeyPair pair; private static int rid = 0; - + static { genNewKey(); } diff --git a/app/src/main/java/ru/vtosters/hooks/NewsfeedHook.java b/app/src/main/java/ru/vtosters/hooks/NewsfeedHook.java index 9f082c81a..dae6244ed 100644 --- a/app/src/main/java/ru/vtosters/hooks/NewsfeedHook.java +++ b/app/src/main/java/ru/vtosters/hooks/NewsfeedHook.java @@ -6,9 +6,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.vk.core.preference.Preference; import com.vk.discover.DiscoverItemDecorator; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; +import java.util.*; import static java.lang.Long.MAX_VALUE; import static ru.vtosters.hooks.other.Preferences.*; diff --git a/app/src/main/java/ru/vtosters/hooks/RenameHook.java b/app/src/main/java/ru/vtosters/hooks/RenameHook.java index 0d5133fd6..3cc51575c 100644 --- a/app/src/main/java/ru/vtosters/hooks/RenameHook.java +++ b/app/src/main/java/ru/vtosters/hooks/RenameHook.java @@ -1,7 +1,9 @@ package ru.vtosters.hooks; +import androidx.core.util.Pair; import org.json.JSONException; import org.json.JSONObject; +import ru.vtosters.lite.utils.RenameTool; public class RenameHook { public static void injectIntoJson(JSONObject obj) throws JSONException { diff --git a/app/src/main/java/ru/vtosters/hooks/other/ThemesUtils.java b/app/src/main/java/ru/vtosters/hooks/other/ThemesUtils.java index 0c57384c0..220b19fdf 100644 --- a/app/src/main/java/ru/vtosters/hooks/other/ThemesUtils.java +++ b/app/src/main/java/ru/vtosters/hooks/other/ThemesUtils.java @@ -16,10 +16,12 @@ import android.webkit.WebView; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import com.vk.articles.preload.WebCachePreloader; import com.vk.core.drawable.RecoloredDrawable; +import com.vk.core.preference.Preference; import com.vk.core.ui.themes.MilkshakeHelper; import com.vk.core.ui.themes.VKTheme; import com.vk.core.ui.themes.VKThemeHelper; diff --git a/app/src/main/java/ru/vtosters/hooks/ssfs/BannerHook.java b/app/src/main/java/ru/vtosters/hooks/ssfs/BannerHook.java index 78ffe82d1..0487d1a1b 100644 --- a/app/src/main/java/ru/vtosters/hooks/ssfs/BannerHook.java +++ b/app/src/main/java/ru/vtosters/hooks/ssfs/BannerHook.java @@ -1,6 +1,7 @@ package ru.vtosters.hooks.ssfs; import com.vk.core.dialogs.alert.VkAlertDialog; +import org.json.JSONException; import org.json.JSONObject; import ru.vtosters.hooks.other.Preferences; import ru.vtosters.lite.ssfs.ImBanner; diff --git a/app/src/main/java/ru/vtosters/lite/music/TransportStream.java b/app/src/main/java/ru/vtosters/lite/music/TransportStream.java index 2bc3609f8..62b68c8a8 100644 --- a/app/src/main/java/ru/vtosters/lite/music/TransportStream.java +++ b/app/src/main/java/ru/vtosters/lite/music/TransportStream.java @@ -4,8 +4,8 @@ import android.text.TextUtils; public class TransportStream { - private final String mMediaSegmentUri; private String mKeyUri; + private final String mMediaSegmentUri; private String mMediaSegmentName; public TransportStream(String baseURI, String mediaSegmentName) { diff --git a/app/src/main/java/ru/vtosters/lite/music/VKM3UParser.java b/app/src/main/java/ru/vtosters/lite/music/VKM3UParser.java index a95b583a1..835a3e728 100644 --- a/app/src/main/java/ru/vtosters/lite/music/VKM3UParser.java +++ b/app/src/main/java/ru/vtosters/lite/music/VKM3UParser.java @@ -15,9 +15,10 @@ public class VKM3UParser { //Playlist types static public int PLAYLIST_TYPE_VOD = 0; static public int PLAYLIST_TYPE_EVENT = 1; - private final String mData; + //region Extended M3U global extensions public List mTransportStreams = new ArrayList<>(); + private final String mData; /** * @see EXT-X-VERSION **/ diff --git a/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java b/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java index 328542dce..bf572e7fc 100644 --- a/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java +++ b/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java @@ -19,8 +19,8 @@ import ru.vtosters.lite.utils.AndroidUtils; import java.io.IOException; import static ru.vtosters.hooks.DateHook.getLocale; -import static ru.vtosters.hooks.GroupsCatalogInjector.injectIntoCatalog; import static ru.vtosters.hooks.other.Preferences.getBoolValue; +import static ru.vtosters.hooks.GroupsCatalogInjector.injectIntoCatalog; import static ru.vtosters.lite.music.cache.helpers.PlaylistHelper.*; import static ru.vtosters.lite.proxy.ProxyUtils.getApi; import static ru.vtosters.lite.utils.AccountManagerUtils.getUserId; diff --git a/app/src/main/java/ru/vtosters/lite/themes/utils/ArscEditor.java b/app/src/main/java/ru/vtosters/lite/themes/utils/ArscEditor.java index 2b3b65236..fc96719e5 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/utils/ArscEditor.java +++ b/app/src/main/java/ru/vtosters/lite/themes/utils/ArscEditor.java @@ -1,25 +1,29 @@ package ru.vtosters.lite.themes.utils; -import com.google.devrel.gmscore.tools.apk.arsc.BinaryResourceFile; -import com.google.devrel.gmscore.tools.apk.arsc.BinaryResourceValue; -import com.google.devrel.gmscore.tools.apk.arsc.ResourceTableChunk; +import com.google.devrel.gmscore.tools.apk.arsc.*; public class ArscEditor { - public static void changeColors(BinaryResourceFile arsc, int[] colorIds, int color) { - for (var chunk : arsc.getChunks()) { - final var resTableChunk = (ResourceTableChunk) chunk; - for (var packageChunk : resTableChunk.getPackages()) { - for (var typeChunk : packageChunk.getTypeChunks("color")) { - for (var entry : typeChunk.getEntries().entrySet()) { - final var value = entry.getValue(); - if (value.isComplex()) continue; - final var binValue = value.value(); - if (!isColorResourceValue(binValue)) continue; - final var resId = packageChunk.getId() << 24 | typeChunk.getId() << 16 | entry.getKey(); - for (var colodId : colorIds) { - if (resId == colodId) { - binValue.data = color; + public static void changeColors(BinaryResourceFile arsc,int[] colorIds,int color) { + for(var chunk:arsc.getChunks()) + { + final var resTableChunk=(ResourceTableChunk)chunk; + for(var packageChunk:resTableChunk.getPackages()) + { + for(var typeChunk:packageChunk.getTypeChunks("color")) + { + for(var entry:typeChunk.getEntries().entrySet()) + { + final var value=entry.getValue(); + if(value.isComplex())continue; + final var binValue=value.value(); + if(!isColorResourceValue(binValue))continue; + final var resId=packageChunk.getId()<<24|typeChunk.getId()<<16|entry.getKey(); + for(var colodId:colorIds) + { + if(resId==colodId) + { + binValue.data=color; break; } } @@ -29,10 +33,11 @@ public class ArscEditor { } } - private static boolean isColorResourceValue(BinaryResourceValue value) { - return value.type == BinaryResourceValue.Type.INT_COLOR_ARGB8 - || value.type == BinaryResourceValue.Type.INT_COLOR_RGB8 - || value.type == BinaryResourceValue.Type.INT_COLOR_ARGB4 - || value.type == BinaryResourceValue.Type.INT_COLOR_RGB4; + private static boolean isColorResourceValue(BinaryResourceValue value) + { + return value.type==BinaryResourceValue.Type.INT_COLOR_ARGB8 + ||value.type==BinaryResourceValue.Type.INT_COLOR_RGB8 + ||value.type==BinaryResourceValue.Type.INT_COLOR_ARGB4 + ||value.type==BinaryResourceValue.Type.INT_COLOR_RGB4; } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java b/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java index f34830bc3..933552b61 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java +++ b/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java @@ -36,7 +36,7 @@ public class CategorizedAdapter extends RecyclerView.Adapter mSelectedItems; private final List mDisabledItems; private final List mUnmovedItems; - final private List mExceptions = new ArrayList<>(); + final private List< T > mExceptions=new ArrayList<>(); private final IViewHolderBinder mBinder; // Min and max counts @@ -50,7 +50,8 @@ public class CategorizedAdapter extends RecyclerView.Adapter extends RecyclerView.Adapter { - if ((getTabType(toPosition) == DISABLED_STATE + if((getTabType(toPosition) == DISABLED_STATE && mSelectedItems.size() == mMinSelectedItems)) return false; - if (getItemViewType(toPosition) == CATEGORY_TITLE) { - if (mExceptions.size() > 0) { - int q = 0; - for (var ex : mExceptions) - if (mSelectedItems.contains(ex)) ++q; - if (q == 1) return false; + if (getItemViewType(toPosition) == CATEGORY_TITLE) + { + if(mExceptions.size()>0) + { + int q=0; + for(var ex:mExceptions) + if(mSelectedItems.contains(ex))++q; + if(q==1)return false; } - mDisabledItems.add(0, mSelectedItems.remove(fromPosition - 1)); - } else Collections.swap(mSelectedItems, fromPosition - 1, toPosition - 1); + mDisabledItems.add(0,mSelectedItems.remove(fromPosition-1)); + } + else Collections.swap(mSelectedItems, fromPosition - 1, toPosition - 1); } case DISABLED_STATE -> { if (getTabType(toPosition) == SELECTED_STATE diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java b/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java index 708a00e0b..0bfb7972b 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java @@ -59,6 +59,70 @@ public class DockBarEditorManager { : sInstance; } + private void init() { + if (vkme()) { + mSelectedTabs.add(getTabByTag("tab_settings")); + if (vkme_notifs()) { + if (milkshake()) { + mSelectedTabs.add(getTabByTag("tab_feedback")); + } else { + mSelectedTabs.add(getTabByTag("tab_friends")); + } + } + mSelectedTabs.add(getTabByTag("tab_messages")); + mSelectedTabs.add(getTabByTag("tab_profile")); + return; + } + + checkOldConfig(); + + var selectedTabsTags = getPreferences() + .getString("dockbar_tabs", + "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") + .split(","); + parseSelectedTabs(selectedTabsTags); + } + + private void checkOldConfig() { + File config = new File(getGlobalContext().getFilesDir(), "dockbar.json"); + if (config.exists()) config.deleteOnExit(); + } + + private void parseSelectedTabs(String[] selectedTabsTags) { + var allTags = new ArrayList<>(ALL_TAGS); + + for (String tag : selectedTabsTags) { + mSelectedTabs.add(getTabByTag(tag)); + allTags.remove(tag); + } + + for (String tag : allTags) { + mDisabledTabs.add(getTabByTag(tag)); + } + } + + public void save() { + var sb = new StringBuilder(); + for (DockBarTab tab : mSelectedTabs) + sb.append(tab.tag).append(","); + getPreferences().edit().putString("dockbar_tabs", sb.toString()).commit(); + } + + public void reset() { + Preferences.getPreferences() + .edit() + .putString("dockbar_tabs", "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") + .commit(); + } + + public List getSelectedTabs() { + return mSelectedTabs; + } + + public List getDisabledTabs() { + return mDisabledTabs; + } + public static DockBarTab getTabByTag(String tag) { return switch (tag) { case "tab_news" -> DockBarTab.valuesOf( @@ -171,68 +235,4 @@ public class DockBarEditorManager { useNewSettings()); }; } - - private void init() { - if (vkme()) { - mSelectedTabs.add(getTabByTag("tab_settings")); - if (vkme_notifs()) { - if (milkshake()) { - mSelectedTabs.add(getTabByTag("tab_feedback")); - } else { - mSelectedTabs.add(getTabByTag("tab_friends")); - } - } - mSelectedTabs.add(getTabByTag("tab_messages")); - mSelectedTabs.add(getTabByTag("tab_profile")); - return; - } - - checkOldConfig(); - - var selectedTabsTags = getPreferences() - .getString("dockbar_tabs", - "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") - .split(","); - parseSelectedTabs(selectedTabsTags); - } - - private void checkOldConfig() { - File config = new File(getGlobalContext().getFilesDir(), "dockbar.json"); - if (config.exists()) config.deleteOnExit(); - } - - private void parseSelectedTabs(String[] selectedTabsTags) { - var allTags = new ArrayList<>(ALL_TAGS); - - for (String tag : selectedTabsTags) { - mSelectedTabs.add(getTabByTag(tag)); - allTags.remove(tag); - } - - for (String tag : allTags) { - mDisabledTabs.add(getTabByTag(tag)); - } - } - - public void save() { - var sb = new StringBuilder(); - for (DockBarTab tab : mSelectedTabs) - sb.append(tab.tag).append(","); - getPreferences().edit().putString("dockbar_tabs", sb.toString()).commit(); - } - - public void reset() { - Preferences.getPreferences() - .edit() - .putString("dockbar_tabs", "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") - .commit(); - } - - public List getSelectedTabs() { - return mSelectedTabs; - } - - public List getDisabledTabs() { - return mDisabledTabs; - } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java index daad894c3..9d7d99723 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java @@ -168,18 +168,12 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme var pref = Preferences.getPreferences().getString("autoclearcache", "Default"); switch (pref) { - case "Default" -> - findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_disabled)); - case "100mb" -> - findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_100mb)); - case "500mb" -> - findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_500mb)); - case "1gb" -> - findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_1gb)); - case "2gb" -> - findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_2gb)); - case "5gb" -> - findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_5gb)); + case "Default" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_disabled)); + case "100mb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_100mb)); + case "500mb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_500mb)); + case "1gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_1gb)); + case "2gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_2gb)); + case "5gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_5gb)); } PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), AndroidUtils.getString("accounts")); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java index 200bc51a8..327c8242f 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java @@ -1,16 +1,35 @@ package ru.vtosters.lite.ui.fragments; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.*; import android.os.Bundle; +import android.util.TypedValue; +import android.webkit.WebView; +import android.widget.RadioButton; +import android.widget.RadioGroup; import android.widget.Toast; +import androidx.appcompat.view.ContextThemeWrapper; +import b.h.g.m.FileUtils; import com.vk.auth.api.VKAccount; +import com.vk.core.dialogs.alert.VkAlertDialog; import com.vk.core.util.ToastUtils; +import com.vk.im.engine.ImEngine1; +import com.vk.im.engine.ImEngineExt; +import com.vk.im.ui.providers.audiomsg.ImAudioMsgPlayerProvider; +import com.vk.im.ui.providers.audiomsg.PlayerActionSources; +import com.vk.imageloader.VKImageLoader; +import com.vk.media.player.cache.AutoPlayCacheHolder; +import com.vk.mediastore.MediaStorage; import com.vk.pushes.PushSubscriber; +import com.vk.stickers.Stickers; import com.vtosters.lite.R; import com.vtosters.lite.auth.VKAccountManager; +import com.vtosters.lite.im.ImEngineProvider; import ru.vtosters.hooks.GmsHook; +import ru.vtosters.hooks.SwitchHook; import ru.vtosters.hooks.other.Preferences; +import ru.vtosters.hooks.other.ThemesUtils; import ru.vtosters.lite.deviceinfo.DeviceInfoCollector; import ru.vtosters.lite.ssfs.UsersList; import ru.vtosters.lite.ui.activities.VKAdminTokenActivity; @@ -129,6 +148,7 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment { } + private void copyText(String src) { var manager = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE); manager.setPrimaryClip(ClipData.newPlainText("MBH-ST", src)); diff --git a/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java b/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java index a3610fbc9..66f7e8ed4 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java +++ b/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java @@ -2,7 +2,8 @@ package ru.vtosters.lite.ui.items; import com.vk.core.fragments.FragmentImpl; -public class DockBarTab { +public class DockBarTab +{ public String tag; public int iconID; @@ -33,7 +34,8 @@ public class DockBarTab { } @Override - public boolean equals(Object arg) { - return this.id == ((DockBarTab) arg).id; + public boolean equals(Object arg) + { + return this.id==((DockBarTab)arg).id; } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java b/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java index 066efe832..4ad31d802 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java +++ b/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java @@ -1,6 +1,9 @@ package ru.vtosters.lite.ui.items; -public class SuperAppItem { +import ru.vtosters.lite.ui.adapters.CategorizedAdapter; + +public class SuperAppItem +{ public String type; public String title; @@ -15,8 +18,9 @@ public class SuperAppItem { } @Override - public boolean equals(Object arg) { - var item = (SuperAppItem) arg; - return this.type.equals(item.type) && this.title.equals(item.title); + public boolean equals(Object arg) + { + var item=(SuperAppItem)arg; + return this.type.equals(item.type)&&this.title.equals(item.title); } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java index 1a7f1c382..56fb8e178 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java +++ b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java @@ -18,6 +18,7 @@ import ru.vtosters.hooks.other.Preferences; import ru.vtosters.lite.foaf.FoafBase; import ru.vtosters.lite.utils.AccountManagerUtils; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.RenameTool; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; diff --git a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java index fb80ca22f..7e939d193 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java +++ b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java @@ -5,8 +5,12 @@ 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.vk.im.engine.h; import com.vtosters.lite.R; import ru.vtosters.hooks.other.Preferences; +import ru.vtosters.hooks.other.ThemesUtils; import ru.vtosters.lite.utils.AndroidUtils; import vigo.sdk.Log;