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