add dockbar injector

This commit is contained in:
Vologhat
2022-04-02 22:00:03 +03:00
parent 11fa834af7
commit 3b754b79e7
11 changed files with 355 additions and 27 deletions
@@ -1,10 +1,268 @@
package ru.vtosters.lite.ui.fragments.dockbar;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.support.v4.f.Pools;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import com.vk.apps.AppsFragment;
import com.vk.core.d.RecoloredDrawable;
import com.vk.core.fragments.FragmentImpl;
import com.vk.discover.DiscoverFeedFragment;
import com.vk.menu.MenuFragment;
import com.vk.newsfeed.NewsfeedFragment;
import com.vk.notifications.NotificationsFragment;
import com.vtosters.lite.fragments.GamesFragment;
import com.vtosters.lite.fragments.PhotosFragment;
import com.vtosters.lite.fragments.d.DocumentsViewFragment;
import com.vtosters.lite.fragments.f.FriendsFragment;
import com.vtosters.lite.fragments.h.GroupsFragment;
import com.vtosters.lite.fragments.lives.LivesPostListFragment;
import com.vtosters.lite.fragments.m.VideosFragment;
import com.vtosters.lite.fragments.messages.dialogs.DialogsFragment;
import com.vtosters.lite.fragments.money.MoneyTransfersFragment;
import com.vtosters.lite.ui.bottomnavigation.BottomNavigationMenuView;
import com.vtosters.lite.ui.bottomnavigation.BottomNavigationView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import ru.vtosters.lite.ui.fragments.FeedFragment;
import ru.vtosters.lite.ui.fragments.MusicFragment;
import ru.vtosters.lite.utils.Helper;
public class DockBarInjector {
private static final DockBarManager sManager = DockBarManager.getInstance();
public static DockBarEditHelper sDockBarEditHelper = DockBarEditHelper.getInstance();
public static Map<Class<? extends FragmentImpl>, Integer> injectMap() {
LinkedHashMap<Class<? extends FragmentImpl>, Integer> map = new LinkedHashMap<>();
for (DockBarTab tab : sManager.getSelectedTabs()) {
map.put(tab.fragmentClass, tab.id);
}
return map;
}
public static void inject() {
public static void inject(BottomNavigationView navigationView) {
Menu menu = navigationView.getMenu();
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
Log.d("sova", "Found menuitem " + item.getItemId() + ", " + item.getGroupId() + ", " + ((Object) item.getTitle()));
}
menu.clear();
try {
Field field = BottomNavigationMenuView.class.getDeclaredField("h");
field.setAccessible(true);
Object synchronizedPool = field.get(null);
Class<?> synchronisedPoolCls = Class.forName("android.support.v4.f.Pools$a");
Method acquire = synchronisedPoolCls.getDeclaredMethod("a");
if (synchronizedPool != null) {
do {
} while (acquire.invoke(synchronizedPool) != null);
}
} catch (NoSuchFieldException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException e) {
e.printStackTrace();
}
for (DockBarTab tab : sManager.getSelectedTabs()) {
MenuItem add = menu.add(0, tab.id, 0, tab.titleID);
Drawable drawable = Helper.GetContext().getResources().getDrawable(tab.iconID);
ColorStateList colorStateList = Helper.GetContext().getResources().getColorStateList(com.vtosters.lite.R.color.bottom_navigation_item);
add.setIcon((Drawable) new RecoloredDrawable(drawable, colorStateList));
add.setShowAsAction(1);
add.setCheckable(true);
}
}
public static int injectId(String tag) {
for (DockBarTab tab : sManager.getSelectedTabs()) {
if (tag.equals(tab.tag))
return tab.id;
}
return 0;
}
public static void injectMenuFragment(Menu m) {
List<MenuItem> menuItems = new ArrayList<>();
for (int i = 0; i < m.size(); i++) {
menuItems.add(m.getItem(i));
}
m.clear();
for (DockBarTab tab : sManager.getSelectedTabs()) {
if (tab.id != com.vtosters.lite.R.id.tab_menu) {
int itemId = tab.id;
switch (tab.id) {
case com.vtosters.lite.R.id.tab_news:
itemId = com.vtosters.lite.R.id.menu_newsfeed;
case com.vtosters.lite.R.id.tab_discover:
itemId = com.vtosters.lite.R.id.menu_search;
case com.vtosters.lite.R.id.tab_feedback:
itemId = com.vtosters.lite.R.id.menu_feedback;
case com.vtosters.lite.R.id.tab_messages:
itemId = com.vtosters.lite.R.id.menu_messages;
}
MenuItem add = m.add(0, itemId, 0, tab.titleID);
add.setIcon(tab.iconID);
add.setVisible(true);
}
}
for (MenuItem menuItem : menuItems) {
MenuItem add2 = m.add(menuItem.getGroupId(), menuItem.getItemId(), menuItem.getOrder(), menuItem.getTitle());
add2.setIcon(menuItem.getIcon());
}
menuItems.clear();
for (int i = 0; i < m.size(); i++) {
MenuItem menuItem = m.getItem(i);
for (DockBarTab tab : sManager.getSelectedTabs()) {
int itemId = menuItem.getItemId();
if (itemId == com.vtosters.lite.R.id.menu_newsfeed) {
itemId = com.vtosters.lite.R.id.tab_news;
} else if (itemId == com.vtosters.lite.R.id.menu_search) {
itemId = com.vtosters.lite.R.id.tab_discover;
} else if (itemId == com.vtosters.lite.R.id.menu_feedback) {
itemId = com.vtosters.lite.R.id.tab_feedback;
} else if (itemId == com.vtosters.lite.R.id.menu_messages) {
itemId = com.vtosters.lite.R.id.tab_messages;
}
if (itemId == tab.id && tab.id != com.vtosters.lite.R.id.menu_vk_pay) {
menuItems.add(menuItem);
break;
}
}
}
for (MenuItem menuItem : menuItems) {
m.removeItem(menuItem.getItemId());
}
}
public static JSONArray injectMenuJSON(JSONArray arr) {
List<String> arrayList = new ArrayList(Arrays.asList(
"news",
"messages",
"feedback",
"discover"
));
for (DockBarTab tab : sManager.getSelectedTabs()) {
switch (tab.id) {
case com.vtosters.lite.R.id.tab_discover:
arrayList.remove("discover");
break;
case com.vtosters.lite.R.id.tab_feedback:
arrayList.remove("feedback");
break;
case com.vtosters.lite.R.id.tab_messages:
arrayList.remove("messages");
break;
case com.vtosters.lite.R.id.tab_news:
arrayList.remove("news");
break;
}
}
try {
JSONArray jSONArray = new JSONArray();
for (int i = 0; i < arrayList.size(); i++) {
jSONArray.put(new JSONObject().put("name", arrayList.get(i)));
}
for (int i2 = 0; i2 < arr.length(); i2++) {
jSONArray.put(arr.getJSONObject(i2));
}
return jSONArray;
} catch (JSONException e) {
e.printStackTrace();
return arr;
}
}
public static int getItemCount() {
return sManager.getSelectedTabs().size();
}
public static boolean isDockOpenAllowed(FragmentImpl fragment) {
return isDockOpenAllowed(fragment.getClass());
}
public static boolean isDockOpenAllowed(Class<?> cls) {
for (DockBarTab tab : sManager.getSelectedTabs())
if (tab.fragmentClass == cls)
return true;
for (DockBarTab tab : sManager.getDisabledTabs())
if (tab.fragmentClass == cls)
return true;
return false;
}
public static Class<?> interceptClick(int id) {
switch (id) {
case com.vtosters.lite.R.id.tab_news:
return NewsfeedFragment.class;
case com.vtosters.lite.R.id.tab_discover:
return DiscoverFeedFragment.class;
case com.vtosters.lite.R.id.tab_messages:
return DialogsFragment.class;
case com.vtosters.lite.R.id.tab_feedback:
return NotificationsFragment.class;
case com.vtosters.lite.R.id.tab_menu:
return MenuFragment.class;
case com.vtosters.lite.R.id.menu_friends:
return FriendsFragment.class;
case com.vtosters.lite.R.id.menu_groups:
return GroupsFragment.class;
case com.vtosters.lite.R.id.menu_photos:
return PhotosFragment.class;
case com.vtosters.lite.R.id.menu_audios:
return MusicFragment.class;
case com.vtosters.lite.R.id.menu_videos:
return VideosFragment.class;
case com.vtosters.lite.R.id.menu_lives:
return LivesPostListFragment.class;
case com.vtosters.lite.R.id.menu_games:
return GamesFragment.class;
case com.vtosters.lite.R.id.menu_fave:
return FriendsFragment.class; //!
case com.vtosters.lite.R.id.menu_documents:
return DocumentsViewFragment.class;
case com.vtosters.lite.R.id.menu_payments:
return MoneyTransfersFragment.class;
case com.vtosters.lite.R.id.menu_vk_apps:
return AppsFragment.class;
default:
return AppsFragment.class;
}
}
}
@@ -56,6 +56,7 @@ import java.util.Locale;
import java.util.Scanner;
import kotlin.jvm.internal.Intrinsics;
import ru.vtosters.lite.ui.fragments.dockbar.DockBarManager;
public class Prefs {
public static String VERSIONNAME = "2.0 DEV";
@@ -748,7 +749,8 @@ public class Prefs {
}
public static Class getStartFragment() {
String string = ru.vtosters.lite.utils.Helper.GetPreferences().getString("start_value", "");
return DockBarManager.getInstance().getSelectedTabs().get(0).fragmentClass;
/*String string = ru.vtosters.lite.utils.Helper.GetPreferences().getString("start_value", "");
if (string.equals("newsfeed")) {
return Feed2049.b.c();
}
@@ -803,7 +805,7 @@ public class Prefs {
if (string.equals("docs")) {
return DocumentsViewFragment.class;
}
return string.equals("brtd") ? BirthdaysFragment.class : Feed2049.b.c();
return string.equals("brtd") ? BirthdaysFragment.class : Feed2049.b.c();*/
}
public static Context BaseContextLocale(Context context) {
@@ -25,7 +25,11 @@
add-int/lit8 v0, v0, 0x1
const/4 v1, 0x5
invoke-static {}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->getItemCount()I
move-result v1
#const/4 v1, 0x5
if-le v0, v1, :cond_0
@@ -55,6 +55,10 @@
if-eqz v0, :cond_1
invoke-static {v0}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->injectMenuJSON(Lorg/json/JSONArray;)Lorg/json/JSONArray;
move-result-object v0
.line 38
new-instance v3, Ljava/util/ArrayList;
@@ -835,35 +835,31 @@
invoke-virtual {v0, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
new-instance v5, Lcom/vtosters/lite/fragments/SettingsListFragment$a;
const v6, 0x7f0808cb
new-instance v5, Lcom/vtosters/lite/fragments/SettingsListFragment$a;
iget-object v7, p0, Lcom/vtosters/lite/fragments/SettingsListFragment$b;->a:Lcom/vtosters/lite/fragments/SettingsListFragment;
const v6, 0x7f0808cb
invoke-static {v7}, Lcom/vtosters/lite/fragments/SettingsListFragment;->a(Lcom/vtosters/lite/fragments/SettingsListFragment;)I
iget-object v7, p0, Lcom/vtosters/lite/fragments/SettingsListFragment$b;->a:Lcom/vtosters/lite/fragments/SettingsListFragment;
move-result v7
invoke-static {v7}, Lcom/vtosters/lite/fragments/SettingsListFragment;->a(Lcom/vtosters/lite/fragments/SettingsListFragment;)I
const v8, 0x7f110fea
move-result v7
invoke-static {v8}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
const v8, 0x7f110fea
move-result-object v8
invoke-static {v8}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
const-class v9, Lru/vtosters/lite/ui/fragments/dockbar/DockBarFragment;
move-result-object v8
invoke-direct {v5, v6, v7, v8, v9}, Lcom/vtosters/lite/fragments/SettingsListFragment$a;-><init>(IILjava/lang/Object;Ljava/lang/Class;)V
const-class v9, Lru/vtosters/lite/ui/fragments/dockbar/DockBarEditFragment;
invoke-direct {v5, v6, v7, v8, v9}, Lcom/vtosters/lite/fragments/SettingsListFragment$a;-><init>(IILjava/lang/Object;Ljava/lang/Class;)V
invoke-static {v4, v5}, Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;->a(ILjava/lang/Object;)Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;
move-result-object v5
invoke-virtual {v0, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
invoke-static {v4, v5}, Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;->a(ILjava/lang/Object;)Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;
move-result-object v5
invoke-virtual {v0, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
new-instance v5, Lcom/vtosters/lite/fragments/SettingsListFragment$a;
@@ -288,6 +288,15 @@
.method public final a(Ljava/lang/String;)I
.locals 1
invoke-static {p1}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->injectId(Ljava/lang/String;)I
move-result v0
if-eqz v0, :cond_exterminatus
return v0
:cond_exterminatus
const-string v0, "key"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
@@ -1281,6 +1281,8 @@
invoke-virtual {v1, v5, v6}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V
invoke-static {v6}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->injectMenuFragment(Landroid/view/Menu;)V
.line 145
invoke-direct {p0, p1}, Lcom/vk/menu/MenuFragment;->a(Landroid/support/v7/view/menu/MenuBuilder;)Ljava/util/List;
@@ -236,6 +236,10 @@
move-result-object v0
invoke-static {}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->injectMap()Ljava/util/Map;
move-result-object v0
sput-object v0, Lcom/vk/navigation/NavigationDelegateBottom;->z:Ljava/util/Map;
return-void
@@ -520,6 +524,8 @@
iput-object v2, p0, Lcom/vk/navigation/NavigationDelegateBottom;->f:Lcom/vtosters/lite/ui/bottomnavigation/BottomNavigationView;
invoke-static {v2}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->inject(Lcom/vtosters/lite/ui/bottomnavigation/BottomNavigationView;)V
.line 439
invoke-virtual {p0}, Lcom/vk/navigation/NavigationDelegateBottom;->m()Landroid/app/Activity;
@@ -845,14 +851,24 @@
.line 520
:catch_0
sget-object v0, Lcom/vk/analytics/eventtracking/VkTracker;->b:Lcom/vk/analytics/eventtracking/VkTracker;
#sget-object v0, Lcom/vk/analytics/eventtracking/VkTracker;->b:Lcom/vk/analytics/eventtracking/VkTracker;
const-string v2, "ERROR.IM.IPC_REDIRECT_FAILED"
#const-string v2, "ERROR.IM.IPC_REDIRECT_FAILED"
invoke-virtual {v0, v2}, Lcom/vk/analytics/eventtracking/VkTracker;->a(Ljava/lang/String;)V
#invoke-virtual {v0, v2}, Lcom/vk/analytics/eventtracking/VkTracker;->a(Ljava/lang/String;)V
.line 522
:cond_0
invoke-static {p1}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->interceptClick(I)Ljava/lang/Class;
move-result-object p1
const/4 v2, 0x0
const/4 v0, 0x0
goto :goto_0
invoke-static {p1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
@@ -1413,6 +1429,12 @@
.method private final d(Lcom/vk/core/fragments/FragmentImpl;)Z
.locals 1
invoke-static {p1}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->isDockOpenAllowed(Lcom/vk/core/fragments/FragmentImpl;)Z
move-result v0
return v0
.line 686
sget-object v0, Lcom/vk/navigation/NavigationDelegateBottom;->z:Ljava/util/Map;
@@ -2646,6 +2668,21 @@
.method public a(Lcom/vk/core/fragments/FragmentImpl;)Z
.locals 1
invoke-static {p1}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->isDockOpenAllowed(Lcom/vk/core/fragments/FragmentImpl;)Z
move-result p1
if-nez p1, :cond_0
const/4 p1, 0x1
return p1
:cond_0
const/4 p1, 0x0
return p1
const-string v0, "fragment"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
@@ -61,7 +61,9 @@
.line 32
new-instance v0, Landroid/support/v4/f/Pools$c;
const/4 v1, 0x5
invoke-static {}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->getItemCount()I
move-result v1
invoke-direct {v0, v1}, Landroid/support/v4/f/Pools$c;-><init>(I)V
@@ -186,7 +188,9 @@
iput-object p1, p0, Lcom/vtosters/lite/ui/bottomnavigation/BottomNavigationMenuView;->f:Landroid/view/View$OnClickListener;
const/4 p1, 0x5
invoke-static {}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->getItemCount()I
move-result v1
.line 73
new-array p1, p1, [I
@@ -772,6 +772,12 @@
.method public getMaxItemCount()I
.locals 1
invoke-static {}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->getItemCount()I
move-result v0
return v0
const/4 v0, 0x5
return v0
@@ -132,6 +132,12 @@
.method public getMaxItemCount()I
.locals 1
invoke-static {}, Lru/vtosters/lite/ui/fragments/dockbar/DockBarInjector;->getItemCount()I
move-result v0
return v0
const/4 v0, 0x5
return v0