Grid layout for subscriptions
This commit is contained in:
parent
b1a5547de2
commit
a1be03543c
|
@ -5,11 +5,15 @@ import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
@ -17,6 +21,7 @@ import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.support.v7.widget.GridLayoutManager;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -72,7 +77,7 @@ import static org.schabi.newpipe.local.subscription.services.SubscriptionsImport
|
||||||
import static org.schabi.newpipe.util.AnimationUtils.animateRotation;
|
import static org.schabi.newpipe.util.AnimationUtils.animateRotation;
|
||||||
import static org.schabi.newpipe.util.AnimationUtils.animateView;
|
import static org.schabi.newpipe.util.AnimationUtils.animateView;
|
||||||
|
|
||||||
public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEntity>> {
|
public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEntity>> implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
private static final int REQUEST_EXPORT_CODE = 666;
|
private static final int REQUEST_EXPORT_CODE = 666;
|
||||||
private static final int REQUEST_IMPORT_CODE = 667;
|
private static final int REQUEST_IMPORT_CODE = 667;
|
||||||
|
|
||||||
|
@ -80,6 +85,9 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
@State
|
@State
|
||||||
protected Parcelable itemsListState;
|
protected Parcelable itemsListState;
|
||||||
private InfoListAdapter infoListAdapter;
|
private InfoListAdapter infoListAdapter;
|
||||||
|
private int updateFlags = 0;
|
||||||
|
|
||||||
|
private static final int LIST_MODE_UPDATE_FLAG = 0x32;
|
||||||
|
|
||||||
private View headerRootLayout;
|
private View headerRootLayout;
|
||||||
private View whatsNewItemListHeader;
|
private View whatsNewItemListHeader;
|
||||||
|
@ -100,6 +108,8 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(activity)
|
||||||
|
.registerOnSharedPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -127,6 +137,15 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
setupBroadcastReceiver();
|
setupBroadcastReceiver();
|
||||||
|
if (updateFlags != 0) {
|
||||||
|
if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) {
|
||||||
|
final boolean useGrid = isGridLayout();
|
||||||
|
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
|
||||||
|
infoListAdapter.setGridItemVariants(useGrid);
|
||||||
|
infoListAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
updateFlags = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -153,9 +172,25 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
disposables = null;
|
disposables = null;
|
||||||
subscriptionService = null;
|
subscriptionService = null;
|
||||||
|
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(activity)
|
||||||
|
.unregisterOnSharedPreferenceChangeListener(this);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected RecyclerView.LayoutManager getListLayoutManager() {
|
||||||
|
return new LinearLayoutManager(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected RecyclerView.LayoutManager getGridLayoutManager() {
|
||||||
|
final Resources resources = activity.getResources();
|
||||||
|
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
|
||||||
|
width += (24 * resources.getDisplayMetrics().density);
|
||||||
|
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
|
||||||
|
final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
|
||||||
|
lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount));
|
||||||
|
return lm;
|
||||||
|
}
|
||||||
|
|
||||||
/*/////////////////////////////////////////////////////////////////////////
|
/*/////////////////////////////////////////////////////////////////////////
|
||||||
// Menu
|
// Menu
|
||||||
/////////////////////////////////////////////////////////////////////////*/
|
/////////////////////////////////////////////////////////////////////////*/
|
||||||
|
@ -287,9 +322,10 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
protected void initViews(View rootView, Bundle savedInstanceState) {
|
protected void initViews(View rootView, Bundle savedInstanceState) {
|
||||||
super.initViews(rootView, savedInstanceState);
|
super.initViews(rootView, savedInstanceState);
|
||||||
|
|
||||||
|
final boolean useGrid = isGridLayout();
|
||||||
infoListAdapter = new InfoListAdapter(getActivity());
|
infoListAdapter = new InfoListAdapter(getActivity());
|
||||||
itemsList = rootView.findViewById(R.id.items_list);
|
itemsList = rootView.findViewById(R.id.items_list);
|
||||||
itemsList.setLayoutManager(new LinearLayoutManager(activity));
|
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
|
||||||
|
|
||||||
infoListAdapter.setHeader(headerRootLayout = activity.getLayoutInflater().inflate(R.layout.subscription_header, itemsList, false));
|
infoListAdapter.setHeader(headerRootLayout = activity.getLayoutInflater().inflate(R.layout.subscription_header, itemsList, false));
|
||||||
whatsNewItemListHeader = headerRootLayout.findViewById(R.id.whats_new);
|
whatsNewItemListHeader = headerRootLayout.findViewById(R.id.whats_new);
|
||||||
|
@ -297,6 +333,7 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
importExportOptions = headerRootLayout.findViewById(R.id.import_export_options);
|
importExportOptions = headerRootLayout.findViewById(R.id.import_export_options);
|
||||||
|
|
||||||
infoListAdapter.useMiniItemVariants(true);
|
infoListAdapter.useMiniItemVariants(true);
|
||||||
|
infoListAdapter.setGridItemVariants(useGrid);
|
||||||
itemsList.setAdapter(infoListAdapter);
|
itemsList.setAdapter(infoListAdapter);
|
||||||
|
|
||||||
setupImportFromItems(headerRootLayout.findViewById(R.id.import_from_options));
|
setupImportFromItems(headerRootLayout.findViewById(R.id.import_from_options));
|
||||||
|
@ -447,4 +484,22 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
R.string.general_error);
|
R.string.general_error);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
if (key.equals(getString(R.string.list_view_mode_key))) {
|
||||||
|
updateFlags |= LIST_MODE_UPDATE_FLAG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean isGridLayout() {
|
||||||
|
final String list_mode = PreferenceManager.getDefaultSharedPreferences(activity).getString(getString(R.string.list_view_mode_key), getString(R.string.list_view_mode_value));
|
||||||
|
if ("auto".equals(list_mode)) {
|
||||||
|
final Configuration configuration = getResources().getConfiguration();
|
||||||
|
return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||||
|
&& configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
|
||||||
|
} else {
|
||||||
|
return "grid".equals(list_mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:scrollbars="vertical"
|
android:scrollbars="vertical"
|
||||||
app:layoutManager="LinearLayoutManager"
|
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:listitem="@layout/list_channel_item"
|
tools:listitem="@layout/list_channel_item"
|
||||||
tools:visibility="visible"/>
|
tools:visibility="visible"/>
|
||||||
|
|
Loading…
Reference in New Issue