1 package com.gpac.Osmo4.extra;
2 
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.text.Html;
6 import android.text.method.ScrollingMovementMethod;
7 import android.util.Log;
8 import android.view.KeyEvent;
9 import android.view.View;
10 import android.widget.AdapterView;
11 import android.widget.ArrayAdapter;
12 import android.widget.AutoCompleteTextView;
13 import android.widget.Button;
14 import android.widget.EditText;
15 import android.widget.TextView;
16 import android.widget.Toast;
17 
18 import com.gpac.Osmo4.R;
19 
20 
21 public class ConfigFileEditorActivity extends Activity {
22 
23     private String TAG = "ConfigFileEditorActivity";
24 
25     private AutoCompleteTextView optionsTextView;
26     private TextView typeTextView;
27     private TextView dfaultTextView;
28     private TextView usageTextView;
29     private TextView descriptionTextView;
30     private TextView currentValueTextView;
31     private EditText newValueEditText;
32     private Button saveButton;
33     private String currentValue;
34 
35     private ConfigFileEditor editor;
36     private ConfigFileEditor.Attribute attribute;
37     private String currentName;
38 
39     @Override
onCreate(Bundle savedInstanceState)40     protected void onCreate(Bundle savedInstanceState) {
41         super.onCreate(savedInstanceState);
42         setContentView(R.layout.activity_config_file_editor);
43 
44         optionsTextView = (AutoCompleteTextView) findViewById(R.id.optionsTextView);
45         typeTextView = (TextView) findViewById(R.id.typeTextView);
46         dfaultTextView = (TextView) findViewById(R.id.dfaultTextView);
47         usageTextView = (TextView) findViewById(R.id.usageTextView);
48         descriptionTextView = (TextView) findViewById(R.id.descriptionTextView);
49         currentValueTextView = (TextView) findViewById(R.id.currentValueEditText);
50         newValueEditText = (EditText) findViewById(R.id.newValueEditText);
51         saveButton = (Button) findViewById(R.id.saveButton);
52 
53         descriptionTextView.setMovementMethod(new ScrollingMovementMethod());
54         editor = new ConfigFileEditor(this);
55         final String[]keys = editor.getAllKeys();
56         final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
57                 android.R.layout.simple_dropdown_item_1line, keys);
58         optionsTextView.setAdapter(adapter);
59 
60         optionsTextView.setOnClickListener(onOptionTextViewClick);
61         optionsTextView.setOnItemClickListener(onItemClick);
62         optionsTextView.setOnKeyListener(keyListener);
63         saveButton.setOnClickListener(onSaveButtonClick);
64     }
65 
66     private View.OnClickListener onOptionTextViewClick = new View.OnClickListener() {
67         @Override
68         public void onClick(View v) {
69             optionsTextView.showDropDown();
70         }
71     };
72 
73     private AdapterView.OnItemClickListener onItemClick = new AdapterView.OnItemClickListener() {
74         @Override
75         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
76             setAllFields((String) parent.getItemAtPosition(position));
77         }
78     };
79 
80     private View.OnKeyListener keyListener = new View.OnKeyListener() {
81         @Override
82         public boolean onKey(View v, int keyCode, KeyEvent event) {
83             if(event.getAction() == KeyEvent.ACTION_DOWN &&
84                     keyCode == KeyEvent.KEYCODE_ENTER) {
85                 currentName = optionsTextView.getText().toString().trim();
86                 if (currentName == null || currentName.equals("")) {
87                     return false;
88                 } else {
89                     optionsTextView.dismissDropDown();
90                     setAllFields(currentName);
91                     return true;
92                 }
93             }
94             return false;
95         }
96     };
97 
98     private View.OnClickListener onSaveButtonClick = new View.OnClickListener() {
99         @Override
100         public void onClick(View v) {
101             String newValue = newValueEditText.getText().toString().trim();
102             if(newValue == null || newValue.equals("")) {
103                 Toast.makeText(ConfigFileEditorActivity.this, "New value is empty", Toast.LENGTH_LONG).show();
104                 return;
105             }
106 
107             if(currentValue == null){
108                 Log.e(TAG, getString(R.string.noKey));
109                 return;
110             }
111 
112             if (newValue.equals(currentValue)){
113                 Toast.makeText(ConfigFileEditorActivity.this, getString(R.string.noChange), Toast.LENGTH_LONG).show();
114                 return;
115             }
116 
117             if(editor.isValueValid(currentName, newValue)){
118                 editor.setValue(currentName, newValue);
119                 setAllFields(currentName);
120                 Toast.makeText(ConfigFileEditorActivity.this, getString(R.string.valueUpdated), Toast.LENGTH_LONG).show();
121                 newValueEditText.setText("");
122             } else {
123                 Toast.makeText(ConfigFileEditorActivity.this, getString(R.string.valueNotValid), Toast.LENGTH_LONG).show();
124                 Log.e(TAG, getString(R.string.valueNotValid));
125             }
126 
127         }
128     };
129 
setAllFields(String key)130     private void setAllFields(String key) {
131         currentName = key;
132         attribute = editor.getAllAttributesForKey(key);
133         if(attribute == null) {
134             Log.v(TAG, "no attribute found for the given key in the option file : " + key);
135             typeTextView.setText(getString(R.string.noAttribute));
136             dfaultTextView.setText(getString(R.string.noAttribute));
137             usageTextView.setText(getString(R.string.noAttribute));
138             descriptionTextView.setText(getString(R.string.noAttribute));
139         }
140          else {
141             typeTextView.setText(attribute.getType());
142             dfaultTextView.setText(attribute.getDefault());
143             usageTextView.setText(attribute.getUsage());
144             descriptionTextView.setText(Html.fromHtml(attribute.getDesciption(), null, new XMLTagHandler()));
145             Log.v(TAG, "description " + attribute.getDesciption());
146         }
147         currentValue = editor.getValue(key);
148         if (currentValue == null) currentValueTextView.setText(getString(R.string.noKey)); else currentValueTextView.setText(currentValue);
149     }
150 }