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;
21 import java.lang.ref.WeakReference;
24 import org.altusmetrum.AltosDroid.R;
26 import android.app.Activity;
27 import android.content.*;
28 import android.graphics.*;
30 import android.view.*;
31 import android.view.View.*;
32 import android.view.inputmethod.*;
33 import android.widget.*;
34 import android.widget.AdapterView.*;
36 import org.altusmetrum.altoslib_11.*;
39 public AltosFrequency frequency;
40 public LinearLayout frequency_view = null;
41 public TextView pretty_view = null;
43 private void update() {
44 if (pretty_view != null && frequency != null)
45 pretty_view.setText(frequency.toString());
48 public void realize(LinearLayout frequency_view,
49 TextView pretty_view) {
50 if (frequency_view != this.frequency_view ||
51 pretty_view != this.pretty_view)
53 this.frequency_view = frequency_view;
54 this.pretty_view = pretty_view;
59 public void set_frequency(AltosFrequency frequency) {
60 this.frequency = frequency;
64 public FrequencyItem(AltosFrequency frequency) {
65 this.frequency = frequency;
69 class FrequencyAdapter extends ArrayAdapter<FrequencyItem> {
71 int selected_item = -1;
73 public FrequencyAdapter(Context context, int in_resource) {
74 super(context, in_resource);
75 resource = in_resource;
81 for (count = 0;; count++) {
84 } catch (IndexOutOfBoundsException ie) {
91 public View getView(int position, View convertView, ViewGroup parent) {
92 FrequencyItem item = getItem(position);
93 if (item.frequency_view == null) {
94 LinearLayout frequency_view = new LinearLayout(getContext());
95 String inflater = Context.LAYOUT_INFLATER_SERVICE;
96 LayoutInflater li = (LayoutInflater) getContext().getSystemService(inflater);
97 li.inflate(resource, frequency_view, true);
99 item.realize(frequency_view,
100 (TextView) frequency_view.findViewById(R.id.frequency));
102 if (position == selected_item)
103 item.frequency_view.setBackgroundColor(Color.RED);
105 item.frequency_view.setBackgroundColor(Color.BLACK);
106 return item.frequency_view;
110 public class ManageFrequenciesActivity extends Activity {
111 private ListView frequencies_view;
114 private Button remove;
117 private EditText set_frequency;
118 private EditText set_description;
120 private HashMap<String,FrequencyItem> frequencies = new HashMap<String,FrequencyItem>();;
122 private FrequencyAdapter frequencies_adapter;
124 private boolean is_bound;
125 private boolean changed = false;
127 private void done() {
132 AltosFrequency[] frequencies = new AltosFrequency[frequencies_adapter.count()];
133 for (int i = 0; i < frequencies.length; i++)
134 frequencies[i] = frequencies_adapter.getItem(i).frequency;
135 AltosPreferences.set_common_frequencies(frequencies);
138 Intent intent = new Intent();
139 setResult(Activity.RESULT_OK, intent);
143 private void load_item() {
144 if (frequencies_adapter.selected_item >= 0) {
145 FrequencyItem item = frequencies_adapter.getItem(frequencies_adapter.selected_item);
147 set_frequency.setText(item.frequency.frequency_string());
148 set_description.setText(item.frequency.description);
150 set_frequency.setText("");
151 set_description.setText("");
155 private void select_item(int position) {
156 if (position != frequencies_adapter.selected_item) {
157 if (frequencies_adapter.selected_item >= 0)
158 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
160 frequencies_view.setItemChecked(position, true);
161 frequencies_adapter.selected_item = position;
163 if (frequencies_adapter.selected_item >= 0)
164 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
165 frequencies_adapter.selected_item = -1;
170 private int find(AltosFrequency frequency) {
171 for (int pos = 0; pos < frequencies_adapter.getCount(); pos++) {
172 FrequencyItem item = frequencies_adapter.getItem(pos);
173 if (item.frequency.frequency == frequency.frequency &&
174 item.frequency.description.equals(frequency.description))
180 private int insert_item(AltosFrequency frequency) {
181 FrequencyItem new_item = new FrequencyItem(frequency);
183 for (pos = 0; pos < frequencies_adapter.getCount(); pos++) {
184 FrequencyItem item = frequencies_adapter.getItem(pos);
185 if (item.frequency.frequency == new_item.frequency.frequency) {
186 item.set_frequency(frequency);
189 if (item.frequency.frequency > new_item.frequency.frequency)
192 frequencies_adapter.insert(new_item, pos);
196 private class FrequencyItemClickListener implements ListView.OnItemClickListener {
198 public void onItemClick(AdapterView<?> av, View v, int position, long id) {
199 select_item(position);
203 private void hide_keyboard() {
204 InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
205 View view = getCurrentFocus();
207 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
211 String frequency_text = set_frequency.getEditableText().toString();
212 String description_text = set_description.getEditableText().toString();
215 double f = AltosParse.parse_double_locale(frequency_text);
216 AltosFrequency frequency = new AltosFrequency(f, description_text);
219 pos = find(frequency);
221 pos = insert_item(frequency);
224 frequencies_adapter.selected_item = -1;
226 } catch (ParseException pe) {
231 private void remove() {
232 if (frequencies_adapter.selected_item >= 0) {
233 frequencies_adapter.remove(frequencies_adapter.getItem(frequencies_adapter.selected_item));
235 frequencies_view.setAdapter(frequencies_adapter);
241 protected void onCreate(Bundle savedInstanceState) {
242 super.onCreate(savedInstanceState);
245 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
246 setContentView(R.layout.manage_frequencies);
248 frequencies_view = (ListView) findViewById(R.id.frequencies);
249 frequencies_view.setClickable(true);
251 frequencies_adapter = new FrequencyAdapter(this, R.layout.frequency);
253 frequencies_view.setAdapter(frequencies_adapter);
254 frequencies_view.setOnItemClickListener(new FrequencyItemClickListener());
256 AltosFrequency[] frequencies = AltosPreferences.common_frequencies();
257 for (AltosFrequency frequency : frequencies)
258 insert_item(frequency);
260 set_frequency = (EditText) findViewById(R.id.set_frequency);
261 set_description = (EditText) findViewById(R.id.set_description);
263 set = (Button) findViewById(R.id.set);
264 set.setOnClickListener(new OnClickListener() {
265 public void onClick(View v) {
270 remove = (Button) findViewById(R.id.remove);
271 remove.setOnClickListener(new OnClickListener() {
272 public void onClick(View v) {
277 done = (Button) findViewById(R.id.done);
278 done.setOnClickListener(new OnClickListener() {
279 public void onClick(View v) {
284 // Set result CANCELED incase the user backs out
285 setResult(Activity.RESULT_CANCELED);
289 protected void onStart() {
294 protected void onResume() {
299 protected void onPause() {
304 protected void onStop() {