add dockbar injector
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user