This commit is contained in:
gdlbo
2022-07-11 21:11:17 +03:00
parent 7d85d61eb5
commit 0330b8ad8e
8 changed files with 87 additions and 81 deletions
@@ -1,6 +1,6 @@
package ru.vtosters.lite.ui.fragments.dockbar;
public class AdapterHelper {
public class AdapterHelper{
// Adapter item types
public static final int TAB_TYPE = 1;
@@ -12,19 +12,19 @@ public class AdapterHelper {
private static final DockBarManager sManager = DockBarManager.getInstance();
public static int getItemViewType(int i) {
public static int getItemViewType(int i){
return i == 0 || sManager.getSelectedTabs().size() + 1 == i ? CATEGORY_TITLE_TYPE : TAB_TYPE;
}
public static int getTabType(int i) {
public static int getTabType(int i){
return i <= sManager.getSelectedTabs().size() ? SELECTED : DISABLED;
}
public static boolean needTransfer(int from, int to) {
public static boolean needTransfer(int from, int to){
return getItemViewType(from) == TAB_TYPE && getItemViewType(to) == CATEGORY_TITLE_TYPE;
}
public static int getItemCount() {
public static int getItemCount(){
return sManager.getCategoryTitles().size()
+ sManager.getSelectedTabs().size()
+ sManager.getDisabledTabs().size();
@@ -17,25 +17,23 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import ru.vtosters.lite.utils.Themes;
public class DockBarEditorAdapter extends RecyclerView.Adapter<DockBarEditorAdapter.ItemViewHolder>
implements IItemTouchHelper {
implements IItemTouchHelper{
private final DockBarManager mDockBarManager = DockBarManager.getInstance();
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
FrameLayout container = new FrameLayout(getContext());
container.addView(newGroupTitle(), new FrameLayout.LayoutParams(-1, -2));
container.addView(newTabItem(), new FrameLayout.LayoutParams(-1, -2));
return new ItemViewHolder(container);
}
private View newTabItem() {
private View newTabItem(){
LinearLayout container = new LinearLayout(getContext());
container.setTag("tab_container");
container.setGravity(Gravity.CENTER_VERTICAL);
@@ -70,7 +68,7 @@ public class DockBarEditorAdapter extends RecyclerView.Adapter<DockBarEditorAdap
return container;
}
private View newGroupTitle() {
private View newGroupTitle(){
LinearLayout container = new LinearLayout(getContext());
container.setTag("category_title_container");
container.setLayoutParams(new LinearLayout.LayoutParams(-1, -2));
@@ -93,22 +91,22 @@ public class DockBarEditorAdapter extends RecyclerView.Adapter<DockBarEditorAdap
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
public void onBindViewHolder(ItemViewHolder holder, int position){
holder.bind(position);
}
@Override
public int getItemCount() {
public int getItemCount(){
return AdapterHelper.getItemCount();
}
@Override
public void onItemDismiss(int index) {
public void onItemDismiss(int index){
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
public boolean onItemMove(int fromPosition, int toPosition){
if (toPosition == 0)
return false;
@@ -147,16 +145,16 @@ public class DockBarEditorAdapter extends RecyclerView.Adapter<DockBarEditorAdap
return true;
}
protected class ItemViewHolder extends RecyclerView.ViewHolder {
protected class ItemViewHolder extends RecyclerView.ViewHolder{
private LinearLayout mTabContainer;
private ImageView mTabIcon;
private TextView mTabName;
private final LinearLayout mTabContainer;
private final ImageView mTabIcon;
private final TextView mTabName;
private LinearLayout mCategoryTitleContainer;
private TextView mCategoryTitle;
private final LinearLayout mCategoryTitleContainer;
private final TextView mCategoryTitle;
public ItemViewHolder(View itemView) {
public ItemViewHolder(View itemView){
super(itemView);
mTabContainer = itemView.findViewWithTag("tab_container");
@@ -168,8 +166,8 @@ public class DockBarEditorAdapter extends RecyclerView.Adapter<DockBarEditorAdap
mCategoryTitle = mCategoryTitleContainer.findViewWithTag("category_title");
}
public void bind(int pos) {
Log.d("ItemViewHolder", pos+"");
public void bind(int pos){
Log.d("ItemViewHolder", pos + "");
if (AdapterHelper.getItemViewType(pos) == AdapterHelper.TAB_TYPE) {
DockBarTab tab = AdapterHelper.getTabType(pos) == AdapterHelper.SELECTED
? mDockBarManager.getSelectedTabs().get(pos - 1)
@@ -21,7 +21,7 @@ import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
import ru.vtosters.lite.utils.Globals;
public class DockBarEditorFragment extends MaterialPreferenceToolbarFragment {
public class DockBarEditorFragment extends MaterialPreferenceToolbarFragment{
private RecyclerView mRecycler;
private DockBarEditorAdapter mAdapter;
@@ -29,7 +29,7 @@ public class DockBarEditorFragment extends MaterialPreferenceToolbarFragment {
private ItemTouchHelper mItemTouchHelper;
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle){
super.onCreateView(layoutInflater, viewGroup, bundle);
LinearLayout container = new LinearLayout(getContext());
@@ -1,6 +1,15 @@
package ru.vtosters.lite.ui.fragments.dockbar;
import static com.vtosters.lite.R.id.*;
import static com.vtosters.lite.R.id.menu_feedback;
import static com.vtosters.lite.R.id.menu_messages;
import static com.vtosters.lite.R.id.menu_newsfeed;
import static com.vtosters.lite.R.id.menu_search;
import static com.vtosters.lite.R.id.menu_vk_pay;
import static com.vtosters.lite.R.id.tab_discover;
import static com.vtosters.lite.R.id.tab_feedback;
import static com.vtosters.lite.R.id.tab_menu;
import static com.vtosters.lite.R.id.tab_messages;
import static com.vtosters.lite.R.id.tab_news;
import static ru.vtosters.lite.utils.Globals.getResources;
import android.content.res.ColorStateList;
@@ -12,7 +21,6 @@ import android.view.MenuItem;
import com.vk.apps.AppsFragment;
import com.vk.core.drawable.RecoloredDrawable;
import com.vk.core.fragments.FragmentImpl;
import com.vk.navigation.NavigationDelegateBottom;
import com.vk.navigation.right.RightMenu;
import com.vtosters.lite.ui.bottomnavigation.BottomNavigationMenuView;
import com.vtosters.lite.ui.bottomnavigation.BottomNavigationView;
@@ -35,7 +43,7 @@ public class DockBarInjector{
public static Map<Class<? extends FragmentImpl>, Integer> injectMap(){
LinkedHashMap<Class<? extends FragmentImpl>, Integer> map = new LinkedHashMap<>();
for(DockBarTab tab : sManager.getSelectedTabs()) {
for (DockBarTab tab : sManager.getSelectedTabs()) {
map.put(tab.fragmentClass, tab.id);
}
return map;
@@ -52,7 +60,7 @@ public class DockBarInjector{
Class<?> synchronisedPoolCls = Class.forName("androidx.core.util.Pools$SynchronizedPool");
Method acquire = synchronisedPoolCls.getDeclaredMethod("acquire");
if(synchronizedPool != null){
if (synchronizedPool != null) {
do {
} while(acquire.invoke(synchronizedPool) != null);
}
@@ -61,16 +69,16 @@ public class DockBarInjector{
e.printStackTrace();
}
for(DockBarTab tab : sManager.getSelectedTabs()) {
for (DockBarTab tab : sManager.getSelectedTabs()) {
MenuItem add = menu.add(0, tab.id, 0, tab.titleID);
Drawable drawable = getResources().getDrawable(tab.iconID);
ColorStateList dockcolors = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_checked},
new int[]{-android.R.attr.state_checked}
new int[][] {
new int[] {android.R.attr.state_checked},
new int[] {-android.R.attr.state_checked}
},
new int[]{
new int[] {
Color.parseColor("#ff528bcc"),
Color.parseColor("#ffaaaeb3")
}
@@ -83,8 +91,8 @@ public class DockBarInjector{
}
public static int injectId(String tag){
for(DockBarTab tab : sManager.getSelectedTabs()) {
if(tag.equals(tab.tag))
for (DockBarTab tab : sManager.getSelectedTabs()) {
if (tag.equals(tab.tag))
return tab.id;
}
return 0;
@@ -92,21 +100,21 @@ public class DockBarInjector{
public static void injectMenuFragment(Menu menu){
List<MenuItem> menuItems = new ArrayList<>();
for(int i = 0; i < menu.size(); i++) {
for (int i = 0; i < menu.size(); i++) {
menuItems.add(menu.getItem(i));
}
menu.clear();
for(DockBarTab tab : sManager.getSelectedTabs()) {
if(tab.id != tab_menu){
for (DockBarTab tab : sManager.getSelectedTabs()) {
if (tab.id != tab_menu) {
int itemId = tab.id;
if(tab.id == tab_news){
if (tab.id == tab_news) {
itemId = menu_newsfeed;
} else if(tab.id == tab_discover){
} else if (tab.id == tab_discover) {
itemId = menu_search;
} else if(tab.id == tab_feedback){
} else if (tab.id == tab_feedback) {
itemId = menu_feedback;
} else if(tab.id == tab_messages){
} else if (tab.id == tab_messages) {
itemId = menu_messages;
}
@@ -116,33 +124,33 @@ public class DockBarInjector{
}
}
for(MenuItem menuItem : menuItems) {
for (MenuItem menuItem : menuItems) {
MenuItem item = menu.add(menuItem.getGroupId(), menuItem.getItemId(), menuItem.getOrder(), menuItem.getTitle());
item.setIcon(menuItem.getIcon());
}
menuItems.clear();
for(int i = 0; i < menu.size(); i++) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
for(DockBarTab tab : sManager.getSelectedTabs()) {
for (DockBarTab tab : sManager.getSelectedTabs()) {
int itemId = menuItem.getItemId();
if(itemId == menu_newsfeed){
if (itemId == menu_newsfeed) {
itemId = tab_news;
} else if(itemId == menu_search){
} else if (itemId == menu_search) {
itemId = tab_discover;
} else if(itemId == menu_feedback){
} else if (itemId == menu_feedback) {
itemId = tab_feedback;
} else if(itemId == menu_messages){
} else if (itemId == menu_messages) {
itemId = tab_messages;
}
if(itemId == tab.id && tab.id != menu_vk_pay){
if (itemId == tab.id && tab.id != menu_vk_pay) {
menuItems.add(menuItem);
break;
}
}
}
for(MenuItem menuItem : menuItems) {
for (MenuItem menuItem : menuItems) {
menu.removeItem(menuItem.getItemId());
}
}
@@ -154,23 +162,23 @@ public class DockBarInjector{
"feedback",
"discover"
));
for(DockBarTab tab : sManager.getSelectedTabs()) {
if(tab.id == tab_discover){
for (DockBarTab tab : sManager.getSelectedTabs()) {
if (tab.id == tab_discover) {
arrayList.remove("discover");
} else if(tab.id == tab_feedback){
} else if (tab.id == tab_feedback) {
arrayList.remove("feedback");
} else if(tab.id == tab_messages){
} else if (tab.id == tab_messages) {
arrayList.remove("messages");
} else if(tab.id == tab_news){
} else if (tab.id == tab_news) {
arrayList.remove("news");
}
}
try {
JSONArray jSONArray = new JSONArray();
for(int i = 0; i < arrayList.size(); i++) {
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++) {
for (int i2 = 0; i2 < arr.length(); i2++) {
jSONArray.put(arr.getJSONObject(i2));
}
return jSONArray;
@@ -189,26 +197,26 @@ public class DockBarInjector{
}
public static boolean isDockOpenAllowed(Class<?> cls){
for(DockBarTab tab : sManager.getSelectedTabs())
if(tab.fragmentClass == cls)
for (DockBarTab tab : sManager.getSelectedTabs())
if (tab.fragmentClass == cls)
return true;
for(DockBarTab tab : sManager.getDisabledTabs())
if(tab.fragmentClass == cls)
for (DockBarTab tab : sManager.getDisabledTabs())
if (tab.fragmentClass == cls)
return true;
return false;
}
public static Class<?> interceptClick(int id, RightMenu rightMenu){
if(id == tab_menu){
if (id == tab_menu) {
rightMenu.a();
}
for(DockBarTab tab : sManager.getSelectedTabs()) {
if(id == tab.id)
for (DockBarTab tab : sManager.getSelectedTabs()) {
if (id == tab.id)
return tab.fragmentClass;
}
for(DockBarTab tab : sManager.getDisabledTabs()) {
if(id == tab.id)
for (DockBarTab tab : sManager.getDisabledTabs()) {
if (id == tab.id)
return tab.fragmentClass;
}
@@ -69,7 +69,7 @@ public class DockBarManager{
private void init(){
mConfig = new File(getContext().getFilesDir(), "dockbar.json");
if(mConfig.exists()){
if (mConfig.exists()) {
readFromConfig();
} else {
fillDefault();
@@ -88,7 +88,7 @@ public class DockBarManager{
}
private void fillList(List<DockBarTab> list, JSONArray array) throws JSONException, ClassNotFoundException{
for(int i = 0; i < array.length(); i++) {
for (int i = 0; i < array.length(); i++) {
JSONObject item = array.getJSONObject(i);
DockBarTab tab = DockBarTab.valuesOf(
item.getString("tag"),
@@ -97,9 +97,9 @@ public class DockBarManager{
item.getInt("id"),
Class.forName(item.getString("fragmentClass"))
);
if(milkshake() && NewsfeedFragment.class == tab.fragmentClass){
if (milkshake() && NewsfeedFragment.class == tab.fragmentClass) {
tab.fragmentClass = HomeFragment.class;
} else if(!milkshake() && HomeFragment.class == tab.fragmentClass){
} else if (!milkshake() && HomeFragment.class == tab.fragmentClass) {
tab.fragmentClass = NewsfeedFragment.class;
}
list.add(tab);
@@ -107,14 +107,14 @@ public class DockBarManager{
}
private void fillDefault(){
if(vkme()){
if (vkme()) {
mSelectedTabs.add(DockBarTab.valuesOf(
"tab_settings",
R.drawable.ic_settings_outline_28,
R.string.menu_settings,
R.id.menu_settings,
useNewSettings()));
if(vkme_notifs())
if (vkme_notifs())
mSelectedTabs.add(DockBarTab.valuesOf(
"tab_feedback",
R.drawable.ic_menu_notification_outline_28,
@@ -279,7 +279,7 @@ public class DockBarManager{
private JSONArray makeJsonArrayWithTabs(List<DockBarTab> list) throws JSONException{
JSONArray array = new JSONArray();
for(DockBarTab tab : list) {
for (DockBarTab tab : list) {
JSONObject item = new JSONObject()
.put("tag", tab.tag)
.put("iconID", tab.iconID)
@@ -2,7 +2,7 @@ package ru.vtosters.lite.ui.fragments.dockbar;
import com.vk.core.fragments.FragmentImpl;
public class DockBarTab {
public class DockBarTab{
public String tag;
public int iconID;
@@ -15,7 +15,7 @@ public class DockBarTab {
int iconID,
int titleID,
int resID,
Class<?> fragmentClass) {
Class<?> fragmentClass){
this.tag = tag;
this.iconID = iconID;
this.titleID = titleID;
@@ -28,7 +28,7 @@ public class DockBarTab {
int iconID,
int titleID,
int resID,
Class<?> fragmentClass) {
Class<?> fragmentClass){
return new DockBarTab(tag, iconID, titleID, resID, fragmentClass);
}
}
@@ -1,6 +1,6 @@
package ru.vtosters.lite.ui.fragments.dockbar;
public interface IItemTouchHelper {
public interface IItemTouchHelper{
void onItemDismiss(int index);
@@ -5,7 +5,7 @@ import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback{
private final DockBarEditorAdapter mAdapter;