Highlight selected item when two row/column mode

This commit is contained in:
M66B 2022-07-17 11:10:35 +02:00
parent 64011a0ad9
commit be90d57b00
3 changed files with 53 additions and 12 deletions

View File

@ -718,6 +718,11 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
Shortcuts.update(this, this);
}
public boolean isSplit() {
return (layoutId == R.layout.activity_view_portrait_split ||
layoutId == R.layout.activity_view_landscape_split);
}
@Override
public void onBackPressedFragment() {
backPressedCallback.handleOnBackPressed();

View File

@ -230,6 +230,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private int textColorSecondary;
private int textColorTertiary;
private int textColorLink;
private int textColorHighlightInverse;
private int colorUnreadHighlight;
private int colorUnread;
private int colorRead;
@ -1832,8 +1833,12 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibFlagged.setEnabled(message.uid != null || message.accountProtocol != EntityAccount.TYPE_IMAP);
boolean split = (viewType != ViewType.THREAD && properties.getValue("split", message.id));
if (split)
color = textColorHighlightInverse;
card.setCardBackgroundColor(
flags_background && flagged && !expanded
split || (flags_background && flagged && !expanded)
? ColorUtils.setAlphaComponent(color, 127) : Color.TRANSPARENT);
ibFlagged.setVisibility(flags || message.ui_flagged ? View.VISIBLE : View.GONE);
@ -7032,6 +7037,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.textColorSecondary = Helper.resolveColor(context, android.R.attr.textColorSecondary);
this.textColorTertiary = Helper.resolveColor(context, android.R.attr.textColorTertiary);
this.textColorLink = Helper.resolveColor(context, android.R.attr.textColorLink);
this.textColorHighlightInverse = Helper.resolveColor(context, android.R.attr.textColorHighlightInverse);
boolean highlight_unread = prefs.getBoolean("highlight_unread", true);
boolean highlight_subject = prefs.getBoolean("highlight_subject", false);

View File

@ -256,7 +256,8 @@ import me.everything.android.ui.overscroll.IOverScrollUpdateListener;
import me.everything.android.ui.overscroll.VerticalOverScrollBounceEffectDecorator;
import me.everything.android.ui.overscroll.adapters.RecyclerViewOverScrollDecorAdapter;
public class FragmentMessages extends FragmentBase implements SharedPreferences.OnSharedPreferenceChangeListener {
public class FragmentMessages extends FragmentBase
implements SharedPreferences.OnSharedPreferenceChangeListener, FragmentManager.OnBackStackChangedListener {
private ViewGroup view;
private SwipeRefreshLayoutEx swipeRefresh;
private TextView tvAirplane;
@ -521,14 +522,20 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
if (viewType != AdapterMessage.ViewType.THREAD && EntityFolder.ARCHIVE.equals(type))
filter_archive = false;
if (viewType != AdapterMessage.ViewType.THREAD)
getParentFragmentManager().setFragmentResultListener("message.selected", this, new FragmentResultListener() {
@Override
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
long id = result.getLong("id", -1);
iProperties.setValue("selected", id, true);
}
});
try {
FragmentManager fm = getParentFragmentManager();
if (viewType != AdapterMessage.ViewType.THREAD)
fm.setFragmentResultListener("message.selected", this, new FragmentResultListener() {
@Override
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
long id = result.getLong("id", -1);
iProperties.setValue("selected", id, true);
}
});
fm.addOnBackStackChangedListener(this);
} catch (Throwable ex) {
Log.e(ex);
}
}
@Override
@ -1944,9 +1951,32 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
@Override
public void onDestroy() {
try {
FragmentManager fm = getParentFragmentManager();
fm.removeOnBackStackChangedListener(this);
} catch (Throwable ex) {
Log.e(ex);
}
super.onDestroy();
}
@Override
public void onBackStackChanged() {
if (viewType == AdapterMessage.ViewType.THREAD)
return;
FragmentActivity activity = getActivity();
FragmentManager fm = getParentFragmentManager();
int count = fm.getBackStackEntryCount();
boolean split = (activity instanceof ActivityView &&
((ActivityView) activity).isSplit() &&
count > 0 && "thread".equals(fm.getBackStackEntryAt(count - 1).getName()));
List<Long> ids = values.get("selected");
if (ids != null)
for (long id : ids)
iProperties.setValue("split", id, split);
}
private void scrollToVisibleItem(LinearLayoutManager llm, boolean bottom) {
int first = llm.findFirstVisibleItemPosition();
int last = llm.findLastVisibleItemPosition();
@ -2095,7 +2125,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
} else
values.get(name).remove(id);
if ("selected".equals(name) && enabled) {
if ("split".equals(name) || ("selected".equals(name) && enabled)) {
if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
return;
@ -2105,7 +2135,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
if (pos != NO_POSITION)
changed.add(pos);
for (Long other : new ArrayList<>(values.get("selected")))
for (Long other : new ArrayList<>(values.get(name)))
if (!other.equals(id)) {
values.get(name).remove(other);