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; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
18 package org.altusmetrum.AltosDroid;
20 import java.lang.ref.WeakReference;
23 import org.altusmetrum.AltosDroid.R;
25 import android.app.Activity;
26 import android.content.*;
27 import android.graphics.*;
29 import android.view.*;
30 import android.view.View.*;
31 import android.widget.*;
32 import android.widget.AdapterView.*;
34 import org.altusmetrum.altoslib_10.*;
37 public AltosFrequency frequency;
38 public LinearLayout frequency_view = null;
39 public TextView pretty_view = null;
41 private void update() {
42 if (pretty_view != null && frequency != null)
43 pretty_view.setText(frequency.toString());
46 public void realize(LinearLayout frequency_view,
47 TextView pretty_view) {
48 if (frequency_view != this.frequency_view ||
49 pretty_view != this.pretty_view)
51 this.frequency_view = frequency_view;
52 this.pretty_view = pretty_view;
57 public void set_frequency(AltosFrequency frequency) {
58 this.frequency = frequency;
62 public FrequencyItem(AltosFrequency frequency) {
63 this.frequency = frequency;
67 class FrequencyAdapter extends ArrayAdapter<FrequencyItem> {
69 int selected_item = -1;
71 public FrequencyAdapter(Context context, int in_resource) {
72 super(context, in_resource);
73 resource = in_resource;
79 for (count = 0;; count++) {
82 } catch (IndexOutOfBoundsException ie) {
89 public View getView(int position, View convertView, ViewGroup parent) {
90 FrequencyItem item = getItem(position);
91 if (item.frequency_view == null) {
92 LinearLayout frequency_view = new LinearLayout(getContext());
93 String inflater = Context.LAYOUT_INFLATER_SERVICE;
94 LayoutInflater li = (LayoutInflater) getContext().getSystemService(inflater);
95 li.inflate(resource, frequency_view, true);
97 item.realize(frequency_view,
98 (TextView) frequency_view.findViewById(R.id.frequency));
100 if (position == selected_item)
101 item.frequency_view.setBackgroundColor(Color.RED);
103 item.frequency_view.setBackgroundColor(Color.BLACK);
104 return item.frequency_view;
108 public class ManageFrequenciesActivity extends Activity {
109 private ListView frequencies_view;
112 private Button remove;
115 private EditText set_frequency;
116 private EditText set_description;
118 private HashMap<String,FrequencyItem> frequencies = new HashMap<String,FrequencyItem>();;
120 private FrequencyAdapter frequencies_adapter;
122 private boolean is_bound;
123 private boolean changed = false;
125 private void done() {
128 AltosFrequency[] frequencies = new AltosFrequency[frequencies_adapter.count()];
129 for (int i = 0; i < frequencies.length; i++)
130 frequencies[i] = frequencies_adapter.getItem(i).frequency;
131 AltosPreferences.set_common_frequencies(frequencies);
134 Intent intent = new Intent();
135 setResult(Activity.RESULT_OK, intent);
139 private void load_item() {
140 if (frequencies_adapter.selected_item >= 0) {
141 FrequencyItem item = frequencies_adapter.getItem(frequencies_adapter.selected_item);
143 set_frequency.setText(item.frequency.frequency_string());
144 set_description.setText(item.frequency.description);
146 set_frequency.setText("");
147 set_description.setText("");
151 private void select_item(int position) {
152 if (position != frequencies_adapter.selected_item) {
153 if (frequencies_adapter.selected_item >= 0)
154 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
156 frequencies_view.setItemChecked(position, true);
157 frequencies_adapter.selected_item = position;
159 if (frequencies_adapter.selected_item >= 0)
160 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
161 frequencies_adapter.selected_item = -1;
166 private int insert_item(AltosFrequency frequency) {
167 FrequencyItem new_item = new FrequencyItem(frequency);
169 for (pos = 0; pos < frequencies_adapter.getCount(); pos++) {
170 FrequencyItem item = frequencies_adapter.getItem(pos);
171 if (item.frequency.frequency == new_item.frequency.frequency) {
172 item.set_frequency(frequency);
175 if (item.frequency.frequency > new_item.frequency.frequency)
178 frequencies_adapter.insert(new_item, pos);
182 private class FrequencyItemClickListener implements ListView.OnItemClickListener {
184 public void onItemClick(AdapterView<?> av, View v, int position, long id) {
185 select_item(position);
190 String frequency_text = set_frequency.getEditableText().toString();
191 String description_text = set_description.getEditableText().toString();
194 double f = AltosParse.parse_double_locale(frequency_text);
196 int pos = insert_item(new AltosFrequency(f, description_text));
197 frequencies_adapter.selected_item = -1;
200 } catch (ParseException pe) {
204 private void remove() {
205 if (frequencies_adapter.selected_item >= 0) {
206 frequencies_adapter.remove(frequencies_adapter.getItem(frequencies_adapter.selected_item));
208 frequencies_view.setAdapter(frequencies_adapter);
214 protected void onCreate(Bundle savedInstanceState) {
215 super.onCreate(savedInstanceState);
218 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
219 setContentView(R.layout.manage_frequencies);
221 frequencies_view = (ListView) findViewById(R.id.frequencies);
222 frequencies_view.setClickable(true);
224 frequencies_adapter = new FrequencyAdapter(this, R.layout.frequency);
226 frequencies_view.setAdapter(frequencies_adapter);
227 frequencies_view.setOnItemClickListener(new FrequencyItemClickListener());
229 AltosFrequency[] frequencies = AltosPreferences.common_frequencies();
230 for (AltosFrequency frequency : frequencies)
231 insert_item(frequency);
233 set_frequency = (EditText) findViewById(R.id.set_frequency);
234 set_description = (EditText) findViewById(R.id.set_description);
236 set = (Button) findViewById(R.id.set);
237 set.setOnClickListener(new OnClickListener() {
238 public void onClick(View v) {
243 remove = (Button) findViewById(R.id.remove);
244 remove.setOnClickListener(new OnClickListener() {
245 public void onClick(View v) {
250 done = (Button) findViewById(R.id.done);
251 done.setOnClickListener(new OnClickListener() {
252 public void onClick(View v) {
257 // Set result CANCELED incase the user backs out
258 setResult(Activity.RESULT_CANCELED);
262 protected void onStart() {
267 protected void onResume() {
272 protected void onPause() {
277 protected void onStop() {