/* * Copyright (C) 2015-2016 Willi Ye <williye97@gmail.com> * * This file is part of Kernel Adiutor. * * Kernel Adiutor 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. * * Kernel Adiutor 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 Kernel Adiutor. If not, see <http://www.gnu.org/licenses/>. * */ package com.grarak.kerneladiutor.views.recyclerview; import android.support.v7.widget.AppCompatTextView; import android.view.View; import com.grarak.kerneladiutor.R; import org.adw.library.widgets.discreteseekbar.DiscreteSeekBar; import java.util.ArrayList; import java.util.List; /** * Created by willi on 06.05.16. */ public class SeekBarView extends RecyclerViewItem { public interface OnSeekBarListener { void onStop(SeekBarView seekBarView, int position, String value); void onMove(SeekBarView seekBarView, int position, String value); } private AppCompatTextView mTitle; private AppCompatTextView mSummary; private AppCompatTextView mValue; private DiscreteSeekBar mSeekBar; private CharSequence mTitleText; private CharSequence mSummaryText; private int mMin; private int mMax = 100; private int mProgress; private String mUnit; private List<String> mItems; private int mOffset = 1; private boolean mEnabled = true; private OnSeekBarListener mOnSeekBarListener; @Override public int getLayoutRes() { return R.layout.rv_seekbar_view; } @Override public void onCreateView(final View view) { mTitle = (AppCompatTextView) view.findViewById(R.id.title); mSummary = (AppCompatTextView) view.findViewById(R.id.summary); mValue = (AppCompatTextView) view.findViewById(R.id.value); mSeekBar = (DiscreteSeekBar) view.findViewById(R.id.seekbar); view.findViewById(R.id.button_minus).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSeekBar.setProgress(mSeekBar.getProgress() - 1); if (mOnSeekBarListener != null && mProgress < mItems.size() && mProgress >= 0) { mOnSeekBarListener.onStop(SeekBarView.this, mProgress, mItems.get(mProgress)); } } }); view.findViewById(R.id.button_plus).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSeekBar.setProgress(mSeekBar.getProgress() + 1); if (mOnSeekBarListener != null && mProgress < mItems.size() && mProgress >= 0) { mOnSeekBarListener.onStop(SeekBarView.this, mProgress, mItems.get(mProgress)); } } }); mSeekBar.setOnProgressChangeListener(new DiscreteSeekBar.OnProgressChangeListener() { @Override public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) { if (value < mItems.size() && value >= 0) { mProgress = value; String text = mItems.get(value); if (mUnit != null) text += mUnit; mValue.setText(text); if (mOnSeekBarListener != null) { mOnSeekBarListener.onMove(SeekBarView.this, mProgress, mItems.get(mProgress)); } } } @Override public void onStartTrackingTouch(DiscreteSeekBar seekBar) { } @Override public void onStopTrackingTouch(DiscreteSeekBar seekBar) { try { if (mOnSeekBarListener != null) { mOnSeekBarListener.onStop(SeekBarView.this, mProgress, mItems.get(mProgress)); } } catch (Exception ignored) { } } }); mSeekBar.setFocusable(false); super.onCreateView(view); } public void setTitle(CharSequence title) { mTitleText = title; refresh(); } public void setSummary(CharSequence summary) { mSummaryText = summary; refresh(); } public void setProgress(int progress) { mProgress = progress; refresh(); } public void setMin(int min) { mMin = min; mItems = null; refresh(); } public void setUnit(String unit) { mUnit = unit; mItems = null; refresh(); } public void setMax(int max) { mMax = max; mItems = null; refresh(); } public void setItems(List<String> items) { mItems = items; refresh(); } public void setOffset(int offset) { mOffset = offset; mItems = null; refresh(); } public void setEnabled(boolean enable) { mEnabled = enable; refresh(); } public int getProgress() { return mProgress; } public void setOnSeekBarListener(OnSeekBarListener onSeekBarListener) { mOnSeekBarListener = onSeekBarListener; } @Override protected void refresh() { super.refresh(); if (mTitle != null) { if (mTitleText != null) { mTitle.setText(mTitleText); mTitle.setVisibility(View.VISIBLE); } else { mTitle.setVisibility(View.GONE); } } if (mSummary != null && mSummaryText != null) { mSummary.setText(mSummaryText); } if (mItems == null) { mItems = new ArrayList<>(); for (int i = mMin; i <= mMax; i += mOffset) { mItems.add(String.valueOf(i)); } } if (mSeekBar != null) { mSeekBar.setMax(mItems.size() - 1); mSeekBar.setMin(0); mSeekBar.setEnabled(mEnabled); if (mValue != null) { try { String text = mItems.get(mProgress); mSeekBar.setProgress(mProgress); if (mUnit != null) text += mUnit; mValue.setText(text); } catch (Exception ignored) { mValue.setText(mValue.getResources().getString(R.string.not_in_range)); } } } } }