From 186c1f80e6e3c649a9f8f3541e1254880ef334dd Mon Sep 17 00:00:00 2001
From: Vologhat <47892605+Vologhat@users.noreply.github.com>
Date: Mon, 1 Aug 2022 13:33:58 +0300
Subject: [PATCH] added "likes on right" displaying mode for posts and viewers
---
.../ru/vtosters/lite/hooks/PostViewHook.java | 67 +++++++++++++++++++
.../lite/ui/fragments/InterfaceFragment.java | 1 +
.../ru/vtosters/lite/utils/Preferences.java | 4 ++
smali/res/xml/preferences_interface.xml | 4 ++
.../vk/libvideo/ui/VideoBottomPanelView.smali | 2 +
.../newsfeed/holders/BaseFooterHolder.smali | 2 +
.../photoviewer/BottomPanelController.smali | 2 +
7 files changed, 82 insertions(+)
create mode 100644 app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java
diff --git a/app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java b/app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java
new file mode 100644
index 000000000..50b4d722b
--- /dev/null
+++ b/app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java
@@ -0,0 +1,67 @@
+package ru.vtosters.lite.hooks;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.vk.newsfeed.holders.BaseFooterHolder;
+import com.vtosters.lite.R;
+
+import ru.vtosters.lite.utils.Preferences;
+
+public class PostViewHook {
+
+ /**
+ * For displaying child elements with custom direction in rtl container we should remove their, set layout direction and add again */
+ private static void saveChildDirectionForRlt(ViewGroup container) {
+ var children = new View[container.getChildCount()];
+ for (int i = 0; i < container.getChildCount(); i++) {
+ var child = container.getChildAt(i);
+ child.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+ children[i] = child;
+ }
+ container.removeAllViews();
+ for (View child : children) {
+ container.addView(child);
+ }
+ container.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
+ }
+
+ // res/layout/likes_panel.xml
+ public static void injectBaseFooterHolder(BaseFooterHolder baseFooterHolder) {
+ if (!Preferences.isLikesOnRightEnabled())
+ return;
+ try {
+ var container = (ViewGroup) ((RecyclerView.ViewHolder) baseFooterHolder).itemView;
+ saveChildDirectionForRlt((ViewGroup) container.getChildAt(1));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ // res/layout/photo_viewer_bottom.xml
+ public static void injectPhotoViewer(View container) {
+ if (!Preferences.isLikesOnRightEnabled())
+ return;
+ try {
+ var bottomPanel = (ViewGroup) container.findViewById(R.id.photo_viewer_bottom_panel);
+ saveChildDirectionForRlt(bottomPanel);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ // res/layout/video_bottom_view.xml
+ public static void injectVideoView(RelativeLayout container) {
+ if (!Preferences.isLikesOnRightEnabled())
+ return;
+ try {
+ var bottomBar = (ViewGroup) container.findViewById(R.id.bottom_bar);
+ saveChildDirectionForRlt(bottomBar);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java
index fbbbd5fad..cc46175ef 100644
--- a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java
+++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java
@@ -20,6 +20,7 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
private void prefs() {
findPreference("stories").setOnPreferenceClickListener(new restart());
findPreference("swipe").setOnPreferenceClickListener(new restart());
+ findPreference("is_likes_on_right").setOnPreferenceClickListener(new restart());
}
public boolean restart(Preference preference) {
diff --git a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java
index 2147789f7..f535b2cf3 100644
--- a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java
+++ b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java
@@ -356,6 +356,10 @@ public class Preferences {
return isPrometheus(AccountManagerUtils.getUserId());
}
+ public static boolean isLikesOnRightEnabled() {
+ return getBoolValue("is_likes_on_right", false);
+ }
+
public static long getSizeForDelete() {
switch (getPrefsValue("clearcache")) {
case "100mb":
diff --git a/smali/res/xml/preferences_interface.xml b/smali/res/xml/preferences_interface.xml
index ace298ee3..22f5bf091 100644
--- a/smali/res/xml/preferences_interface.xml
+++ b/smali/res/xml/preferences_interface.xml
@@ -15,6 +15,10 @@
android:key="whatsnew"
android:summary="Блок написания поста в ленте"
android:title="Показывать блок поста" />
+
inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
+ invoke-static/range {p0 .. p0}, Lru/vtosters/lite/hooks/PostViewHook;->injectVideoView(Landroid/widget/RelativeLayout;)V
+
.line 5
sget p2, Lcom/vk/libvideo/g;->subtitle:I
diff --git a/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali b/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali
index a240eca23..60be23bd1 100644
--- a/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali
+++ b/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali
@@ -62,6 +62,8 @@
.line 1
invoke-direct {p0, p1, p2}, Lcom/vk/newsfeed/holders/BaseNewsEntryHolder;->(ILandroid/view/ViewGroup;)V
+ invoke-static/range {p0 .. p0}, Lru/vtosters/lite/hooks/PostViewHook;->injectBaseFooterHolder(Lcom/vk/newsfeed/holders/BaseFooterHolder;)V
+
.line 2
iget-object p1, p0, Landroidx/recyclerview/widget/RecyclerView$ViewHolder;->itemView:Landroid/view/View;
diff --git a/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali b/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali
index e755e8c3b..9eb751b48 100644
--- a/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali
+++ b/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali
@@ -102,6 +102,8 @@
move-result-object v0
+ invoke-static/range {v0 .. v0}, Lru/vtosters/lite/hooks/PostViewHook;->injectPhotoViewer(Landroid/view/View;)V
+
const-string v1, "LayoutInflater.from(cont\u2026hoto_viewer_bottom, null)"
invoke-static {v0, v1}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V