Set up custom Main Page tabs
This commit is contained in:
parent
8ecbe4c8ad
commit
6675d3e2cd
25 changed files with 458 additions and 177 deletions
|
|
@ -1,6 +1,13 @@
|
|||
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;
|
||||
|
|
@ -20,26 +27,122 @@ import java.util.List;
|
|||
|
||||
public class ContentSettingsDialog extends DialogFragment {
|
||||
|
||||
|
||||
public AllAdapter allAdapter;
|
||||
public UsedAdapter usedAdapter;
|
||||
|
||||
List<String> 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()));
|
||||
allTabs.setAdapter(new allAdapter());
|
||||
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()));
|
||||
}
|
||||
|
||||
public class allAdapter extends RecyclerView.Adapter<allAdapter.TabViewHolder>{
|
||||
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<AllAdapter.TabViewHolder>{
|
||||
|
||||
@Override
|
||||
public TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
|
|
@ -54,45 +157,142 @@ public class ContentSettingsDialog extends DialogFragment {
|
|||
holder.bind(position);
|
||||
}
|
||||
|
||||
|
||||
// Return the size of your dataset (invoked by the layout manager)
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 5;
|
||||
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);
|
||||
switch (position) {
|
||||
case 0:
|
||||
text.setText("Test");
|
||||
break;
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
case 5:
|
||||
break;
|
||||
case 6:
|
||||
break;
|
||||
}
|
||||
add.setOnClickListener(v -> {
|
||||
addTab(position);
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class UsedAdapter extends RecyclerView.Adapter<UsedAdapter.TabViewHolder>{
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ 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,9 +11,11 @@ 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.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;
|
||||
|
|
@ -99,75 +102,9 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
|||
|
||||
addPreferencesFromResource(R.xml.content_settings);
|
||||
|
||||
/*
|
||||
|
||||
final ListPreference mainPageContentPref = (ListPreference) findPreference(getString(R.string.main_page_content_key));
|
||||
mainPageContentPref.setOnPreferenceChangeListener((Preference preference, Object newValueO) -> {
|
||||
final String newValue = newValueO.toString();
|
||||
|
||||
final String mainPrefOldValue =
|
||||
defaultPreferences.getString(getString(R.string.main_page_content_key), "blank_page");
|
||||
final String mainPrefOldSummary = getMainPagePrefSummery(mainPrefOldValue, mainPageContentPref);
|
||||
|
||||
if(newValue.equals(getString(R.string.kiosk_page_key))) {
|
||||
SelectKioskFragment selectKioskFragment = new SelectKioskFragment();
|
||||
selectKioskFragment.setOnSelectedLisener((String kioskId, int service_id) -> {
|
||||
defaultPreferences.edit()
|
||||
.putInt(getString(R.string.main_page_selected_service), service_id).apply();
|
||||
defaultPreferences.edit()
|
||||
.putString(getString(R.string.main_page_selectd_kiosk_id), kioskId).apply();
|
||||
String serviceName = "";
|
||||
try {
|
||||
serviceName = NewPipe.getService(service_id).getServiceInfo().getName();
|
||||
} catch (ExtractionException e) {
|
||||
onError(e);
|
||||
}
|
||||
String kioskName = KioskTranslator.getTranslatedKioskName(kioskId,
|
||||
getContext());
|
||||
|
||||
String summary =
|
||||
String.format(getString(R.string.service_kiosk_string),
|
||||
serviceName,
|
||||
kioskName);
|
||||
|
||||
mainPageContentPref.setSummary(summary);
|
||||
});
|
||||
selectKioskFragment.setOnCancelListener(() -> {
|
||||
mainPageContentPref.setSummary(mainPrefOldSummary);
|
||||
mainPageContentPref.setValue(mainPrefOldValue);
|
||||
});
|
||||
selectKioskFragment.show(getFragmentManager(), "select_kiosk");
|
||||
} else if(newValue.equals(getString(R.string.channel_page_key))) {
|
||||
SelectChannelFragment selectChannelFragment = new SelectChannelFragment();
|
||||
selectChannelFragment.setOnSelectedLisener((String url, String name, int service) -> {
|
||||
defaultPreferences.edit()
|
||||
.putInt(getString(R.string.main_page_selected_service), service).apply();
|
||||
defaultPreferences.edit()
|
||||
.putString(getString(R.string.main_page_selected_channel_url), url).apply();
|
||||
defaultPreferences.edit()
|
||||
.putString(getString(R.string.main_page_selected_channel_name), name).apply();
|
||||
|
||||
mainPageContentPref.setSummary(name);
|
||||
});
|
||||
selectChannelFragment.setOnCancelListener(() -> {
|
||||
mainPageContentPref.setSummary(mainPrefOldSummary);
|
||||
mainPageContentPref.setValue(mainPrefOldValue);
|
||||
});
|
||||
selectChannelFragment.show(getFragmentManager(), "select_channel");
|
||||
} else {
|
||||
mainPageContentPref.setSummary(getMainPageSummeryByKey(newValue));
|
||||
}
|
||||
|
||||
defaultPreferences.edit().putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, true).apply();
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
*/
|
||||
|
||||
Preference contentPreference = findPreference(getString(R.string.main_page_content_key));
|
||||
contentPreference.setOnPreferenceClickListener((Preference p) -> {
|
||||
new ContentSettingsDialog().show(getFragmentManager(),"");
|
||||
new ContentSettingsDialog().show(getFragmentManager(),"select_content");
|
||||
return true;
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue