From cbf6540889f2e52602540c4cee5a869d27b0cc6e Mon Sep 17 00:00:00 2001 From: Somethingweirdhere Date: Fri, 15 Jun 2018 05:18:54 +0200 Subject: [PATCH] New selection menu --- .../settings/ContentSettingsDialog.java | 298 ------------------ .../settings/ContentSettingsFragment.java | 17 +- .../newpipe/settings/ContentSettingsMain.java | 281 +++++++++++++++++ .../settings/ContentSettingsMainDialog.java | 164 ++++++++++ .../res/drawable-hdpi/ic_add_black_24dp.png | Bin 0 -> 187 bytes .../res/drawable-hdpi/ic_add_white_24dp.png | Bin 0 -> 194 bytes .../res/drawable-mdpi/ic_add_black_24dp.png | Bin 0 -> 164 bytes .../res/drawable-mdpi/ic_add_white_24dp.png | Bin 0 -> 172 bytes .../res/drawable-xhdpi/ic_add_black_24dp.png | Bin 0 -> 221 bytes .../res/drawable-xhdpi/ic_add_white_24dp.png | Bin 0 -> 227 bytes .../res/drawable-xxhdpi/ic_add_black_24dp.png | Bin 0 -> 352 bytes .../res/drawable-xxhdpi/ic_add_white_24dp.png | Bin 0 -> 349 bytes .../res/layout/dialog_contentsettings.xml | 96 ++---- .../res/layout/dialog_contentsettingsadd.xml | 13 + .../res/layout/dialog_contentsettingtab.xml | 14 +- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/styles.xml | 2 + app/src/main/res/xml/content_settings.xml | 3 +- 18 files changed, 503 insertions(+), 386 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/settings/ContentSettingsDialog.java create mode 100644 app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMain.java create mode 100644 app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMainDialog.java create mode 100644 app/src/main/res/drawable-hdpi/ic_add_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_add_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_add_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_add_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png create mode 100644 app/src/main/res/layout/dialog_contentsettingsadd.xml diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsDialog.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsDialog.java deleted file mode 100644 index bea5a0fba..000000000 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsDialog.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.schabi.newpipe.settings; - -import android.app.Dialog; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -import org.schabi.newpipe.R; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ContentSettingsDialog extends DialogFragment { - - - public AllAdapter allAdapter; - public UsedAdapter usedAdapter; - - List usedTabs = new ArrayList<>(); - - public String[] allTabs = new String[7]; - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - return inflater.inflate(R.layout.dialog_contentsettings, container); - } - - - @Override - public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) { - super.onViewCreated(rootView, savedInstanceState); - - tabNames(); - initButtons(rootView); - initUsedTabs(); - - RecyclerView allTabs = rootView.findViewById(R.id.tabs); - allTabs.setLayoutManager(new LinearLayoutManager(getContext())); - allAdapter = new AllAdapter(); - allTabs.setAdapter(allAdapter); - allTabs.addItemDecoration(new DividerItemDecoration(getActivity())); - - RecyclerView usedTabs = rootView.findViewById(R.id.usedTabs); - usedTabs.setLayoutManager(new LinearLayoutManager(getContext())); - usedAdapter = new UsedAdapter(); - usedTabs.setAdapter(usedAdapter); - usedTabs.addItemDecoration(new DividerItemDecoration(getActivity())); - } - - private void initButtons(View rootView){ - rootView.findViewById(R.id.cancelText).setOnClickListener((v -> { - dismiss(); - })); - - rootView.findViewById(R.id.confirmText).setOnClickListener((v -> { - StringBuilder save = new StringBuilder(); - if(usedTabs.size()==0) { - save = new StringBuilder("0"); - } else { - for(String s: usedTabs) { - save.append(s); - save.append("\n"); - } - } - - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString("saveUsedTabs", save.toString()); - editor.commit(); - dismiss(); - })); - } - - private void initUsedTabs() { - String save = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("saveUsedTabs", "1\n2\n4\n"); - String tabs[] = save.trim().split("\n"); - usedTabs.addAll(Arrays.asList(tabs)); - } - - private void tabNames() { - allTabs[0] = getString(R.string.blank_page_summary); - allTabs[1] = getString(R.string.kiosk_page_summary); - allTabs[2] = getString(R.string.subscription_page_summary); - allTabs[3] = getString(R.string.feed_page_summary); - allTabs[4] = getString(R.string.tab_bookmarks); - allTabs[5] = getString(R.string.title_activity_history); - allTabs[6] = getString(R.string.channel_page_summary); - } - - private void addTab(int position) { - if(position!=6) { - usedTabs.add(String.valueOf(position)); - usedAdapter.notifyDataSetChanged(); - } else { - SelectChannelFragment selectChannelFragment = new SelectChannelFragment(); - selectChannelFragment.setOnSelectedLisener((String url, String name, int service) -> { - usedTabs.add(position+"\t"+url+"\t"+name+"\t"+service); - usedAdapter.notifyDataSetChanged(); - }); - selectChannelFragment.show(getFragmentManager(), "select_channel"); - } - } - - private void removeTab(int position) { - usedTabs.remove(position); - usedAdapter.notifyDataSetChanged(); - } - - private void upTab(int position){ - String first = usedTabs.get(position - 1); - String second = usedTabs.get(position); - - usedTabs.set(position - 1, second); - usedTabs.set(position, first); - - usedAdapter.notifyDataSetChanged(); - } - - private void downTab(int position){ - String first = usedTabs.get(position + 1); - String second = usedTabs.get(position); - - usedTabs.set(position + 1, second); - usedTabs.set(position, first); - - usedAdapter.notifyDataSetChanged(); - } - - public class AllAdapter extends RecyclerView.Adapter{ - - @Override - public TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - - LayoutInflater inflater = LayoutInflater.from(getContext()); - View view = inflater.inflate(R.layout.dialog_contentsettingtab, parent, false); - return new TabViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull TabViewHolder holder, int position) { - holder.bind(position); - } - - @Override - public int getItemCount() { - return allTabs.length; - } - - class TabViewHolder extends RecyclerView.ViewHolder { - - TextView text; - Button add; - Button up; - Button down; - - public TabViewHolder(View itemView) { - super(itemView); - - text = itemView.findViewById(R.id.tabName); - add = itemView.findViewById(R.id.buttonAddRemove); - up = itemView.findViewById(R.id.buttonUp); - down = itemView.findViewById(R.id.buttonDown); - } - - void bind(int position) { - up.setBackgroundResource(0); - down.setBackgroundResource(0); - text.setText(allTabs[position]); - add.setBackgroundResource(R.drawable.ic_add); - add.setOnClickListener(v -> { - addTab(position); - }); - - } - } - } - - public class UsedAdapter extends RecyclerView.Adapter{ - - @Override - public TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - - LayoutInflater inflater = LayoutInflater.from(getContext()); - View view = inflater.inflate(R.layout.dialog_contentsettingtab, parent, false); - return new TabViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull TabViewHolder holder, int position) { - holder.bind(position); - } - - @Override - public int getItemCount() { - return usedTabs.size(); - } - - class TabViewHolder extends RecyclerView.ViewHolder { - - TextView text; - Button remove; - Button up; - Button down; - - public TabViewHolder(View itemView) { - super(itemView); - - text = itemView.findViewById(R.id.tabName); - remove = itemView.findViewById(R.id.buttonAddRemove); - up = itemView.findViewById(R.id.buttonUp); - down = itemView.findViewById(R.id.buttonDown); - } - - void bind(int position) { - if(position!=0) { - up.setBackgroundResource(R.drawable.ic_arrow_up_white); - up.setOnClickListener(v -> { - upTab(position); - }); - } else up.setBackgroundResource(0); - - if(position!=usedTabs.size()-1) { - down.setBackgroundResource(R.drawable.ic_arrow_down_white); - down.setOnClickListener(v -> { - downTab(position); - }); - } else down.setBackgroundResource(0); - - if(usedTabs.get(position).startsWith("6\t")) { - String channelInfo[] = usedTabs.get(position).split("\t"); - String channelName = ""; - if(channelInfo.length==4) channelName = channelInfo[2]; - String textToSet = allTabs[6]+": "+channelName; - text.setText(textToSet); - } else { - text.setText(allTabs[Integer.parseInt(usedTabs.get(position))]); - } - - remove.setBackgroundResource(R.drawable.ic_remove); - remove.setOnClickListener(v -> { - removeTab(position); - }); - - } - } - } - - public class DividerItemDecoration extends RecyclerView.ItemDecoration { - - private final int[] ATTRS = new int[]{android.R.attr.listDivider}; - - private Drawable divider; - - public DividerItemDecoration(Context context) { - final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); - divider = styledAttributes.getDrawable(0); - styledAttributes.recycle(); - } - - - @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { - int left = parent.getPaddingLeft(); - int right = parent.getWidth() - parent.getPaddingRight(); - - int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - View child = parent.getChildAt(i); - - RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); - - int top = child.getBottom() + params.bottomMargin; - int bottom = top + divider.getIntrinsicHeight(); - - divider.setBounds(left, top, right, bottom); - divider.draw(c); - } - } - } - - -} diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java index d856dbe48..f7b5d1c71 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java @@ -2,7 +2,6 @@ package org.schabi.newpipe.settings; import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -10,12 +9,10 @@ import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.Fragment; import android.support.v7.preference.ListPreference; import android.support.v7.preference.Preference; import android.util.Log; -import android.widget.LinearLayout; import android.widget.Toast; import com.nononsenseapps.filepicker.Utils; @@ -24,15 +21,12 @@ import com.nostra13.universalimageloader.core.ImageLoader; import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.StreamingService; -import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.UserAction; -import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.FilePickerActivityHelper; import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.ZipHelper; -import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; @@ -46,11 +40,8 @@ import java.util.Date; import java.util.Locale; import java.util.Map; import java.util.zip.ZipFile; -import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; -import static android.content.Context.MODE_PRIVATE; - public class ContentSettingsFragment extends BasePreferenceFragment { private static final int REQUEST_IMPORT_PATH = 8945; @@ -102,12 +93,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment { addPreferencesFromResource(R.xml.content_settings); - Preference contentPreference = findPreference(getString(R.string.main_page_content_key)); - contentPreference.setOnPreferenceClickListener((Preference p) -> { - new ContentSettingsDialog().show(getFragmentManager(),"select_content"); - return true; - }); - Preference importDataPreference = findPreference(getString(R.string.import_data)); importDataPreference.setOnPreferenceClickListener((Preference p) -> { Intent i = new Intent(getActivity(), FilePickerActivityHelper.class) diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMain.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMain.java new file mode 100644 index 000000000..a7313eae8 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMain.java @@ -0,0 +1,281 @@ +package org.schabi.newpipe.settings; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.preference.PreferenceManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.database.LocalItem; +import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; +import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.OnClickGesture; +import org.schabi.newpipe.util.ServiceHelper; +import org.schabi.newpipe.util.ThemeHelper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class ContentSettingsMain extends Fragment { + + public ContentSettingsMain.UsedAdapter usedAdapter; + + RecyclerView usedTabsView; + + List usedTabs = new ArrayList<>(); + + public String[] allTabs = new String[7]; + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + ((AppCompatActivity)getContext()).getSupportActionBar().setTitle(R.string.main_page_content); + return inflater.inflate(R.layout.dialog_contentsettings, container, false); + } + + + @Override + public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) { + super.onViewCreated(rootView, savedInstanceState); + + tabNames(); + initUsedTabs(); + initAddButton(rootView); + + usedTabsView = rootView.findViewById(R.id.usedTabs); + usedTabsView.setLayoutManager(new LinearLayoutManager(getContext())); + usedAdapter = new ContentSettingsMain.UsedAdapter(); + usedTabsView.setAdapter(usedAdapter); + usedTabsView.addItemDecoration(new ContentSettingsMain.DividerItemDecoration(getActivity())); + + ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(usedAdapter); + ItemTouchHelper touchHelper = new ItemTouchHelper(callback); + touchHelper.attachToRecyclerView(usedTabsView); + } + + private void saveChanges() { + StringBuilder save = new StringBuilder(); + if(usedTabs.size()==0) { + save = new StringBuilder("0"); + } else { + for(String s: usedTabs) { + save.append(s); + save.append("\n"); + } + } + + SharedPreferences sharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("saveUsedTabs", save.toString()); + editor.commit(); + } + + private void initUsedTabs() { + String save = android.preference.PreferenceManager.getDefaultSharedPreferences(getContext()).getString("saveUsedTabs", "1\n2\n4\n"); + String tabs[] = save.trim().split("\n"); + usedTabs.addAll(Arrays.asList(tabs)); + } + + private void initAddButton(View rootView) { + Button addButton = rootView.findViewById(R.id.buttonAdd); + addButton.setBackgroundResource(ThemeHelper.getIconByAttr(R.attr.ic_add, getActivity())); + addButton.setOnClickListener(v -> { + ContentSettingsMainDialog contentSettingsMainDialog = new ContentSettingsMainDialog(); + contentSettingsMainDialog.setOnAddListener((int position) -> { + addTab(position); + }); + contentSettingsMainDialog.show(getFragmentManager(), "select_channel"); + }); + } + + private void tabNames() { + allTabs[0] = getString(R.string.blank_page_summary); + allTabs[1] = getString(R.string.kiosk_page_summary); + allTabs[2] = getString(R.string.subscription_page_summary); + allTabs[3] = getString(R.string.feed_page_summary); + allTabs[4] = getString(R.string.tab_bookmarks); + allTabs[5] = getString(R.string.title_activity_history); + allTabs[6] = getString(R.string.channel_page_summary); + } + + private void addTab(int position) { + if(position!=6) { + usedTabs.add(String.valueOf(position)); + usedAdapter.notifyDataSetChanged(); + saveChanges(); + } else { + SelectChannelFragment selectChannelFragment = new SelectChannelFragment(); + selectChannelFragment.setOnSelectedLisener((String url, String name, int service) -> { + usedTabs.add(position+"\t"+url+"\t"+name+"\t"+service); + usedAdapter.notifyDataSetChanged(); + saveChanges(); + }); + selectChannelFragment.show(getFragmentManager(), "select_channel"); + } + } + + public class UsedAdapter extends RecyclerView.Adapter + implements ItemTouchHelperAdapter { + // ... code from gist + @Override + public void onItemDismiss(int position) { + usedTabs.remove(position); + notifyItemRemoved(position); + saveChanges(); + } + + @Override + public void onItemMove(int fromPosition, int toPosition) { + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(usedTabs, i, i + 1); + } + } else { + for (int i = fromPosition; i > toPosition; i--) { + Collections.swap(usedTabs, i, i - 1); + } + } + notifyItemMoved(fromPosition, toPosition); + saveChanges(); + } + + @Override + public ContentSettingsMain.UsedAdapter.TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + LayoutInflater inflater = LayoutInflater.from(getContext()); + View view = inflater.inflate(R.layout.dialog_contentsettingtab, parent, false); + return new ContentSettingsMain.UsedAdapter.TabViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ContentSettingsMain.UsedAdapter.TabViewHolder holder, int position) { + holder.bind(position); + } + + @Override + public int getItemCount() { + return usedTabs.size(); + } + + class TabViewHolder extends RecyclerView.ViewHolder { + + TextView text; + Button remove; + Button up; + Button down; + + public TabViewHolder(View itemView) { + super(itemView); + + text = itemView.findViewById(R.id.tabName); + } + + void bind(int position) { + if(usedTabs.get(position).startsWith("6\t")) { + String channelInfo[] = usedTabs.get(position).split("\t"); + String channelName = ""; + if(channelInfo.length==4) channelName = channelInfo[2]; + String textToSet = allTabs[6]+": "+channelName; + text.setText(textToSet); + } else { + text.setText(allTabs[Integer.parseInt(usedTabs.get(position))]); + } + } + } + } + + public class DividerItemDecoration extends RecyclerView.ItemDecoration { + + private final int[] ATTRS = new int[]{android.R.attr.listDivider}; + + private Drawable divider; + + public DividerItemDecoration(Context context) { + final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); + divider = styledAttributes.getDrawable(0); + styledAttributes.recycle(); + } + + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + int left = parent.getPaddingLeft(); + int right = parent.getWidth() - parent.getPaddingRight(); + + int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = parent.getChildAt(i); + + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + int top = child.getBottom() + params.bottomMargin; + int bottom = top + divider.getIntrinsicHeight(); + + divider.setBounds(left, top, right, bottom); + divider.draw(c); + } + } + } + + public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback { + + private final ItemTouchHelperAdapter mAdapter; + + public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) { + mAdapter = adapter; + } + + @Override + public boolean isLongPressDragEnabled() { + return true; + } + + @Override + public boolean isItemViewSwipeEnabled() { + return true; + } + + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, + RecyclerView.ViewHolder target) { + mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); + } + } + + public interface ItemTouchHelperAdapter { + + void onItemMove(int fromPosition, int toPosition); + + void onItemDismiss(int position); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMainDialog.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMainDialog.java new file mode 100644 index 000000000..513c7cd69 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsMainDialog.java @@ -0,0 +1,164 @@ +package org.schabi.newpipe.settings; + +import android.app.Dialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.database.subscription.SubscriptionEntity; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ContentSettingsMainDialog extends DialogFragment { + + + public AllAdapter allAdapter; + + public String[] allTabs = new String[7]; + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.dialog_contentsettingsadd, container); + } + + + @Override + public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) { + super.onViewCreated(rootView, savedInstanceState); + + tabNames(); + + RecyclerView allTabs = rootView.findViewById(R.id.allTabs); + allTabs.setLayoutManager(new LinearLayoutManager(getContext())); + allAdapter = new AllAdapter(); + allTabs.setAdapter(allAdapter); + allTabs.addItemDecoration(new DividerItemDecoration(getActivity())); + } + + private void tabNames() { + allTabs[0] = getString(R.string.blank_page_summary); + allTabs[1] = getString(R.string.kiosk_page_summary); + allTabs[2] = getString(R.string.subscription_page_summary); + allTabs[3] = getString(R.string.feed_page_summary); + allTabs[4] = getString(R.string.tab_bookmarks); + allTabs[5] = getString(R.string.title_activity_history); + allTabs[6] = getString(R.string.channel_page_summary); + } + + public interface OnAddListener { + void onAddListener(int position); + } + ContentSettingsMainDialog.OnAddListener onAddListener = null; + public void setOnAddListener(ContentSettingsMainDialog.OnAddListener listener) { + onAddListener = listener; + } + + private void addTab(int position) { + if(onAddListener != null) { + onAddListener.onAddListener(position); + } + dismiss(); + } + + public class AllAdapter extends RecyclerView.Adapter{ + + @Override + public TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + LayoutInflater inflater = LayoutInflater.from(getContext()); + View view = inflater.inflate(R.layout.dialog_contentsettingtab, parent, false); + return new TabViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull TabViewHolder holder, int position) { + holder.bind(position); + } + + @Override + public int getItemCount() { + return allTabs.length; + } + + class TabViewHolder extends RecyclerView.ViewHolder { + + TextView text; + Button add; + Button up; + Button down; + View view; + + public TabViewHolder(View itemView) { + super(itemView); + + text = itemView.findViewById(R.id.tabName); + add = itemView.findViewById(R.id.buttonAddRemove); + up = itemView.findViewById(R.id.buttonUp); + down = itemView.findViewById(R.id.buttonDown); + view = itemView; + } + + void bind(int position) { + up.setBackgroundResource(0); + down.setBackgroundResource(0); + text.setText(allTabs[position]); + add.setBackgroundResource(0); + view.setOnClickListener(v -> { + addTab(position); + }); + + } + } + } + + public class DividerItemDecoration extends RecyclerView.ItemDecoration { + + private final int[] ATTRS = new int[]{android.R.attr.listDivider}; + + private Drawable divider; + + public DividerItemDecoration(Context context) { + final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); + divider = styledAttributes.getDrawable(0); + styledAttributes.recycle(); + } + + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + int left = parent.getPaddingLeft(); + int right = parent.getWidth() - parent.getPaddingRight(); + + int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = parent.getChildAt(i); + + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + int top = child.getBottom() + params.bottomMargin; + int bottom = top + divider.getIntrinsicHeight(); + + divider.setBounds(left, top, right, bottom); + divider.draw(c); + } + } + } +} diff --git a/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9dabcc49012be62e08d25cc8faf98c2258d5544c GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtCQlc~kcwMxZ*1gjFc4t9(4!u~ zp(%U(*sDlY)X{7e18zV>bV~N=#7K{Fh#pCnwYye4hGPRT8Kh4i=~%h~V!# zb&EmgVC?t4z2;o|=P@xbTwqkVzS~+WdT{~oyIFgVz*U17^0Q*>x#k(UO`p5B>j{T= RM$#3KsHdx+%Q~loCIJ3}JFNf! literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e8515bd8f773aecb18a5520644231d495d6eaed1 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtPEQxdkcwMxZ*1gjFc4t9(4!u~ zp(%U(*syw?7xYMU+un5C_ejhA`j36IQSs# z5Nma>n|ZStgLlF80_Hxq#P>HD85rsqPMp6hJ9TZ~4z_aNxFooGAfus=;pb0{iqjHz Z%Nf0TWc&?pKFtKld%F6$taD0e0syzaKED6} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c78873b814a4398b015b92d7bd1cc74070365db7 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJY)==*kcwN$2@3o(m_N#ykjZG8TQ0goL|Ar*2=82 zaOEtKIc-Nbs2H6wl-FfPXuHDrgvmQYx2vc3q#*~x-`UrGFOHAc4z!lR)78&qol`;+ E04VA>f&c&j literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b2cd3a6d9fd6eb8ec5cf476cd7ee7c07f4d905 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=k0IPZ!6Kid%258gd;_;Au@fza&7g zY8oG(?NaaW_fEPMXiPfFbLo(LMe@A+3a{oQW~~hjYOC0u^<+bA5&un~eg=jE_Kce( zZhcDG#ALx^yN^+CX-+6tgFi#i{;S58Q#a+j=-k5$QOD)+SG-m|Vwar%o#)D)?VFQ9 N!k(^vF6*2UngHCGJQe@| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6334d7f51d15972139a6b3d2dd6f88ee2b8f85 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=OFUg1Ln>~)y=l$WU?9M9;m&2R z4MJ;d`=++usOI8-%Km%FNwJT-K64+2a(il;9lmROSw8j&o*nLx616XBC#IU{v>XaSW-r_4dw2&O;6oZ4b4R zxE>$)_K0a4qpU*#hvE&3Ddi8vPPjhhx6!Xz`rzqCuMW+l`P0i!NsGUmab0!oy7Sdf z_KLrY`pCl2z`!8Dz`(@dz`(!(G?+nwfdQ)^&~7OBvt(V}#TC+0jCqy6AEeK|pKNzM z-uuc_Zc9@Jo7d^e^Vjb2nfH#jee?Sq7Kn}*9tH*=VrDq-kEdW|xwP{8s|7nUnV)O@ zXS2L7_LlkmhDT*z1pegAu84csDFL&F6xspm_yujJTy^v(-xpu^M><9PZ-IQTc>m7L S?i#y5hIzXBxvXU{vvRaSW-r_4dw2-lhPF) + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_marginBottom="5dp" + android:orientation="horizontal" + android:paddingBottom="3dp" + android:paddingTop="3dp"> - + - +