From 919d7cb19dcc12817a8433559417112c41e9d87f Mon Sep 17 00:00:00 2001 From: Vologhat <47892605+Vologhat@users.noreply.github.com> Date: Sun, 1 Jan 2023 15:06:55 +0300 Subject: [PATCH] refactor CategorizedAdapter, DockBarEditor, SuperAppEditor --- .../lite/ui/adapters/CategorizedAdapter.java | 156 ++++++++---------- .../lite/ui/adapters/StickerPackAdapter.java | 12 +- .../ui/components/DockBarEditorManager.java | 71 ++++---- .../ui/fragments/DockBarEditorFragment.java | 32 ++-- .../ui/fragments/SuperAppEditorFragment.java | 61 +++---- 5 files changed, 146 insertions(+), 186 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java b/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java index 6b9657516..3581f748a 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java +++ b/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java @@ -1,8 +1,5 @@ package ru.vtosters.lite.ui.adapters; -import static ru.vtosters.lite.utils.AndroidUtils.dp2px; -import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; - import android.content.res.ColorStateList; import android.graphics.Typeface; import android.view.Gravity; @@ -12,20 +9,21 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; - import com.vtosters.lite.R; +import ru.vtosters.lite.ui.components.IItemMovingListener; +import ru.vtosters.lite.utils.LayoutUtils; +import ru.vtosters.lite.utils.ThemesUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import ru.vtosters.lite.ui.components.IItemMovingListener; -import ru.vtosters.lite.utils.ThemesUtils; +import static ru.vtosters.lite.utils.AndroidUtils.dp2px; +import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -public class CategorizedAdapter extends RecyclerView.Adapter implements IItemMovingListener { +public class CategorizedAdapter< T > extends RecyclerView.Adapter< CategorizedAdapter.CategorizedViewHolder > implements IItemMovingListener { // Adapter item types public static final int MOVING_ITEM = -0x1; @@ -35,18 +33,20 @@ public class CategorizedAdapter extends RecyclerView.Adapter mSelectedItems; + private final List< T > mDisabledItems; + private final List< T > mUnmovedItems; private final IViewHolderBinder mBinder; + // Min and max counts private int mMinSelectedItems = -1; private int mMaxSelectedItems = -1; - public CategorizedAdapter(List selectedItems, List disabledItems, IViewHolderBinder binder) { + public CategorizedAdapter(List< T > selectedItems, List< T > disabledItems, IViewHolderBinder binder) { this.mSelectedItems = selectedItems; this.mDisabledItems = disabledItems; - this.mUnmovedItems = new ArrayList(); + this.mUnmovedItems = new ArrayList<>(); this.mBinder = binder; } @@ -55,7 +55,7 @@ public class CategorizedAdapter extends RecyclerView.Adapter ALL_TAGS = Arrays.asList( + "tab_news", "tab_superapps", "tab_messages", "tab_feedback", "tab_profile", + "tab_friends", "tab_groups", "tab_photos", "tab_audios", "tab_videos", + "tab_lives", "tab_games", "tab_liked", "tab_fave", "tab_documents", + "tab_payments", "tab_vk_apps", "tab_settings"); + private static DockBarEditorManager sInstance; - private final List mSelectedTabs = new ArrayList<>(); - private final List mDisabledTabs = new ArrayList<>(); + private final List< DockBarTab > mSelectedTabs = new ArrayList<>(); + private final List< DockBarTab > mDisabledTabs = new ArrayList<>(); public DockBarEditorManager() { init(); @@ -62,10 +61,10 @@ public class DockBarEditorManager { } private void init() { - if (vkme()) { + if(vkme()) { mSelectedTabs.add(getTabByTag("tab_settings")); - if (vkme_notifs()) { - if (milkshake()) { + if(vkme_notifs()) { + if(milkshake()) { mSelectedTabs.add(getTabByTag("tab_feedback")); } else { mSelectedTabs.add(getTabByTag("tab_friends")); @@ -78,44 +77,36 @@ public class DockBarEditorManager { checkOldConfig(); - String[] selectedTabsTags = getPreferences().getString("dockbar_tabs", "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") + var selectedTabsTags = getPreferences() + .getString("dockbar_tabs", + "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") .split(","); parseSelectedTabs(selectedTabsTags); } private void checkOldConfig() { File config = new File(getGlobalContext().getFilesDir(), "dockbar.json"); - if (config.exists()) config.deleteOnExit(); + if(config.exists()) config.deleteOnExit(); } private void parseSelectedTabs(String[] selectedTabsTags) { - List allTags = new ArrayList<>(Arrays.asList("tab_news", "tab_superapps", "tab_messages", "tab_feedback", "tab_profile", - "tab_friends", "tab_groups", "tab_photos", "tab_audios", "tab_videos", "tab_lives", "tab_games", "tab_liked", - "tab_fave", "tab_documents", "tab_payments", "tab_vk_apps", "tab_settings")); + var allTags = new ArrayList<>(ALL_TAGS); - for (String tag : selectedTabsTags) { + for(String tag : selectedTabsTags) { mSelectedTabs.add(getTabByTag(tag)); allTags.remove(tag); } - for (String tag : allTags) { + for(String tag : allTags) { mDisabledTabs.add(getTabByTag(tag)); } } public void save() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - getPreferences().edit().putString("dockbar_tabs", mSelectedTabs.stream() - .map(tab -> tab.tag) - .collect(Collectors.joining(","))) - .commit(); - } else { - StringBuilder sb = new StringBuilder(); - for (DockBarTab tab : mSelectedTabs) { - sb.append(tab.tag).append(","); - } - getPreferences().edit().putString("dockbar_tabs", sb.toString()).commit(); - } + var sb = new StringBuilder(); + for(DockBarTab tab : mSelectedTabs) + sb.append(tab.tag).append(","); + getPreferences().edit().putString("dockbar_tabs", sb.toString()).commit(); } public void reset() { @@ -125,16 +116,16 @@ public class DockBarEditorManager { .commit(); } - public List getSelectedTabs() { + public List< DockBarTab > getSelectedTabs() { return mSelectedTabs; } - public List getDisabledTabs() { + public List< DockBarTab > getDisabledTabs() { return mDisabledTabs; } private DockBarTab getTabByTag(String tag) { - switch (tag) { + switch(tag) { case "tab_news": return DockBarTab.valuesOf( "tab_news", diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java index 09b008417..d372d9f6b 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java @@ -25,6 +25,7 @@ import ru.vtosters.lite.themes.hooks.TextViewHook; import ru.vtosters.lite.ui.adapters.CategorizedAdapter; import ru.vtosters.lite.ui.components.DockBarEditorManager; import ru.vtosters.lite.ui.components.ItemMovingCallback; +import ru.vtosters.lite.utils.LayoutUtils; public class DockBarEditorFragment extends BaseToolbarFragment { @@ -33,38 +34,40 @@ public class DockBarEditorFragment extends BaseToolbarFragment { public View onCreateContent(@NonNull LayoutInflater inflater, @Nullable Bundle bundle) { setTitle(R.string.dockbar_editor); - FrameLayout content = new FrameLayout(getContext()); + var content = new FrameLayout(getContext()); - LinearLayout container = new LinearLayout(getContext()); + var container = new LinearLayout(getContext()); container.setOrientation(LinearLayout.VERTICAL); - content.addView(container, new FrameLayout.LayoutParams(-1, -1)); + content.addView(container, LayoutUtils.createFrame(-1, -1)); - LinearLayout buttonsContainer = new LinearLayout(getContext()); + var buttonsContainer = new LinearLayout(getContext()); buttonsContainer.setPadding( dp2px(13), dp2px(10), dp2px(13), dp2px(10) ); - container.addView(buttonsContainer, new LinearLayout.LayoutParams(-1, -2)); + container.addView(buttonsContainer, LayoutUtils.createLinear(-1, -2)); - TextView save = new TextView(new ContextThemeWrapper(getContext(), R.style.VKUIButton_Primary)); + var manager = DockBarEditorManager.getInstance(); + + var save = new TextView(new ContextThemeWrapper(getContext(), R.style.VKUIButton_Primary)); save.setText(requireContext().getString(R.string.save)); save.setOnClickListener(v -> { - DockBarEditorManager.getInstance().save(); + manager.save(); restartApplication(); }); new TextViewHook().inject(save, 0, false); - LinearLayout.LayoutParams saveParams = new LinearLayout.LayoutParams(0, -2); + var saveParams = LayoutUtils.createLinear(0, -2); saveParams.weight = 1.0f; buttonsContainer.addView(save, saveParams); - View divider = new View(getContext()); - buttonsContainer.addView(divider, new LinearLayout.LayoutParams(dp2px(10), 0)); + var divider = new View(getContext()); + buttonsContainer.addView(divider, LayoutUtils.createLinear(dp2px(10), 0)); - TextView reset = new TextView(new ContextThemeWrapper(getContext(), R.style.VKUIButton_Primary)); + var reset = new TextView(new ContextThemeWrapper(getContext(), R.style.VKUIButton_Primary)); reset.setText(requireContext().getString(R.string.reset)); reset.setOnClickListener(v -> { DockBarEditorManager.getInstance().reset(); @@ -73,12 +76,11 @@ public class DockBarEditorFragment extends BaseToolbarFragment { new TextViewHook().inject(reset, 0, false); - LinearLayout.LayoutParams resetParams = new LinearLayout.LayoutParams(0, -2); + var resetParams = LayoutUtils.createLinear(0, -2); resetParams.weight = 1.0f; buttonsContainer.addView(reset, resetParams); - DockBarEditorManager manager = DockBarEditorManager.getInstance(); - var adapter = new CategorizedAdapter(manager.getSelectedTabs(), manager.getDisabledTabs(), (holder, pos) -> { + var adapter = new CategorizedAdapter<>(manager.getSelectedTabs(), manager.getDisabledTabs(), (holder, pos) -> { var tab = pos <= manager.getSelectedTabs().size() ? manager.getSelectedTabs().get(pos - 1) : manager.getDisabledTabs().get(pos - manager.getSelectedTabs().size() - 2); @@ -90,7 +92,7 @@ public class DockBarEditorFragment extends BaseToolbarFragment { recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); recyclerView.setHasFixedSize(true); - var params = new LinearLayout.LayoutParams(-1, -1); + var params = LayoutUtils.createLinear(-1, -1); params.gravity = Gravity.CENTER; container.addView(recyclerView, params); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/SuperAppEditorFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/SuperAppEditorFragment.java index c901d3b87..d22bf8662 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/SuperAppEditorFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/SuperAppEditorFragment.java @@ -1,9 +1,5 @@ package ru.vtosters.lite.ui.fragments; -import static ru.vtosters.lite.utils.AndroidUtils.dp2px; -import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication; - -import android.os.Build; import android.os.Bundle; import android.view.ContextThemeWrapper; import android.view.Gravity; @@ -12,16 +8,13 @@ import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; - import androidx.annotation.CallSuper; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; - import com.vtosters.lite.R; - import ru.vtosters.lite.themes.hooks.TextViewHook; import ru.vtosters.lite.ui.adapters.CategorizedAdapter; import ru.vtosters.lite.ui.components.ItemMovingCallback; @@ -29,6 +22,9 @@ import ru.vtosters.lite.ui.components.SuperAppEditorManager; import ru.vtosters.lite.utils.LayoutUtils; import ru.vtosters.lite.utils.ThemesUtils; +import static ru.vtosters.lite.utils.AndroidUtils.dp2px; +import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication; + public class SuperAppEditorFragment extends BaseToolbarFragment { @CallSuper @@ -36,13 +32,13 @@ public class SuperAppEditorFragment extends BaseToolbarFragment { public View onCreateContent(@NonNull LayoutInflater inflater, @Nullable Bundle bundle) { setTitle(R.string.superapp_editor); - FrameLayout content = new FrameLayout(getContext()); + var content = new FrameLayout(getContext()); - LinearLayout container = new LinearLayout(getContext()); + var container = new LinearLayout(getContext()); container.setOrientation(LinearLayout.VERTICAL); - content.addView(container, new FrameLayout.LayoutParams(-1, -1)); + content.addView(container, LayoutUtils.createFrame(-1, -1)); - TextView message = new TextView(getContext()); + var message = new TextView(getContext()); message.setText(R.string.superapp_editor_message); message.setTextSize(16.0f); message.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); @@ -55,7 +51,7 @@ public class SuperAppEditorFragment extends BaseToolbarFragment { ); container.addView(message, LayoutUtils.createLinear(-1, -2)); - LinearLayout buttonsContainer = new LinearLayout(getContext()); + var buttonsContainer = new LinearLayout(getContext()); buttonsContainer.setPadding( dp2px(13), dp2px(10), @@ -64,7 +60,7 @@ public class SuperAppEditorFragment extends BaseToolbarFragment { ); container.addView(buttonsContainer, new LinearLayout.LayoutParams(-1, -2)); - TextView save = new TextView(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.VKUIButton_Primary)); + var save = new TextView(new ContextThemeWrapper(getContext(), R.style.VKUIButton_Primary)); save.setText(R.string.save); save.setOnClickListener(v -> { SuperAppEditorManager.getInstance().save(); @@ -73,14 +69,14 @@ public class SuperAppEditorFragment extends BaseToolbarFragment { new TextViewHook().inject(save, 0, false); - LinearLayout.LayoutParams saveParams = new LinearLayout.LayoutParams(0, -2); + var saveParams = LayoutUtils.createLinear(0, -2); saveParams.weight = 1.0f; buttonsContainer.addView(save, saveParams); - View divider = new View(getContext()); + var divider = new View(getContext()); buttonsContainer.addView(divider, new LinearLayout.LayoutParams(dp2px(10), 0)); - TextView reset = new TextView(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.VKUIButton_Primary)); + var reset = new TextView(new ContextThemeWrapper(getContext(), R.style.VKUIButton_Primary)); reset.setText(R.string.reset); reset.setOnClickListener(v -> { SuperAppEditorManager.getInstance().reset(); @@ -89,44 +85,31 @@ public class SuperAppEditorFragment extends BaseToolbarFragment { new TextViewHook().inject(reset, 0, false); - LinearLayout.LayoutParams resetParams = new LinearLayout.LayoutParams(0, -2); + var resetParams = LayoutUtils.createLinear(0, -2); resetParams.weight = 1.0f; buttonsContainer.addView(reset, resetParams); - SuperAppEditorManager manager = SuperAppEditorManager.getInstance(); - var adapter = new CategorizedAdapter(manager.getSelectedTabs(), manager.getDisabledTabs(), (holder, pos) -> { + var manager = SuperAppEditorManager.getInstance(); + var adapter = new CategorizedAdapter<>(manager.getSelectedTabs(), manager.getDisabledTabs(), (holder, pos) -> { var item = pos <= manager.getSelectedTabs().size() ? manager.getSelectedTabs().get(pos - 1) : manager.getDisabledTabs().get(pos - manager.getSelectedTabs().size() - 2); holder.bindMovingItem(item.title); }); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - manager.getSelectedTabs().forEach(item -> { - if (item.type.equals("menu")) - adapter.addUnmovedItem(item); - }); - manager.getDisabledTabs().forEach(item -> { - if (item.type.equals("menu")) - adapter.addUnmovedItem(item); - }); - } else { - for (var item : manager.getSelectedTabs()) { - if (item.type.equals("menu")) - adapter.addUnmovedItem(item); - } + for(var item : manager.getSelectedTabs()) + if(item.type.equals("menu")) + adapter.addUnmovedItem(item); - for (var item : manager.getDisabledTabs()) { - if (item.type.equals("menu")) - adapter.addUnmovedItem(item); - } - } + for(var item : manager.getDisabledTabs()) + if(item.type.equals("menu")) + adapter.addUnmovedItem(item); var recyclerView = new RecyclerView(requireContext()); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); recyclerView.setHasFixedSize(true); - var params = new LinearLayout.LayoutParams(-1, -1); + var params = LayoutUtils.createLinear(-1, -1); params.gravity = Gravity.CENTER; container.addView(recyclerView, params);