1 package org.opencpn;
2 
3 import android.content.Context;
4 import android.util.AttributeSet;
5 import android.preference.DialogPreference;
6 import android.view.View;
7 import android.view.LayoutInflater;
8 import android.view.ViewGroup;
9 import android.widget.Button;
10 import android.widget.ListView;
11 import android.widget.ArrayAdapter;
12 import android.widget.AdapterView;
13 import android.util.Log;
14 import android.widget.TextView;
15 
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.List;
19 
20 import org.opencpn.opencpn.R;
21 
22 
23 
24 
25 
26 public class ChartFilesDialogPreference extends DialogPreference
27 {
ChartFilesDialogPreference(Context oContext, AttributeSet attrs)28     public ChartFilesDialogPreference(Context oContext, AttributeSet attrs)
29     {
30         super(oContext, attrs);
31         m_context = oContext;
32 
33 //        setDialogLayoutResource(R.xml.chart_files_dialog_layout);
34 
35         setPositiveButtonText(android.R.string.ok);
36         setNegativeButtonText(android.R.string.cancel);
37 
38         setDialogIcon(null);
39 
40         setPersistent(false);
41     }
42 
getSelected()43     public String getSelected(){
44         return m_selectedItem;
45     }
46 
47     @Override
onCreateDialogView()48     protected View onCreateDialogView() {
49 
50         LayoutInflater inflater = (LayoutInflater)m_context.getSystemService
51               (Context.LAYOUT_INFLATER_SERVICE);
52 
53         View vw = inflater.inflate(R.layout.chart_files_dialog_layout1, null);
54         m_vw = vw;
55 
56         Button btn = (Button) m_vw.findViewById(R.id.buttonRemove);
57         btn.setEnabled(false);
58 
59         String settings = OCPNSettingsActivity.getSettingsString();
60         Log.i("DEBUGGER_TAG", "ChartFilesDialogPreference");
61        // Log.i("DEBUGGER_TAG", settings);
62 
63 
64         m_lv = (ListView) vw.findViewById(R.id.chartdirlist);
65 
66         String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
67             "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
68             "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
69             "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
70             "Android", "iPhone", "WindowsMobile" };
71 
72 //        final ArrayList<String> list = new ArrayList<String>();
73 //        for (int i = 0; i < values.length; ++i) {
74 //          list.add(values[i]);
75 //        }
76 
77         m_chartDirList = OCPNSettingsActivity.getChartDirList();
78 
79         m_adapter = new StableArrayAdapter(m_context,
80                 R.layout.listitem, m_chartDirList);
81 
82         m_lv.setAdapter(m_adapter);
83 
84         m_lv.setSelector(R.drawable.selector);
85 
86         m_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
87 
88            @Override
89            public void onItemClick(AdapterView<?> parent, final View view,
90                int position, long id) {
91                Button btn = (Button) m_vw.findViewById(R.id.buttonRemove);
92                btn.setEnabled(true);
93 
94                // how to change the selected background color
95                //http://www.michenux.net/android-listview-highlight-selected-item-387.html
96              final String item = (String) parent.getItemAtPosition(position);
97              m_selectedItem = item;
98              view.animate().setDuration(2000).alpha(0)
99                  .withEndAction(new Runnable() {
100                    @Override
101                    public void run() {
102                   //   m_chartDirList.remove(item);
103                      m_adapter.notifyDataSetChanged();
104                      view.setAlpha(1);
105                    }
106                  });
107            }
108 
109          });
110 
111         return vw;
112      }
113 
114 
115 //     http://stackoverflow.com/questions/4505845/concise-way-of-writing-new-dialogpreference-classes
116 
addDirectory(View view)117      public void addDirectory(View view) {
118          Log.i("DEBUGGER_TAG", "addDirectoryClick");
119 
120          // Do something in response to button click
121      }
122 
123 
124 //     Button button = (Button) findViewById(R.id.button_send);
125 //     button.setOnClickListener(new View.OnClickListener() {
126 //         public void onClick(View v) {
127              // Do something in response to button click
128 //         }
129 //     });
130 
131 
132 
133 
134      private class StableArrayAdapter extends ArrayAdapter<String> {
135 
136          HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
137 
StableArrayAdapter(Context context, int textViewResourceId, List<String> objects)138          public StableArrayAdapter(Context context, int textViewResourceId,
139              List<String> objects) {
140            super(context, textViewResourceId, objects);
141            for (int i = 0; i < objects.size(); ++i) {
142              mIdMap.put(objects.get(i), i);
143            }
144          }
145 
146          @Override
getItemId(int position)147          public long getItemId(int position) {
148            String item = getItem(position);
149            return mIdMap.get(item);
150          }
151 
152          @Override
hasStableIds()153          public boolean hasStableIds() {
154            return true;
155          }
156 
157          @Override
getView(int position, View convertView, ViewGroup parent)158          public View getView(int position, View convertView, ViewGroup parent) {
159              // Get the data item for this position
160              String user = getItem(position);
161              // Check if an existing view is being reused, otherwise inflate the view
162              if (convertView == null) {
163                  convertView = LayoutInflater.from(getContext()).inflate(R.layout.listitem, parent, false);
164              }
165 
166              TextView Name = (TextView) convertView.findViewById(R.id.listItem);
167              Name.setText(user);
168 
169              // Return the completed view to render on screen
170              return convertView;
171          }
172 
173      }
174 
175 
updateListView()176        public void updateListView(){
177            m_chartDirList = OCPNSettingsActivity.getChartDirList();
178 
179            m_adapter = new StableArrayAdapter(m_context,
180                android.R.layout.simple_list_item_1, m_chartDirList);
181            m_lv.setAdapter(m_adapter);
182 
183            Button btn = (Button) m_vw.findViewById(R.id.buttonRemove);
184            btn.setEnabled(false);
185 
186 //           m_adapter.notifyDataSetChanged();
187 //           view.setAlpha(1);
188        }
189 
190 
191 
192 
193        private Context m_context;
194        public StableArrayAdapter m_adapter;
195        private ArrayList<String> m_chartDirList;
196        private ListView m_lv;
197        private View m_vw;
198        private String m_selectedItem;
199 
200 }
201 
202 
203 
204 
205 
206 
207 
208 
209