/*
Swisscom Safe Connect
Copyright (C) 2014 Swisscom
This program 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.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.swisscom.safeconnect.view;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
import com.swisscom.safeconnect.R;
import com.swisscom.safeconnect.utils.Config;
import com.swisscom.safeconnect.utils.Fonts;
/**
* Created by cianci on 9/29/14.
*/
public class PipeListPreference extends ListPreference {
private Context mContext;
private LayoutInflater mInflater;
private CharSequence[] entries;
private CharSequence[] entryValues;
private SharedPreferences prefs;
public PipeListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mInflater = LayoutInflater.from(mContext);
prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
}
public PipeListPreference(Context context) {
this(context, null);
}
public void onBindView(View view) {
super.onBindView(view);
setFonts(view);
}
private void setFonts(View view) {
TextView titleView = (TextView) view.findViewById(android.R.id.title);
titleView.setTypeface(Fonts.FONT_NORMAL);
int summaryId = getContext().getResources().getIdentifier(
"summary", "id", "android");
TextView descrView = (TextView) view.findViewById(summaryId);
descrView.setTypeface(Fonts.FONT_NORMAL);
}
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
builder.setPositiveButton(null, null);
entries = getEntries();
entryValues = getEntryValues();
if (entries == null || entryValues == null || entries.length != entryValues.length ) {
throw new IllegalStateException(
"ListPreference requires an entries array and an entryValues array which are both the same length");
}
CustomListPreferenceAdapter customListPreferenceAdapter = new CustomListPreferenceAdapter();
builder.setAdapter(customListPreferenceAdapter, null);
View titleView = mInflater.inflate(R.layout.custom_title_textview, null);
PipeTextView tvTitle = (PipeTextView) titleView.findViewById(R.id.custom_title);
tvTitle.setText(getTitle());
builder.setCustomTitle(titleView);
}
@Override
protected void showDialog(Bundle state) {
super.showDialog(state);
Button negativeButton = (Button)getDialog().findViewById(android.R.id.button2);
negativeButton.setTypeface(Fonts.FONT_NORMAL);
negativeButton.setTextColor(getContext().getResources().getColor(R.color.accentColor));
}
private class CustomListPreferenceAdapter extends BaseAdapter {
@Override
public int getCount() {
return entries.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
row = mInflater.inflate(R.layout.custom_list_preference_row, parent, false);
ViewHolder viewHolder = new ViewHolder(row, position);
row.setTag(viewHolder);
row.setClickable(true);
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = prefs.edit();
editor.putString(Config.KEY_TRAFFIC_VIEW, String.valueOf(entryValues[position]));
editor.commit();
Dialog mDialog = getDialog();
mDialog.dismiss();
}
});
}
final ViewHolder h = (ViewHolder) row.getTag();
int selected = Integer.parseInt(prefs.getString(Config.KEY_TRAFFIC_VIEW, "2"));
h.rButton.setChecked((position == selected));
return row;
}
class ViewHolder {
TextView textView;
RadioButton rButton;
ViewHolder(View row, final int position) {
textView = (TextView)row.findViewById(R.id.custom_list_view_row_text_view);
textView.setText(entries[position]);
textView.setTypeface(Fonts.FONT_NORMAL);
rButton = (RadioButton)row.findViewById(R.id.custom_list_view_row_radio_button);
rButton.setId(position);
rButton.setClickable(false); //user clicks the row
}
}
}
}