diff --git a/app/src/main/java/org/xbmc/kore/Settings.java b/app/src/main/java/org/xbmc/kore/Settings.java index 8c033f2..b17af21 100644 --- a/app/src/main/java/org/xbmc/kore/Settings.java +++ b/app/src/main/java/org/xbmc/kore/Settings.java @@ -132,6 +132,10 @@ public class Settings { public static final String KEY_PREF_TVSHOWS_SHOW_WATCHED_STATUS = "tvshows_show_watched_status"; public static final boolean DEFAULT_PREF_TVSHOWS_SHOW_WATCHED_STATUS = true; + // Filter disabled addons on addons list + public static final String KEY_PREF_ADDONS_FILTER_HIDE_DISABLED = "addons_filter_hide_disabled"; + public static final boolean DEFAULT_PREF_ADDONS_FILTER_HIDE_DISABLED = false; + // Use hardware volume keys to control volume public static final String KEY_PREF_USE_HARDWARE_VOLUME_KEYS = "pref_use_hardware_volume_keys"; public static final boolean DEFAULT_PREF_USE_HARDWARE_VOLUME_KEYS = true; diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListFragment.java index c8f295c..5903bd9 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListFragment.java @@ -17,11 +17,16 @@ package org.xbmc.kore.ui.sections.addon; import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; +import android.preference.PreferenceManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -29,6 +34,7 @@ import android.widget.TextView; import android.widget.Toast; import org.xbmc.kore.R; +import org.xbmc.kore.Settings; import org.xbmc.kore.host.HostManager; import org.xbmc.kore.jsonrpc.ApiCallback; import org.xbmc.kore.jsonrpc.method.Addons; @@ -63,6 +69,8 @@ public class AddonListFragment extends AbstractListFragment { */ private Handler callbackHandler = new Handler(); + private static boolean hideDisabledAddons; + @Override protected RecyclerViewEmptyViewSupport.OnItemClickListener createOnItemClickListener() { return new RecyclerViewEmptyViewSupport.OnItemClickListener() { @@ -84,7 +92,7 @@ public class AddonListFragment extends AbstractListFragment { @Override public void onActivityCreated (Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - setHasOptionsMenu(false); + setHasOptionsMenu(true); if (getAdapter().getItemCount() == 0) callGetAddonsAndSetup(); @@ -116,6 +124,41 @@ public class AddonListFragment extends AbstractListFragment { .show(); } } + + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.addon_list, menu); + + // Setup filters + MenuItem hideDisabled = menu.findItem(R.id.action_hide_disabled); + + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); + hideDisabledAddons = preferences.getBoolean(Settings.KEY_PREF_ADDONS_FILTER_HIDE_DISABLED, Settings.DEFAULT_PREF_ADDONS_FILTER_HIDE_DISABLED); + hideDisabled.setChecked(hideDisabledAddons); + + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); + switch (item.getItemId()) { + case R.id.action_hide_disabled: + item.setChecked(!item.isChecked()); + preferences.edit() + .putBoolean(Settings.KEY_PREF_ADDONS_FILTER_HIDE_DISABLED, item.isChecked()) + .apply(); + hideDisabledAddons = item.isChecked(); + callGetAddonsAndSetup(); + break; + default: + break; + } + + return super.onOptionsItemSelected(item); + } + public class AddonNameComparator implements Comparator { public int compare(AddonType.Details left, AddonType.Details right) { @@ -156,13 +199,7 @@ public class AddonListFragment extends AbstractListFragment { adapter.clear(); for (AddonType.Details addon : result) { - if (addon.type.equals(AddonType.Types.UNKNOWN) || - addon.type.equals(AddonType.Types.XBMC_PYTHON_PLUGINSOURCE) || - addon.type.equals(AddonType.Types.XBMC_PYTHON_SCRIPT) || - addon.type.equals(AddonType.Types.XBMC_ADDON_AUDIO) || - addon.type.equals(AddonType.Types.XBMC_ADDON_EXECUTABLE) || - addon.type.equals(AddonType.Types.XBMC_ADDON_VIDEO) || - addon.type.equals(AddonType.Types.XBMC_ADDON_IMAGE)) { + if (isAddonSupported(addon) && (!hideDisabledAddons || addon.enabled)) { adapter.add(addon); } } @@ -188,6 +225,16 @@ public class AddonListFragment extends AbstractListFragment { callbackHandler); } + private boolean isAddonSupported(AddonType.Details addon) { + return (addon.type.equals(AddonType.Types.UNKNOWN) || + addon.type.equals(AddonType.Types.XBMC_PYTHON_PLUGINSOURCE) || + addon.type.equals(AddonType.Types.XBMC_PYTHON_SCRIPT) || + addon.type.equals(AddonType.Types.XBMC_ADDON_AUDIO) || + addon.type.equals(AddonType.Types.XBMC_ADDON_EXECUTABLE) || + addon.type.equals(AddonType.Types.XBMC_ADDON_VIDEO) || + addon.type.equals(AddonType.Types.XBMC_ADDON_IMAGE)); + } + private static class AddonsAdapter extends RecyclerView.Adapter { private HostManager hostManager; @@ -247,6 +294,7 @@ public class AddonListFragment extends AbstractListFragment { TextView titleView; TextView detailsView; ImageView artView; + ImageView disabledView; private static String author; private static String version; private HostManager hostManager; @@ -270,6 +318,7 @@ public class AddonListFragment extends AbstractListFragment { titleView = itemView.findViewById(R.id.title); detailsView = itemView.findViewById(R.id.details); artView = itemView.findViewById(R.id.art); + disabledView = itemView.findViewById(R.id.disabled); itemView.setTag(this); } @@ -288,6 +337,7 @@ public class AddonListFragment extends AbstractListFragment { titleView.setText(dataHolder.getTitle()); detailsView.setText(addonDetails.summary); + disabledView.setVisibility(addonDetails.enabled ? View.INVISIBLE : View.VISIBLE); UIUtils.loadImageWithCharacterAvatar(context, hostManager, addonDetails.thumbnail, dataHolder.getTitle(), diff --git a/app/src/main/res/drawable-xhdpi/ic_cancel_white_24dp.xml b/app/src/main/res/drawable-xhdpi/ic_cancel_white_24dp.xml new file mode 100644 index 0000000..6125aed --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_cancel_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/grid_item_addon.xml b/app/src/main/res/layout/grid_item_addon.xml index 4cd3890..985c6ae 100644 --- a/app/src/main/res/layout/grid_item_addon.xml +++ b/app/src/main/res/layout/grid_item_addon.xml @@ -21,34 +21,49 @@ android:layout_height="wrap_content" style="@style/Widget.CardView"> - + android:layout_height="wrap_content"> + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:contentDescription="@string/poster" + android:scaleType="centerCrop"/> - + android:layout_toRightOf="@id/art" + android:layout_toEndOf="@id/art" + android:layout_alignTop="@id/art" + style="@style/TextAppearance.Medialist.Title"/> + - - + + + \ No newline at end of file diff --git a/app/src/main/res/menu/addon_list.xml b/app/src/main/res/menu/addon_list.xml new file mode 100644 index 0000000..878a689 --- /dev/null +++ b/app/src/main/res/menu/addon_list.xml @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index af7f065..58e03bf 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -323,6 +323,7 @@ הסתרת אלו שראיתי + הסתרת הרחבות מנוטרלות סידור לפי שם לפי שנה diff --git a/app/src/main/res/values/attr.xml b/app/src/main/res/values/attr.xml index d349549..e9b741b 100644 --- a/app/src/main/res/values/attr.xml +++ b/app/src/main/res/values/attr.xml @@ -110,6 +110,7 @@ + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ef7496..50c3e7e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -322,6 +322,7 @@ Hide watched + Hide disabled Sort By name By year diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index ead9f13..f4afd22 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -151,6 +151,7 @@ @drawable/ic_queue_white_24dp @drawable/ic_open_in_new_white_24dp @drawable/ic_done_white_24dp + @drawable/ic_cancel_white_24dp @drawable/ic_expand_less_white_24dp @drawable/ic_expand_more_white_24dp @@ -299,6 +300,7 @@ @drawable/ic_queue_white_24dp @drawable/ic_open_in_new_white_24dp @drawable/ic_done_white_24dp + @drawable/ic_cancel_white_24dp @drawable/ic_expand_less_white_24dp @drawable/ic_expand_more_white_24dp