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