/*
* This file is part of Popcorn Time.
*
* Popcorn Time is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Popcorn Time is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Popcorn Time. If not, see <http://www.gnu.org/licenses/>.
*/
package pct.droid.tv.fragments;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v17.leanback.app.GuidedStepFragment;
import android.support.v17.leanback.widget.GuidanceStylist;
import android.support.v17.leanback.widget.GuidedAction;
import android.view.View;
import android.widget.Toast;
import java.util.Arrays;
import java.util.List;
import pct.droid.base.content.preferences.PrefItem;
import pct.droid.base.content.preferences.PreferencesHandler;
import pct.droid.base.updater.PopcornUpdater;
import pct.droid.base.utils.LocaleUtils;
import pct.droid.tv.R;
import pct.droid.tv.activities.PTVUpdateActivity;
public class PTVPreferencesFragment extends GuidedStepFragment implements PreferencesHandler {
private List<GuidedAction> mActions;
private List<PrefItem> mPrefs;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setSelectedActionPosition(0);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
PopcornUpdater.getInstance(getActivity()).setListener(new PopcornUpdater.Listener() {
@Override
public void updateAvailable(String filePath) {
PTVUpdateActivity.startActivity(getActivity());
}
});
}
@NonNull
@Override
public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
return new GuidanceStylist.Guidance(getString(R.string.preferences), null, getString(R.string.app_name), null);
}
@Override
public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
int index = 0;
mPrefs = PreferencesHandler.ItemsGenerator.generate(getActivity(), this, true);
for(PrefItem item : mPrefs) {
actions.add(generateAction(index, item));
index++;
}
mActions = actions;
super.onCreateActions(actions, savedInstanceState);
}
@Override
public void onGuidedActionClicked(GuidedAction action) {
super.onGuidedActionClicked(action);
int currentPos = getSelectedActionPosition();
mPrefs.get(currentPos).onClick();
setSelectedActionPosition(currentPos);
}
private GuidedAction generateAction(long id, PrefItem item) {
GuidedAction.Builder builder = new GuidedAction.Builder()
.id(id)
.hasNext(item.hasNext())
.enabled(item.isClickable())
.infoOnly(item.isTitle() || !item.isClickable())
.title(item.isTitle() ? item.getTitle().toUpperCase(LocaleUtils.getCurrent()) : item.getTitle());
if (!item.isTitle()) {
builder.description(item.getSubtitle());
if(item.getDefaultValue() instanceof Boolean) {
builder.checked((Boolean) item.getValue());
}
}
return builder.build();
}
@Override
public void openListSelection(String title, String[] items, SelectionMode mode, Object currentValue, final int lowLimit, int highLimit, final OnSelectionListener onClickListener) {
PTVPreferencesListFragment fragment;
switch (mode) {
case SIMPLE_CHOICE:
case ADVANCED_CHOICE:
fragment = PTVPreferencesListFragment.newInstance(title, items, (int) currentValue, new PTVPreferencesListFragment.SelectionListener() {
@Override
public void onSelect(int position) {
onClickListener.onSelection(position, null);
updateAction(getSelectedActionPosition());
}
});
GuidedStepFragment.add(getFragmentManager(), fragment);
break;
case NUMBER:
final String[] array = new String[highLimit - lowLimit + 1];
for(int i = 0; i <= highLimit - lowLimit; i++) {
array[i] = Integer.toString(i + lowLimit);
}
fragment = PTVPreferencesListFragment.newInstance(title, array, ((int) currentValue - lowLimit), new PTVPreferencesListFragment.SelectionListener() {
@Override
public void onSelect(int position) {
onClickListener.onSelection(0, position + lowLimit);
updateAction(getSelectedActionPosition());
}
});
GuidedStepFragment.add(getFragmentManager(), fragment);
break;
case COLOR:
String[] colors = getResources().getStringArray(R.array.subtitle_colors);
final Integer[] colorCodes = new Integer[] {
Color.WHITE, Color.BLACK, Color.YELLOW, Color.RED, Color.BLUE, Color.MAGENTA, Color.GREEN, Color.DKGRAY, Color.LTGRAY
};
fragment = PTVPreferencesListFragment.newInstance(title, colors, Arrays.asList(colorCodes).indexOf(currentValue), new PTVPreferencesListFragment.SelectionListener() {
@Override
public void onSelect(int position) {
onClickListener.onSelection(position, colorCodes[position]);
updateAction(getSelectedActionPosition());
}
});
GuidedStepFragment.add(getFragmentManager(), fragment);
break;
case DIRECTORY:
default:
// Nothing
break;
}
}
@Override
public void showMessage(String message) {
if(message.equals(PreferencesHandler.ABOUT)) {
// todo: show about activity or something
} else {
Toast.makeText(getActivity(), R.string.restart_effect, Toast.LENGTH_SHORT).show();
}
}
private void updateAction(int position) {
GuidedAction action = mActions.get(position);
action.setLabel2(mPrefs.get(position).getSubtitle());
mActions.set(position, action);
super.onCreateActions(mActions, null);
}
}