add dockbar injector

This commit is contained in:
Vologhat
2022-04-02 22:00:03 +03:00
parent f5382e9649
commit 85415ae7fc
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) {