Apply layout ordering to subpages
This commit is contained in:
@@ -48,6 +48,7 @@ public final class LayoutFragment extends Fragment {
|
|||||||
SharedPreferences prefs = requireContext()
|
SharedPreferences prefs = requireContext()
|
||||||
.getSharedPreferences(SbtSettings.PREFS_NAME, Context.MODE_PRIVATE);
|
.getSharedPreferences(SbtSettings.PREFS_NAME, Context.MODE_PRIVATE);
|
||||||
hideUnlockedSubpageObsoleteControls(root);
|
hideUnlockedSubpageObsoleteControls(root);
|
||||||
|
reorderItemCards(root, prefs);
|
||||||
|
|
||||||
SwitchMaterial enabledSwitch = root.findViewById(R.id.clock_enabled_switch);
|
SwitchMaterial enabledSwitch = root.findViewById(R.id.clock_enabled_switch);
|
||||||
enabledSwitch.setChecked(prefs.getBoolean(
|
enabledSwitch.setChecked(prefs.getBoolean(
|
||||||
@@ -274,7 +275,6 @@ public final class LayoutFragment extends Fragment {
|
|||||||
LinearLayout cardsParent = sourceCard != null && sourceCard.getParent() instanceof LinearLayout parent
|
LinearLayout cardsParent = sourceCard != null && sourceCard.getParent() instanceof LinearLayout parent
|
||||||
? parent
|
? parent
|
||||||
: null;
|
: null;
|
||||||
int sourceCardIndex = cardsParent != null ? cardsParent.indexOfChild(sourceCard) : -1;
|
|
||||||
String copyTag = "layout-copy-" + countKey;
|
String copyTag = "layout-copy-" + countKey;
|
||||||
|
|
||||||
LinearLayout countContainer = new LinearLayout(requireContext());
|
LinearLayout countContainer = new LinearLayout(requireContext());
|
||||||
@@ -286,6 +286,7 @@ public final class LayoutFragment extends Fragment {
|
|||||||
countContainer.removeAllViews();
|
countContainer.removeAllViews();
|
||||||
removeGeneratedCopyCards(cardsParent, copyTag);
|
removeGeneratedCopyCards(cardsParent, copyTag);
|
||||||
int count = iconContainerCount(prefs, countKey, countDefault, legacyEnabledKey, legacyEnabledDefault);
|
int count = iconContainerCount(prefs, countKey, countDefault, legacyEnabledKey, legacyEnabledDefault);
|
||||||
|
updateIconCardTitle(sourceCard, sectionTitleId, 0, count);
|
||||||
countContainer.addView(iconContainerCountControl(
|
countContainer.addView(iconContainerCountControl(
|
||||||
prefs,
|
prefs,
|
||||||
countKey,
|
countKey,
|
||||||
@@ -296,6 +297,7 @@ public final class LayoutFragment extends Fragment {
|
|||||||
rebuild[0].run();
|
rebuild[0].run();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
int sourceCardIndex = cardsParent != null ? cardsParent.indexOfChild(sourceCard) : -1;
|
||||||
if (cardsParent == null || sourceCardIndex < 0) {
|
if (cardsParent == null || sourceCardIndex < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -437,6 +439,71 @@ public final class LayoutFragment extends Fragment {
|
|||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void reorderItemCards(View root, SharedPreferences prefs) {
|
||||||
|
View clock = root.findViewById(R.id.layout_clock_card);
|
||||||
|
View chip = root.findViewById(R.id.layout_chip_card);
|
||||||
|
View status = root.findViewById(R.id.layout_status_card);
|
||||||
|
View notifications = root.findViewById(R.id.layout_notif_card);
|
||||||
|
if (!(clock != null
|
||||||
|
&& clock.getParent() instanceof LinearLayout parent
|
||||||
|
&& chip != null
|
||||||
|
&& status != null
|
||||||
|
&& notifications != null)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int insertIndex = minIndex(parent, clock, chip, status, notifications);
|
||||||
|
parent.removeView(clock);
|
||||||
|
parent.removeView(chip);
|
||||||
|
parent.removeView(status);
|
||||||
|
parent.removeView(notifications);
|
||||||
|
for (String key : LayoutOrderingUi.orderedKeys(prefs)) {
|
||||||
|
View card = cardForOrderKey(key, clock, chip, status, notifications);
|
||||||
|
if (card != null) {
|
||||||
|
parent.addView(card, Math.min(insertIndex++, parent.getChildCount()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int minIndex(LinearLayout parent, View... views) {
|
||||||
|
int result = parent.getChildCount();
|
||||||
|
for (View view : views) {
|
||||||
|
int index = parent.indexOfChild(view);
|
||||||
|
if (index >= 0) {
|
||||||
|
result = Math.min(result, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private View cardForOrderKey(String key, View clock, View chip, View status, View notifications) {
|
||||||
|
if ("clock".equals(key)) {
|
||||||
|
return clock;
|
||||||
|
}
|
||||||
|
if ("chip".equals(key)) {
|
||||||
|
return chip;
|
||||||
|
}
|
||||||
|
if ("status".equals(key)) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
if ("notifications".equals(key)) {
|
||||||
|
return notifications;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateIconCardTitle(@Nullable MaterialCardView card, int titleId, int index, int count) {
|
||||||
|
TextView title = findCardTitle(card);
|
||||||
|
if (title == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (count > 1) {
|
||||||
|
title.setText(getString(titleId) + " " + (index + 1));
|
||||||
|
} else {
|
||||||
|
title.setText(titleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private MaterialButton smallButton(String text) {
|
private MaterialButton smallButton(String text) {
|
||||||
MaterialButton button = new MaterialButton(requireContext(), null, com.google.android.material.R.attr.materialButtonOutlinedStyle);
|
MaterialButton button = new MaterialButton(requireContext(), null, com.google.android.material.R.attr.materialButtonOutlinedStyle);
|
||||||
button.setText(text);
|
button.setText(text);
|
||||||
|
|||||||
@@ -76,6 +76,13 @@ final class LayoutOrderingUi {
|
|||||||
return card(context, R.string.layout_ordering_title, content);
|
return card(context, R.string.layout_ordering_title, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ArrayList<String> orderedKeys(SharedPreferences prefs) {
|
||||||
|
String encoded = prefs != null
|
||||||
|
? prefs.getString(SbtSettings.KEY_LAYOUT_ITEM_ORDER, SbtDefaults.LAYOUT_ITEM_ORDER_DEFAULT)
|
||||||
|
: SbtDefaults.LAYOUT_ITEM_ORDER_DEFAULT;
|
||||||
|
return orderedKeysFromEncoded(encoded);
|
||||||
|
}
|
||||||
|
|
||||||
private static void bindOrderingList(Context context, SharedPreferences prefs, RecyclerView list) {
|
private static void bindOrderingList(Context context, SharedPreferences prefs, RecyclerView list) {
|
||||||
ArrayList<OrderingItem> items = parseOrderingItems(
|
ArrayList<OrderingItem> items = parseOrderingItems(
|
||||||
context,
|
context,
|
||||||
@@ -126,18 +133,38 @@ final class LayoutOrderingUi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ArrayList<OrderingItem> parseOrderingItems(Context context, @Nullable String encoded) {
|
private static ArrayList<OrderingItem> parseOrderingItems(Context context, @Nullable String encoded) {
|
||||||
|
ArrayList<OrderingItem> items = new ArrayList<>();
|
||||||
|
for (String key : orderedKeysFromEncoded(encoded)) {
|
||||||
|
addOrderingItemIfValid(context, items, key);
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ArrayList<String> orderedKeysFromEncoded(@Nullable String encoded) {
|
||||||
if (encoded == null || encoded.isEmpty() || "clock,notifications,status".equals(encoded)) {
|
if (encoded == null || encoded.isEmpty() || "clock,notifications,status".equals(encoded)) {
|
||||||
encoded = SbtDefaults.LAYOUT_ITEM_ORDER_DEFAULT;
|
encoded = SbtDefaults.LAYOUT_ITEM_ORDER_DEFAULT;
|
||||||
}
|
}
|
||||||
ArrayList<OrderingItem> items = new ArrayList<>();
|
ArrayList<String> keys = new ArrayList<>();
|
||||||
for (String token : encoded.split(",")) {
|
for (String token : encoded.split(",")) {
|
||||||
addOrderingItemIfValid(context, items, token != null ? token.trim() : "");
|
addKeyIfValid(keys, token != null ? token.trim() : "");
|
||||||
|
}
|
||||||
|
addKeyIfValid(keys, "clock");
|
||||||
|
addKeyIfValid(keys, "chip");
|
||||||
|
addKeyIfValid(keys, "status");
|
||||||
|
addKeyIfValid(keys, "notifications");
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addKeyIfValid(ArrayList<String> keys, String key) {
|
||||||
|
if (!"clock".equals(key)
|
||||||
|
&& !"chip".equals(key)
|
||||||
|
&& !"status".equals(key)
|
||||||
|
&& !"notifications".equals(key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!keys.contains(key)) {
|
||||||
|
keys.add(key);
|
||||||
}
|
}
|
||||||
addOrderingItemIfValid(context, items, "clock");
|
|
||||||
addOrderingItemIfValid(context, items, "chip");
|
|
||||||
addOrderingItemIfValid(context, items, "status");
|
|
||||||
addOrderingItemIfValid(context, items, "notifications");
|
|
||||||
return items;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addOrderingItemIfValid(Context context, ArrayList<OrderingItem> items, String key) {
|
private static void addOrderingItemIfValid(Context context, ArrayList<OrderingItem> items, String key) {
|
||||||
|
|||||||
+27
-12
@@ -22,6 +22,8 @@ import androidx.fragment.app.Fragment;
|
|||||||
import com.google.android.material.button.MaterialButton;
|
import com.google.android.material.button.MaterialButton;
|
||||||
import com.google.android.material.card.MaterialCardView;
|
import com.google.android.material.card.MaterialCardView;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
import se.ajpanton.statusbartweak.R;
|
import se.ajpanton.statusbartweak.R;
|
||||||
import se.ajpanton.statusbartweak.shell.settings.SbtDefaults;
|
import se.ajpanton.statusbartweak.shell.settings.SbtDefaults;
|
||||||
import se.ajpanton.statusbartweak.shell.settings.SbtSettings;
|
import se.ajpanton.statusbartweak.shell.settings.SbtSettings;
|
||||||
@@ -84,8 +86,9 @@ abstract class LockedSceneLayoutFragment extends Fragment {
|
|||||||
|| LockedNotificationModeUi.MODE_NONE.equals(mode)) {
|
|| LockedNotificationModeUi.MODE_NONE.equals(mode)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LinkedHashMap<String, View> cardsByOrderKey = new LinkedHashMap<>();
|
||||||
if (!aod) {
|
if (!aod) {
|
||||||
View clockCard = configuredPositionCardFromLayout(
|
cardsByOrderKey.put("clock", configuredPositionCardFromLayout(
|
||||||
context,
|
context,
|
||||||
prefs,
|
prefs,
|
||||||
R.id.layout_clock_card,
|
R.id.layout_clock_card,
|
||||||
@@ -111,10 +114,9 @@ abstract class LockedSceneLayoutFragment extends Fragment {
|
|||||||
sceneKey("clock_middle_side"),
|
sceneKey("clock_middle_side"),
|
||||||
SbtDefaults.CLOCK_MIDDLE_CUTOUT_SIDE_DEFAULT,
|
SbtDefaults.CLOCK_MIDDLE_CUTOUT_SIDE_DEFAULT,
|
||||||
sceneKey("clock_vertical_offset_px"),
|
sceneKey("clock_vertical_offset_px"),
|
||||||
SbtDefaults.CLOCK_VERTICAL_OFFSET_PX_DEFAULT);
|
SbtDefaults.CLOCK_VERTICAL_OFFSET_PX_DEFAULT));
|
||||||
dynamicContent.addView(clockCard);
|
|
||||||
}
|
}
|
||||||
dynamicContent.addView(configuredIconContainersCardFromLayout(
|
cardsByOrderKey.put("status", configuredIconContainersCardFromLayout(
|
||||||
context,
|
context,
|
||||||
prefs,
|
prefs,
|
||||||
R.id.layout_status_card,
|
R.id.layout_status_card,
|
||||||
@@ -140,9 +142,9 @@ abstract class LockedSceneLayoutFragment extends Fragment {
|
|||||||
SbtDefaults.LAYOUT_STATUS_MIDDLE_SIDE_DEFAULT,
|
SbtDefaults.LAYOUT_STATUS_MIDDLE_SIDE_DEFAULT,
|
||||||
SbtDefaults.LAYOUT_STATUS_VERTICAL_OFFSET_PX_DEFAULT));
|
SbtDefaults.LAYOUT_STATUS_VERTICAL_OFFSET_PX_DEFAULT));
|
||||||
if (LockedNotificationModeUi.MODE_CARDS.equals(mode)) {
|
if (LockedNotificationModeUi.MODE_CARDS.equals(mode)) {
|
||||||
dynamicContent.addView(cardsNotificationCard(context, prefs));
|
cardsByOrderKey.put("notifications", cardsNotificationCard(context, prefs));
|
||||||
} else {
|
} else {
|
||||||
dynamicContent.addView(configuredIconContainersCardFromLayout(
|
cardsByOrderKey.put("notifications", configuredIconContainersCardFromLayout(
|
||||||
context,
|
context,
|
||||||
prefs,
|
prefs,
|
||||||
R.id.layout_notif_card,
|
R.id.layout_notif_card,
|
||||||
@@ -168,6 +170,12 @@ abstract class LockedSceneLayoutFragment extends Fragment {
|
|||||||
SbtDefaults.LAYOUT_NOTIF_MIDDLE_SIDE_DEFAULT,
|
SbtDefaults.LAYOUT_NOTIF_MIDDLE_SIDE_DEFAULT,
|
||||||
SbtDefaults.LAYOUT_NOTIF_VERTICAL_OFFSET_PX_DEFAULT));
|
SbtDefaults.LAYOUT_NOTIF_VERTICAL_OFFSET_PX_DEFAULT));
|
||||||
}
|
}
|
||||||
|
for (String key : LayoutOrderingUi.orderedKeys(prefs)) {
|
||||||
|
View card = cardsByOrderKey.remove(key);
|
||||||
|
if (card != null) {
|
||||||
|
dynamicContent.addView(card);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private View configuredPositionCardFromLayout(
|
private View configuredPositionCardFromLayout(
|
||||||
@@ -373,12 +381,7 @@ abstract class LockedSceneLayoutFragment extends Fragment {
|
|||||||
iconContainerCountControl(context, prefs, countKey, legacyEnabledKey, count, onCountChanged),
|
iconContainerCountControl(context, prefs, countKey, legacyEnabledKey, count, onCountChanged),
|
||||||
insertIndex);
|
insertIndex);
|
||||||
}
|
}
|
||||||
if (index > 0) {
|
updateIconCardTitle(card, titleId, index, count);
|
||||||
TextView title = findCardTitle(card);
|
|
||||||
if (title != null) {
|
|
||||||
title.setText(getString(titleId) + " " + (index + 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bindXmlPositionSection(
|
bindXmlPositionSection(
|
||||||
card,
|
card,
|
||||||
prefs,
|
prefs,
|
||||||
@@ -409,6 +412,18 @@ abstract class LockedSceneLayoutFragment extends Fragment {
|
|||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateIconCardTitle(View card, int titleId, int index, int count) {
|
||||||
|
TextView title = findCardTitle(card);
|
||||||
|
if (title == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (count > 1) {
|
||||||
|
title.setText(getString(titleId) + " " + (index + 1));
|
||||||
|
} else {
|
||||||
|
title.setText(titleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private View inflateLayoutCard(Context context, int cardId) {
|
private View inflateLayoutCard(Context context, int cardId) {
|
||||||
View fullLayout = LayoutInflater.from(context).inflate(R.layout.fragment_layout, dynamicContent, false);
|
View fullLayout = LayoutInflater.from(context).inflate(R.layout.fragment_layout, dynamicContent, false);
|
||||||
View card = fullLayout.findViewById(cardId);
|
View card = fullLayout.findViewById(cardId);
|
||||||
|
|||||||
Reference in New Issue
Block a user