2 * Copyright © 2016 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19 package org.altusmetrum.AltosDroid;
24 import android.app.Activity;
25 import android.content.*;
26 import android.graphics.*;
28 import android.view.*;
29 import android.view.View.*;
30 import android.view.inputmethod.*;
31 import android.widget.*;
33 import org.altusmetrum.altoslib_14.*;
36 public AltosFrequency frequency;
37 public LinearLayout frequency_view = null;
38 public TextView pretty_view = null;
40 private void update() {
41 if (pretty_view != null && frequency != null)
42 pretty_view.setText(frequency.toString());
45 public void realize(LinearLayout frequency_view,
46 TextView pretty_view) {
47 if (frequency_view != this.frequency_view ||
48 pretty_view != this.pretty_view)
50 this.frequency_view = frequency_view;
51 this.pretty_view = pretty_view;
56 public void set_frequency(AltosFrequency frequency) {
57 this.frequency = frequency;
61 public FrequencyItem(AltosFrequency frequency) {
62 this.frequency = frequency;
66 class FrequencyAdapter extends ArrayAdapter<FrequencyItem> {
68 int selected_item = -1;
70 public FrequencyAdapter(Context context, int in_resource) {
71 super(context, in_resource);
72 resource = in_resource;
78 for (count = 0;; count++) {
81 } catch (IndexOutOfBoundsException ie) {
88 public View getView(int position, View convertView, ViewGroup parent) {
89 FrequencyItem item = getItem(position);
90 if (item.frequency_view == null) {
91 LinearLayout frequency_view = new LinearLayout(getContext());
92 String inflater = Context.LAYOUT_INFLATER_SERVICE;
93 LayoutInflater li = (LayoutInflater) getContext().getSystemService(inflater);
94 li.inflate(resource, frequency_view, true);
96 item.realize(frequency_view,
97 (TextView) frequency_view.findViewById(R.id.frequency));
99 if (position == selected_item)
100 item.frequency_view.setBackgroundColor(Color.RED);
102 item.frequency_view.setBackgroundColor(0);
103 return item.frequency_view;
107 public class ManageFrequenciesActivity extends Activity {
108 private ListView frequencies_view;
111 private Button remove;
114 private EditText set_frequency;
115 private EditText set_description;
117 private HashMap<String,FrequencyItem> frequencies = new HashMap<String,FrequencyItem>();;
119 private FrequencyAdapter frequencies_adapter;
121 private boolean is_bound;
122 private boolean changed = false;
124 private void done() {
129 AltosFrequency[] frequencies = new AltosFrequency[frequencies_adapter.count()];
130 for (int i = 0; i < frequencies.length; i++)
131 frequencies[i] = frequencies_adapter.getItem(i).frequency;
132 AltosPreferences.set_common_frequencies(frequencies);
135 Intent intent = new Intent();
136 setResult(Activity.RESULT_OK, intent);
140 private void load_item() {
141 if (frequencies_adapter.selected_item >= 0) {
142 FrequencyItem item = frequencies_adapter.getItem(frequencies_adapter.selected_item);
144 set_frequency.setText(item.frequency.frequency_string());
145 set_description.setText(item.frequency.description);
147 set_frequency.setText("");
148 set_description.setText("");
152 private void select_item(int position) {
153 if (position != frequencies_adapter.selected_item) {
154 if (frequencies_adapter.selected_item >= 0)
155 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
157 frequencies_view.setItemChecked(position, true);
158 frequencies_adapter.selected_item = position;
160 if (frequencies_adapter.selected_item >= 0)
161 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
162 frequencies_adapter.selected_item = -1;
167 private int find(AltosFrequency frequency) {
168 for (int pos = 0; pos < frequencies_adapter.getCount(); pos++) {
169 FrequencyItem item = frequencies_adapter.getItem(pos);
170 if (item.frequency.frequency == frequency.frequency &&
171 item.frequency.description.equals(frequency.description))
177 private int insert_item(AltosFrequency frequency) {
178 FrequencyItem new_item = new FrequencyItem(frequency);
180 for (pos = 0; pos < frequencies_adapter.getCount(); pos++) {
181 FrequencyItem item = frequencies_adapter.getItem(pos);
182 if (item.frequency.frequency == new_item.frequency.frequency) {
183 item.set_frequency(frequency);
186 if (item.frequency.frequency > new_item.frequency.frequency)
189 frequencies_adapter.insert(new_item, pos);
193 private class FrequencyItemClickListener implements ListView.OnItemClickListener {
195 public void onItemClick(AdapterView<?> av, View v, int position, long id) {
196 select_item(position);
200 private void hide_keyboard() {
201 InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
202 View view = getCurrentFocus();
204 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
208 String frequency_text = set_frequency.getEditableText().toString();
209 String description_text = set_description.getEditableText().toString();
212 double f = AltosParse.parse_double_locale(frequency_text);
213 AltosFrequency frequency = new AltosFrequency(f, description_text);
216 pos = find(frequency);
218 pos = insert_item(frequency);
221 frequencies_adapter.selected_item = -1;
223 } catch (ParseException pe) {
228 private void remove() {
229 if (frequencies_adapter.selected_item >= 0) {
230 frequencies_adapter.remove(frequencies_adapter.getItem(frequencies_adapter.selected_item));
232 frequencies_view.setAdapter(frequencies_adapter);
238 protected void onCreate(Bundle savedInstanceState) {
239 setTheme(AltosDroid.dialog_themes[AltosDroidPreferences.font_size()]);
240 super.onCreate(savedInstanceState);
243 setContentView(R.layout.manage_frequencies);
245 frequencies_view = (ListView) findViewById(R.id.frequencies);
246 frequencies_view.setClickable(true);
248 frequencies_adapter = new FrequencyAdapter(this, R.layout.frequency);
250 frequencies_view.setAdapter(frequencies_adapter);
251 frequencies_view.setOnItemClickListener(new FrequencyItemClickListener());
253 AltosFrequency[] frequencies = AltosPreferences.common_frequencies();
254 for (AltosFrequency frequency : frequencies)
255 insert_item(frequency);
257 set_frequency = (EditText) findViewById(R.id.set_frequency);
258 set_description = (EditText) findViewById(R.id.set_description);
260 set = (Button) findViewById(R.id.set);
261 set.setOnClickListener(new OnClickListener() {
262 public void onClick(View v) {
267 remove = (Button) findViewById(R.id.remove);
268 remove.setOnClickListener(new OnClickListener() {
269 public void onClick(View v) {
274 done = (Button) findViewById(R.id.done);
275 done.setOnClickListener(new OnClickListener() {
276 public void onClick(View v) {
281 // Set result CANCELED incase the user backs out
282 setResult(Activity.RESULT_CANCELED);
286 protected void onStart() {
291 protected void onResume() {
296 protected void onPause() {
301 protected void onStop() {