1/*
2 *
3 * Copyright 2001-2011 Texas Instruments, Inc. - http://www.ti.com/
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *    http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package com.ti.fmtxapp;
19
20import java.util.ArrayList;
21
22import android.app.Activity;
23import android.app.AlertDialog;
24import android.content.SharedPreferences;
25import android.os.Bundle;
26import android.util.Log;
27import android.view.Gravity;
28import android.view.KeyEvent;
29import android.view.View;
30import android.widget.AdapterView;
31import android.widget.ArrayAdapter;
32import android.widget.Button;
33import android.widget.CheckBox;
34import android.widget.EditText;
35import android.widget.RadioButton;
36import android.widget.Spinner;
37import android.widget.Toast;
38import android.widget.AdapterView.OnItemSelectedListener;
39import android.content.Intent;
40import android.content.IntentFilter;
41import android.content.Context;
42import android.widget.CompoundButton;
43
44public class FmTxConfig extends Activity implements  View.OnKeyListener,
45View.OnClickListener,CompoundButton.OnCheckedChangeListener,FmTxAppConstants
46{
47
48    public static final String TAG = "FmRxRdsConfig";
49
50    /********************************************
51    * Widgets
52    ********************************************/
53    private Button btnCancel,btnOk;
54    private Spinner spnMonoStereo/*spnEcc,spnRepetoire,spnTxMode,spnDisplayMode*/;
55    private EditText txtPsStr,textPower,edtPiCode,edtAfCode;
56    private EditText edtRadioText,edtPty;
57    private CheckBox rbtnPs,rbtnRt;
58/*    private CheckBox chbRdsMode;
59    private CheckBox chbSetRdsAf;*/
60    //private RadioButton rbtnTp,rbtnTa;
61    private ArrayAdapter<String> monoStereoAdapter;
62//        private ArrayAdapter<String> eccAdapter;
63        /*private ArrayAdapter<String> repertoireAdapter;
64    private ArrayAdapter<String> txModeAdapter;
65        private ArrayAdapter<String> emptyAdapter;
66
67        private ArrayAdapter<String> displayAdapter;        */
68    private ArrayList<String> monoStereoStrings = new ArrayList<String>();
69    private ArrayList<String> eccStrings = new ArrayList<String>();
70    /*private ArrayList<String> repertoireStrings = new ArrayList<String>();
71    private ArrayList<String> emptyStrings = new ArrayList<String>();
72    private ArrayList<String> txModeStrings = new ArrayList<String>();
73    private ArrayList<String> displayStrings = new ArrayList<String>();    */
74
75
76    /********************************************
77    * private variables
78    ********************************************/
79    private Context mContext;
80
81    /********************************************
82    * public variables
83    ********************************************/
84    public SharedPreferences fmConfigPreferences;
85
86        /** Called when the activity is first created. */
87        @Override
88        public void onCreate(Bundle savedInstanceState) {
89          super.onCreate(savedInstanceState);
90          setContentView(R.layout.fmtxrdsconfig);
91          initControl();
92          setSpinners();
93
94
95        }
96
97    /** Initialise the Widget controls of the Activity*/
98    private void initControl()
99        {
100      btnCancel = (Button) findViewById(R.id.btnCancel);
101       btnCancel.setOnKeyListener(this);
102       btnCancel.setOnClickListener(this);
103
104       btnOk = (Button) findViewById(R.id.btnOk);
105       btnOk.setOnKeyListener(this);
106       btnOk.setOnClickListener(this);
107
108    /*    spnDisplayMode = (Spinner)findViewById(R.id.spnDisplayMode);
109       spnTxMode = (Spinner)findViewById(R.id.spnTxMode);
110       spnRepetoire = (Spinner)findViewById(R.id.spnRepetoire);*/
111       spnMonoStereo= (Spinner)findViewById(R.id.spnMonoStereo);
112      // spnEcc= (Spinner)findViewById(R.id.spnEcc);
113
114       txtPsStr = (EditText)findViewById(R.id.EdtPSString);
115    textPower = (EditText)findViewById(R.id.powLevel);
116
117    edtPiCode = (EditText)findViewById(R.id.piCode);
118    edtAfCode = (EditText)findViewById(R.id.afCode);
119    //rbtnTp=(RadioButton)findViewById(R.id.rbtnTp);
120    //rbtnTp.setOnCheckedChangeListener(this);
121
122    //rbtnTa=(RadioButton)findViewById(R.id.rbtnTa);
123    //rbtnTa.setOnCheckedChangeListener(this);
124
125
126    //Edit Box
127    edtRadioText = (EditText)findViewById(R.id.EdtRadioText);
128    edtPty = (EditText)findViewById(R.id.EdtPty);
129
130    rbtnPs = (CheckBox)findViewById(R.id.rbtnPs);
131    rbtnRt = (CheckBox)findViewById(R.id.rbtnRt);
132
133    rbtnPs.setOnCheckedChangeListener(this);
134    rbtnRt.setOnCheckedChangeListener(this);
135
136  }
137
138
139    /** sets the Band , De-Emp Filter and Mode option  selections Spinner for the User*/
140     private void setSpinners()
141     {
142         // Tx Mode Spinner
143      /*    txModeAdapter = new ArrayAdapter<String>(this,
144                       android.R.layout.simple_spinner_item, txModeStrings);
145
146         txModeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
147         spnTxMode.setAdapter(txModeAdapter);
148         txModeAdapter.add("Manual");
149         txModeAdapter.add("Automatic");
150         spnTxMode.setOnItemSelectedListener(gItemSelectedHandler);*/
151
152
153         // Mono/Stereo Spinner
154         monoStereoAdapter = new ArrayAdapter<String>(this,
155                       android.R.layout.simple_spinner_item, monoStereoStrings);
156
157         monoStereoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
158         spnMonoStereo.setAdapter(monoStereoAdapter);
159         //monoStereoAdapter.add("Mono");
160         monoStereoAdapter.add("Stereo");
161         spnMonoStereo.setOnItemSelectedListener(gItemSelectedHandler);
162
163
164         // Ecc Spinner
165         //eccAdapter = new ArrayAdapter<String>(this,                   android.R.layout.simple_spinner_item, eccStrings);
166
167         //eccAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
168         //spnEcc.setAdapter(eccAdapter);
169         //eccAdapter.add("0");
170         //spnEcc.setOnItemSelectedListener(gItemSelectedHandler);
171
172
173         // Repetoire Spinner
174      /*    repertoireAdapter = new ArrayAdapter<String>(this,
175                       android.R.layout.simple_spinner_item, repertoireStrings);
176
177         repertoireAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
178         spnRepetoire.setAdapter(repertoireAdapter);
179         repertoireAdapter.add("G0");
180         repertoireAdapter.add("G1");
181         repertoireAdapter.add("G2");
182         spnRepetoire.setOnItemSelectedListener(gItemSelectedHandler);*/
183
184
185
186         // Display Mode
187        /*  displayAdapter = new ArrayAdapter<String>(this,
188                       android.R.layout.simple_spinner_item, displayStrings);
189
190         displayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
191         spnDisplayMode.setAdapter(displayAdapter);
192         displayAdapter.add("Static");
193         displayAdapter.add("Scroll");
194         spnDisplayMode.setOnItemSelectedListener(gItemSelectedHandler);*/
195
196
197    }
198
199
200
201    public OnItemSelectedListener gItemSelectedHandler = new OnItemSelectedListener()
202    {
203//        @Override
204        public void onItemSelected(AdapterView<?> arg0, View view, int arg2,long arg3) {
205            Log.d(TAG,"mono selected"+arg0.getSelectedItemPosition() );
206
207
208
209            // TODO Auto-generated method stub
210
211        }
212
213//        @Override
214        public void onNothingSelected(AdapterView<?> arg0) {
215            // TODO Auto-generated method stub
216        }
217
218    };
219
220    /** Pops up the alert Dialog */
221        public void showAlert(Context context,String title,String msg)
222    {
223
224       new AlertDialog.Builder(context)
225       .setTitle(title)
226       .setIcon(android.R.drawable.ic_dialog_alert)
227       .setMessage(msg)
228       .setNegativeButton(android.R.string.ok, null)
229       .show();
230
231    }
232
233    //@Override
234    public void onClick(View view)
235    {
236         Log.i(TAG,"onClick()");
237      int id = view.getId();
238      switch (id)
239    {
240
241
242      case R.id.btnCancel:
243           finish();
244              break;
245      case R.id.btnOk:
246           savePrefernces();
247               break;
248
249       default:
250        break;
251      }
252    }
253
254
255    /** Send the Intent to Parent Activity */
256    private void sendAdvanceConfigIntent(){
257
258        Intent rdsIntent = new Intent();
259        setResult(RESULT_OK, rdsIntent);
260             finish();
261
262    }
263
264
265
266    /** Send the Intent to Parent Activity */
267    private void sendRdsIntent(){
268
269        Intent rdsIntent = new Intent();
270        setResult(RESULT_OK, rdsIntent);
271             finish();
272
273    }
274
275
276
277    public void onCheckedChanged(CompoundButton view, boolean isChecked)
278    {
279              Log.i(TAG,"onCheckedChanged()");
280        int id = view.getId();
281   switch(id)
282        {
283         case R.id.rbtnRt:
284
285             Log.i(TAG,"onCheckedChanged() rbtnRt isChecked " +isChecked);
286
287             break;
288         case R.id.rbtnPs:
289
290             Log.i(TAG,"onCheckedChanged() rbtnPs isChecked" +isChecked);
291             }
292
293    }
294
295    //@Override
296    public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
297       int action = keyEvent.getAction();
298
299       if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT) {
300           Log.v(TAG, "KEYCODE_SOFT_RIGHT " );
301           finish();
302          return true;
303       }
304
305       if (keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {
306            Log.v(TAG, "KEYCODE_SOFT_LEFT " );
307            savePrefernces();
308            //finish();
309            return true;
310         }
311
312
313       if (keyCode != KeyEvent.KEYCODE_DPAD_CENTER &&
314          keyCode != KeyEvent.KEYCODE_DPAD_UP &&
315          keyCode != KeyEvent.KEYCODE_DPAD_DOWN &&
316          keyCode != KeyEvent.KEYCODE_ENTER) {
317          return false;
318       }
319
320       if (action == KeyEvent.ACTION_UP) {
321          switch (keyCode) {
322          case KeyEvent.KEYCODE_ENTER:
323          case KeyEvent.KEYCODE_DPAD_CENTER:
324
325             break;
326
327          case KeyEvent.KEYCODE_DPAD_UP:
328
329             break;
330
331          case KeyEvent.KEYCODE_DPAD_DOWN:
332
333             break;
334          }
335       }
336       return true;
337    }
338
339    public void onResume(){
340        super.onResume();
341        Log.i(TAG,"onResume()-Entered");
342        updateUiFromPreference();
343    }
344
345    public void onPause(){
346        super.onPause();
347        Log.i(TAG,"onPause()-Entered");
348
349    }
350
351    public void onStop(){
352        Log.i(TAG,"onStop()-Entered");
353        super.onStop();
354    }
355
356    public void onRestart(){
357        Log.i(TAG,"onRestart()-Entered");
358        super.onRestart();
359
360    }
361
362
363    /** Updates the UI with Default/last saved values */
364    private void updateUiFromPreference() {
365        fmConfigPreferences = getSharedPreferences("fmConfigPreferences",
366                MODE_PRIVATE);
367        Log.i(TAG, "updateUiFromPreference()");
368
369        edtRadioText.setText(fmConfigPreferences.getString(RT_STRING,DEF_RT_STRING));
370        edtPty.setText(fmConfigPreferences.getString(PTY_STRING,DEF_PTY_STRING));
371        edtPiCode.setText(fmConfigPreferences.getString(PICODE_STRING,DEFAULT_PICODE_STRING));
372
373           rbtnPs.setChecked(fmConfigPreferences.getBoolean(PSENABLED,false));
374           rbtnRt.setChecked(fmConfigPreferences.getBoolean(RTENABLED,false));
375
376            Log.i(TAG,"updateUiFromPreference() --> PSENABLED = "+fmConfigPreferences.getBoolean(PSENABLED,false));
377            Log.i(TAG,"updateUiFromPreference() --> RTENABLED = "+fmConfigPreferences.getBoolean(RTENABLED,false));
378
379        textPower.setText(fmConfigPreferences.getString(POWER_STRING,DEF_POWER_STRING));
380        txtPsStr.setText(fmConfigPreferences.getString(PS_STRING,DEF_PS_STRING));
381        Log.i(TAG,"updateUiFromPreference() --> PS_STRING = "+txtPsStr.getText().toString());
382        edtAfCode.setText(fmConfigPreferences.getString(AFCODE_STRING,DEFAULT_AFCODE_STRING));
383
384        /*spnDisplayMode.setSelection(fmConfigPreferences.getInt(DISPLAY_MODE, DEFAULT_DISPLAYMODE));
385        spnTxMode.setSelection(fmConfigPreferences.getInt(TX_MODE, DEFAULT_TXMODE));
386        spnRepetoire.setSelection(fmConfigPreferences.getInt(REPERTOIRE, DEFAULT_REPERTOIRE));*/
387        spnMonoStereo.setSelection(fmConfigPreferences.getInt(MONO_STEREO, DEFAULT_MONOSTEREO));
388        //spnEcc.setSelection(fmConfigPreferences.getInt(ECC, DEFAULT_ECC));
389
390        /*if(spnTxMode.getSelectedItemPosition() == 0) // If Tx Mode is MANUAL, Disable AF Code & PS Strg
391        {
392         edtAfCode.setEnabled(false);
393         txtPsStr.setEnabled(false);
394        }else{
395         edtAfCode.setEnabled(true);
396         txtPsStr.setEnabled(true);
397
398        }*/
399
400    }
401
402
403    /** Saves Configuration  settings  in the Shared Preference */
404    private void savePrefernces(){
405        Log.i(TAG,"savePrefernces()");
406
407        fmConfigPreferences = getSharedPreferences("fmConfigPreferences",MODE_PRIVATE);
408
409        SharedPreferences.Editor editor = fmConfigPreferences.edit();
410
411
412       /*editor.putInt(DISPLAY_MODE, spnDisplayMode.getSelectedItemPosition());
413        editor.putInt(TX_MODE, spnTxMode.getSelectedItemPosition());
414        editor.putInt(REPERTOIRE, spnRepetoire.getSelectedItemPosition());*/
415        editor.putInt(MONO_STEREO, spnMonoStereo.getSelectedItemPosition());
416        //editor.putInt(ECC, spnEcc.getSelectedItemPosition());
417
418        editor.putString(PS_STRING, txtPsStr.getText().toString());
419        editor.putString(RT_STRING, edtRadioText.getText().toString());
420        editor.putString(PTY_STRING, edtPty.getText().toString());
421        editor.putString(PICODE_STRING, edtPiCode.getText().toString());
422        editor.putBoolean(PSENABLED,rbtnPs.isChecked());
423        editor.putBoolean(RTENABLED,rbtnRt.isChecked());
424
425        editor.commit();
426        Log.i(TAG,"savePrefernces() --> PS_STRING = "+txtPsStr.getText().toString());
427        Log.i(TAG,"savePrefernces() --> RT_STRING = "+ edtRadioText.getText().toString());
428
429        savePowerLevel();
430        savePtyCode();
431        sendAdvanceConfigIntent();
432        savePiCode();
433        saveAfCode();
434    }
435
436    /** Checks the Power value for validity */
437    private boolean ptyValid(int value){
438        Log.d(TAG,"ptyValid %d." +value );
439        if (value < PTY_MIN || value > PTY_MAX)
440        {
441            Log.d(TAG,"TAG,ptyValid %d." +value );
442
443            return false;
444        }
445        else
446        return true;
447
448    }
449
450/*********************************************************************
451
452    savePtyCode()
453
454*********************************************************************/
455    private void savePtyCode()
456    {
457        fmConfigPreferences = getSharedPreferences("fmConfigPreferences",MODE_PRIVATE);
458
459        SharedPreferences.Editor editor = fmConfigPreferences.edit();
460
461         try{
462             int ptyValue = Integer.parseInt(edtPty.getText().toString());
463          boolean valid = ptyValid(ptyValue);
464            if(valid || (edtPty.getText().toString()== null))
465            {
466                editor.putString(PTY_STRING, edtPty.getText().toString());
467                if(edtPty.getText().toString()== null)
468                editor.putInt(PTY, DEFAULT_PTY);
469            else
470            {
471                editor.putInt(PTY, ptyValue);
472            }
473                editor.commit();
474            //sendAdvanceConfigIntent();
475            }
476            else
477        {
478           new AlertDialog.Builder(this)
479           .setIcon(android.R.drawable.ic_dialog_alert)
480           .setMessage("Enter valid Pty value in range 0-31!!")
481           .setNegativeButton(android.R.string.ok, null)
482           .show();
483           edtPty.setText(null);
484        }
485         }
486         catch(NumberFormatException nfe)
487         {
488             Log.d(TAG,"--> NumberFormatException:" + nfe.getMessage());
489             new AlertDialog.Builder(this)
490             .setIcon(android.R.drawable.ic_dialog_alert)
491             .setMessage("--> Enter valid pty value in range 0-31!!")
492             .setNegativeButton(android.R.string.ok, null)
493             .show();
494             edtPty.setText(null);
495              }
496
497    }
498
499
500/*********************************************************************
501
502    savePowerLevel()
503
504*********************************************************************/
505    private void savePowerLevel()
506    {
507        fmConfigPreferences = getSharedPreferences("fmConfigPreferences",MODE_PRIVATE);
508
509        SharedPreferences.Editor editor = fmConfigPreferences.edit();
510
511         try{
512             int powerValue = Integer.parseInt(textPower.getText().toString());
513          boolean valid = powerValid(powerValue);
514            if(valid || (textPower.getText().toString()== null))
515            {
516                editor.putString(POWER_STRING, textPower.getText().toString());
517                if(textPower.getText().toString()== null)
518                editor.putInt(POWER, DEFAULT_POWER);
519            else
520            {
521                editor.putInt(POWER, powerValue);
522            }
523                editor.commit();
524            //sendRdsIntent();
525            }
526            else
527        {
528           new AlertDialog.Builder(this)
529           .setIcon(android.R.drawable.ic_dialog_alert)
530           .setMessage("Enter valid Power value in range 0-31!!")
531           .setNegativeButton(android.R.string.ok, null)
532           .show();
533           textPower.setText(null);
534        }
535         }
536         catch(NumberFormatException nfe)
537         {
538             Log.d(TAG,"--> NumberFormatException:" + nfe.getMessage());
539             new AlertDialog.Builder(this)
540             .setIcon(android.R.drawable.ic_dialog_alert)
541             .setMessage("--> Enter valid power value in range 0-31!!")
542             .setNegativeButton(android.R.string.ok, null)
543             .show();
544             textPower.setText(null);
545              }
546
547    }
548
549
550
551/*********************************************************************
552
553    saveAfCode()
554
555*********************************************************************/
556    private void saveAfCode()
557    {
558
559        fmConfigPreferences = getSharedPreferences("fmConfigPreferences",MODE_PRIVATE);
560
561        SharedPreferences.Editor editor = fmConfigPreferences.edit();
562
563        Log.i(TAG,"saveAfCode()");
564         try{
565             int afCodeValue = Integer.parseInt(edtAfCode.getText().toString());
566          boolean valid = afCodeValid(afCodeValue);
567            if(valid || (edtAfCode.getText().toString()== null))
568            {
569                editor.putString(AFCODE_STRING, edtAfCode.getText().toString());
570                if(edtAfCode.getText().toString()== null)
571                editor.putInt(AF_CODE, DEFAULT_AFCODE);
572            else
573            {
574                editor.putInt(AF_CODE, afCodeValue);
575            }
576                editor.commit();
577            //sendRdsIntent();
578            }
579            else
580        {
581           new AlertDialog.Builder(this)
582           .setIcon(android.R.drawable.ic_dialog_alert)
583           .setMessage("Enter valid AfCode value in range 1 - 204!!")
584           .setNegativeButton(android.R.string.ok, null)
585           .show();
586           edtAfCode.setText(null);
587        }
588         }
589         catch(NumberFormatException nfe)
590         {
591             Log.d(TAG,"--> NumberFormatException:" + nfe.getMessage());
592             new AlertDialog.Builder(this)
593             .setIcon(android.R.drawable.ic_dialog_alert)
594             .setMessage("--> Enter valid AfCode value in range 1 - 204 !!")
595             .setNegativeButton(android.R.string.ok, null)
596             .show();
597             edtAfCode.setText(null);
598              }
599
600    }
601
602/*********************************************************************
603
604    savePiCode()
605
606*********************************************************************/
607    private void savePiCode()
608    {
609
610        fmConfigPreferences = getSharedPreferences("fmConfigPreferences",MODE_PRIVATE);
611
612        SharedPreferences.Editor editor = fmConfigPreferences.edit();
613
614            Log.i(TAG,"savePiCode()");
615
616         try{
617             int piCodeValue = Integer.parseInt(edtPiCode.getText().toString());
618             boolean valid = piCodeValid(piCodeValue);
619             if(valid || (edtPiCode.getText().toString()== null))
620             {
621                editor.putString(PICODE_STRING, edtPiCode.getText().toString());
622                if(edtPiCode.getText().toString()== null)
623                editor.putInt(PI_CODE, DEFAULT_PICODE);
624             else
625             {
626                editor.putInt(PI_CODE, piCodeValue);
627             }
628                editor.commit();
629                sendRdsIntent();
630             }
631             else
632        {
633           new AlertDialog.Builder(this)
634           .setIcon(android.R.drawable.ic_dialog_alert)
635           .setMessage("Enter valid Pi Code value in range 0-65535!!")
636           .setNegativeButton(android.R.string.ok, null)
637           .show();
638           edtPiCode.setText(null);
639        }
640         }
641         catch(NumberFormatException nfe)
642         {
643             Log.d(TAG,"--> NumberFormatException:" + nfe.getMessage());
644             new AlertDialog.Builder(this)
645             .setIcon(android.R.drawable.ic_dialog_alert)
646             .setMessage("--> Enter valid Pi Code value in range 0-65535!!")
647             .setNegativeButton(android.R.string.ok, null)
648             .show();
649             edtPiCode.setText(null);
650              }
651
652    }
653
654
655    /** Checks the Power value for validity */
656    private boolean powerValid(int value){
657        Log.d(TAG,"powerValid %d." +value );
658        if (value < POWER_MIN || value > POWER_MAX)
659        {
660            Log.d(TAG,"TAG,powerValid %d." +value );
661
662            return false;
663        }
664        else
665        return true;
666
667    }
668
669    /** Checks the AF code value for validity */
670    private boolean afCodeValid(int value){
671        Log.d(TAG,"afCodeValid %d." +value );
672        if ((value < AFCODE_MIN || value > AFCODE_MAX))
673        {
674            if(value != DEFAULT_AFCODE){
675            Log.d(TAG,"TAG,afCodeValid %d." +value );
676            return false;
677            }else{
678            return true;
679            }
680            //return false;
681        }
682        else
683        return true;
684
685    }
686
687    /** Checks the pi Code value for validity */
688    private boolean piCodeValid(int value){
689        Log.d(TAG,"piCodeValid %d." +value );
690        if (value < PICODE_MIN || value > PICODE_MAX)
691        {
692            Log.d(TAG,"TAG,piCodeValid %d." +value );
693
694            return false;
695        }
696        else
697        return true;
698
699    }
700}
701