/* 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 } } } }