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.view.inputmethod.*;
32 import android.widget.*;
33 import android.widget.AdapterView.*;
35 import org.altusmetrum.altoslib_11.*;
38 public AltosFrequency frequency;
39 public LinearLayout frequency_view = null;
40 public TextView pretty_view = null;
42 private void update() {
43 if (pretty_view != null && frequency != null)
44 pretty_view.setText(frequency.toString());
47 public void realize(LinearLayout frequency_view,
48 TextView pretty_view) {
49 if (frequency_view != this.frequency_view ||
50 pretty_view != this.pretty_view)
52 this.frequency_view = frequency_view;
53 this.pretty_view = pretty_view;
58 public void set_frequency(AltosFrequency frequency) {
59 this.frequency = frequency;
63 public FrequencyItem(AltosFrequency frequency) {
64 this.frequency = frequency;
68 class FrequencyAdapter extends ArrayAdapter<FrequencyItem> {
70 int selected_item = -1;
72 public FrequencyAdapter(Context context, int in_resource) {
73 super(context, in_resource);
74 resource = in_resource;
80 for (count = 0;; count++) {
83 } catch (IndexOutOfBoundsException ie) {
90 public View getView(int position, View convertView, ViewGroup parent) {
91 FrequencyItem item = getItem(position);
92 if (item.frequency_view == null) {
93 LinearLayout frequency_view = new LinearLayout(getContext());
94 String inflater = Context.LAYOUT_INFLATER_SERVICE;
95 LayoutInflater li = (LayoutInflater) getContext().getSystemService(inflater);
96 li.inflate(resource, frequency_view, true);
98 item.realize(frequency_view,
99 (TextView) frequency_view.findViewById(R.id.frequency));
101 if (position == selected_item)
102 item.frequency_view.setBackgroundColor(Color.RED);
104 item.frequency_view.setBackgroundColor(Color.BLACK);
105 return item.frequency_view;
109 public class ManageFrequenciesActivity extends Activity {
110 private ListView frequencies_view;
113 private Button remove;
116 private EditText set_frequency;
117 private EditText set_description;
119 private HashMap<String,FrequencyItem> frequencies = new HashMap<String,FrequencyItem>();;
121 private FrequencyAdapter frequencies_adapter;
123 private boolean is_bound;
124 private boolean changed = false;
126 private void done() {
131 AltosFrequency[] frequencies = new AltosFrequency[frequencies_adapter.count()];
132 for (int i = 0; i < frequencies.length; i++)
133 frequencies[i] = frequencies_adapter.getItem(i).frequency;
134 AltosPreferences.set_common_frequencies(frequencies);
137 Intent intent = new Intent();
138 setResult(Activity.RESULT_OK, intent);
142 private void load_item() {
143 if (frequencies_adapter.selected_item >= 0) {
144 FrequencyItem item = frequencies_adapter.getItem(frequencies_adapter.selected_item);
146 set_frequency.setText(item.frequency.frequency_string());
147 set_description.setText(item.frequency.description);
149 set_frequency.setText("");
150 set_description.setText("");
154 private void select_item(int position) {
155 if (position != frequencies_adapter.selected_item) {
156 if (frequencies_adapter.selected_item >= 0)
157 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
159 frequencies_view.setItemChecked(position, true);
160 frequencies_adapter.selected_item = position;
162 if (frequencies_adapter.selected_item >= 0)
163 frequencies_view.setItemChecked(frequencies_adapter.selected_item, false);
164 frequencies_adapter.selected_item = -1;
169 private int find(AltosFrequency frequency) {
170 for (int pos = 0; pos < frequencies_adapter.getCount(); pos++) {
171 FrequencyItem item = frequencies_adapter.getItem(pos);
172 if (item.frequency.frequency == frequency.frequency &&
173 item.frequency.description.equals(frequency.description))
179 private int insert_item(AltosFrequency frequency) {
180 FrequencyItem new_item = new FrequencyItem(frequency);
182 for (pos = 0; pos < frequencies_adapter.getCount(); pos++) {
183 FrequencyItem item = frequencies_adapter.getItem(pos);
184 if (item.frequency.frequency == new_item.frequency.frequency) {
185 item.set_frequency(frequency);
188 if (item.frequency.frequency > new_item.frequency.frequency)
191 frequencies_adapter.insert(new_item, pos);
195 private class FrequencyItemClickListener implements ListView.OnItemClickListener {
197 public void onItemClick(AdapterView<?> av, View v, int position, long id) {
198 select_item(position);
202 private void hide_keyboard() {
203 InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
204 View view = getCurrentFocus();
206 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
210 String frequency_text = set_frequency.getEditableText().toString();
211 String description_text = set_description.getEditableText().toString();
214 double f = AltosParse.parse_double_locale(frequency_text);
215 AltosFrequency frequency = new AltosFrequency(f, description_text);
218 pos = find(frequency);
220 pos = insert_item(frequency);
223 frequencies_adapter.selected_item = -1;
225 } catch (ParseException pe) {
230 private void remove() {
231 if (frequencies_adapter.selected_item >= 0) {
232 frequencies_adapter.remove(frequencies_adapter.getItem(frequencies_adapter.selected_item));
234 frequencies_view.setAdapter(frequencies_adapter);
240 protected void onCreate(Bundle savedInstanceState) {
241 super.onCreate(savedInstanceState);
244 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
245 setContentView(R.layout.manage_frequencies);
247 frequencies_view = (ListView) findViewById(R.id.frequencies);
248 frequencies_view.setClickable(true);
250 frequencies_adapter = new FrequencyAdapter(this, R.layout.frequency);
252 frequencies_view.setAdapter(frequencies_adapter);
253 frequencies_view.setOnItemClickListener(new FrequencyItemClickListener());
255 AltosFrequency[] frequencies = AltosPreferences.common_frequencies();
256 for (AltosFrequency frequency : frequencies)
257 insert_item(frequency);
259 set_frequency = (EditText) findViewById(R.id.set_frequency);
260 set_description = (EditText) findViewById(R.id.set_description);
262 set = (Button) findViewById(R.id.set);
263 set.setOnClickListener(new OnClickListener() {
264 public void onClick(View v) {
269 remove = (Button) findViewById(R.id.remove);
270 remove.setOnClickListener(new OnClickListener() {
271 public void onClick(View v) {
276 done = (Button) findViewById(R.id.done);
277 done.setOnClickListener(new OnClickListener() {
278 public void onClick(View v) {
283 // Set result CANCELED incase the user backs out
284 setResult(Activity.RESULT_CANCELED);
288 protected void onStart() {
293 protected void onResume() {
298 protected void onPause() {
303 protected void onStop() {