diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/list/ChannelListFragment.java b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/list/ChannelListFragment.java index 3b138f19..33159ba1 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/list/ChannelListFragment.java +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/list/ChannelListFragment.java @@ -3,11 +3,6 @@ package de.christinecoenen.code.zapp.app.livestream.ui.list; import android.content.Intent; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.RecyclerView; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MenuItem; @@ -15,13 +10,19 @@ import android.view.View; import android.view.ViewGroup; import android.widget.PopupMenu; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.RecyclerView; + import butterknife.BindView; import butterknife.ButterKnife; import de.christinecoenen.code.zapp.R; import de.christinecoenen.code.zapp.app.livestream.ui.detail.ChannelDetailActivity; import de.christinecoenen.code.zapp.model.ChannelModel; import de.christinecoenen.code.zapp.model.ISortableChannelList; -import de.christinecoenen.code.zapp.model.json.SortableJsonChannelList; +import de.christinecoenen.code.zapp.model.json.SortableVisibleJsonChannelList; import de.christinecoenen.code.zapp.utils.system.MultiWindowHelper; import de.christinecoenen.code.zapp.utils.view.GridAutofitLayoutManager; @@ -51,7 +52,7 @@ public class ChannelListFragment extends Fragment implements ChannelListAdapter. public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - channelList = new SortableJsonChannelList(getContext()); + channelList = new SortableVisibleJsonChannelList(getContext()); gridAdapter = new ChannelListAdapter(getContext(), channelList, this); } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/helper/PreferenceChannelOrderHelper.java b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/helper/PreferenceChannelOrderHelper.java index b1b02aaf..4f717337 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/helper/PreferenceChannelOrderHelper.java +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/helper/PreferenceChannelOrderHelper.java @@ -18,6 +18,7 @@ import de.christinecoenen.code.zapp.model.ChannelModel; public class PreferenceChannelOrderHelper { private static final String PREF_KEY_CHANNEL_ORDER = "PREF_KEY_CHANNEL_ORDER"; + private static final String PREF_KEY_CHANNELS_NOT_VISIBLE = "PREF_KEY_CHANNELS_NOT_VISIBLE"; private final PreferenceHelper preferenceHelper; @@ -26,16 +27,16 @@ public class PreferenceChannelOrderHelper { } public void saveChannelOrder(List channels) { - List sortedChannelIds = new ArrayList<>(channels.size()); - - for (ChannelModel channel : channels) { - sortedChannelIds.add(channel.getId()); - } - - preferenceHelper.saveList(PREF_KEY_CHANNEL_ORDER, sortedChannelIds); + saveOrder(channels); + saveVisibility(channels); } - public List sortChannelList(List channels) { + public List sortChannelList(List channels, boolean removeDisabled) { + List sortedChannels = loadOrder(channels); + return loadVisibility(sortedChannels, removeDisabled); + } + + private List loadOrder(List channels) { List sortedChannelIds = preferenceHelper.loadList(PREF_KEY_CHANNEL_ORDER); if (sortedChannelIds == null) { @@ -65,4 +66,52 @@ public class PreferenceChannelOrderHelper { return sortedChannelList; } + + private List loadVisibility(List channels, boolean removeDisabled) { + List disabledChannelIds = preferenceHelper.loadList(PREF_KEY_CHANNELS_NOT_VISIBLE); + + if (disabledChannelIds == null) { + // have never been saved before + return channels; + } + + if (removeDisabled) { + List enabledChannels = new ArrayList<>(); + for (ChannelModel channel : channels) { + boolean isDisabled = disabledChannelIds.contains(channel.getId()); + if (!isDisabled) { + enabledChannels.add(channel); + } + } + return enabledChannels; + } else { + for (ChannelModel channel : channels) { + boolean isDisabled = disabledChannelIds.contains(channel.getId()); + channel.setEnabled(!isDisabled); + } + return channels; + } + } + + private void saveOrder(List channels) { + List sortedChannelIds = new ArrayList<>(channels.size()); + + for (ChannelModel channel : channels) { + sortedChannelIds.add(channel.getId()); + } + + preferenceHelper.saveList(PREF_KEY_CHANNEL_ORDER, sortedChannelIds); + } + + private void saveVisibility(List channels) { + List disabledChannelIds = new ArrayList<>(); + + for (ChannelModel channel : channels) { + if (!channel.isEnabled()) { + disabledChannelIds.add(channel.getId()); + } + } + + preferenceHelper.saveList(PREF_KEY_CHANNELS_NOT_VISIBLE, disabledChannelIds); + } } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionActivity.java b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionActivity.java index 47646fab..6d059d41 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionActivity.java +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionActivity.java @@ -20,6 +20,8 @@ public class ChannelSelectionActivity extends AppCompatActivity { @BindView(R.id.draglist_channel_selection) protected DragListView channelListView; + private ISortableChannelList channelList; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -33,7 +35,7 @@ public class ChannelSelectionActivity extends AppCompatActivity { } // adapter - final ISortableChannelList channelList = new SortableJsonChannelList(this); + channelList = new SortableJsonChannelList(this); final ChannelSelectionAdapter listAdapter = new ChannelSelectionAdapter(this); listAdapter.setItemList(channelList.getList()); @@ -52,4 +54,10 @@ public class ChannelSelectionActivity extends AppCompatActivity { } }); } + + @Override + protected void onPause() { + super.onPause(); + channelList.persistChannelOrder(); + } } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionAdapter.java b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionAdapter.java index 21019479..77eb7ade 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionAdapter.java +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/ChannelSelectionAdapter.java @@ -1,13 +1,14 @@ package de.christinecoenen.code.zapp.app.settings.ui; import android.content.Context; -import androidx.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; + import com.woxthebox.draglistview.DragItemAdapter; import butterknife.BindView; @@ -50,12 +51,17 @@ class ChannelSelectionAdapter extends DragItemAdapter