FolderActivity.java (10994B)
1 /** 2 * 3 */ 4 package de.openrat.android.client; 5 6 import java.io.IOException; 7 import java.util.ArrayList; 8 import java.util.List; 9 import java.util.Map; 10 11 import android.app.AlertDialog; 12 import android.app.ListActivity; 13 import android.content.DialogInterface; 14 import android.content.Intent; 15 import android.content.DialogInterface.OnClickListener; 16 import android.database.Cursor; 17 import android.net.Uri; 18 import android.os.Bundle; 19 import android.provider.MediaStore; 20 import android.view.ContextMenu; 21 import android.view.Menu; 22 import android.view.MenuInflater; 23 import android.view.MenuItem; 24 import android.view.View; 25 import android.view.View.OnCreateContextMenuListener; 26 import android.widget.AdapterView; 27 import android.widget.ListAdapter; 28 import android.widget.ListView; 29 import android.widget.Toast; 30 import android.widget.AdapterView.AdapterContextMenuInfo; 31 import android.widget.AdapterView.OnItemClickListener; 32 import de.openrat.android.client.adapter.FolderContentAdapter; 33 import de.openrat.android.client.service.PublishIntentService; 34 import de.openrat.android.client.service.UploadIntentService; 35 import de.openrat.android.client.util.OpenRatClientAsyncTask; 36 import de.openrat.client.OpenRatClient; 37 38 /** 39 * @author dankert 40 * 41 */ 42 public class FolderActivity extends ListActivity 43 { 44 45 private static final String ID2 = "id"; 46 public static final String CLIENT = "client"; 47 private static final String NAME = "name"; 48 private static final String TYP = "type"; 49 private static final String DESCRIPTION = "description"; 50 private static final int ACTIVITY_CHOOSE_FILE = 1; 51 private static final int ACTIVITY_CHOOSE_IMAGE = 2; 52 private OpenRatClient client; 53 private List<FolderEntry> data; 54 private String folderid; 55 56 @Override 57 protected void onCreate(Bundle savedInstanceState) 58 { 59 setContentView(R.layout.listing); 60 61 super.onCreate(savedInstanceState); 62 63 data = new ArrayList<FolderEntry>(); 64 client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); 65 66 new OpenRatClientAsyncTask(this, R.string.waitingforcontent) 67 { 68 @Override 69 protected void callServer() throws IOException 70 { 71 folderid = getIntent().getStringExtra("folderid"); 72 if (folderid == null) 73 folderid = client.getRootFolder(); 74 75 data = client.getFolderEntries(folderid); 76 } 77 78 protected void doOnSuccess() 79 { 80 final ListAdapter adapter = new FolderContentAdapter( 81 FolderActivity.this, data); 82 setListAdapter(adapter); 83 }; 84 85 }.execute(); 86 87 ListView list = getListView(); 88 89 list.setOnItemClickListener(new OnItemClickListener() 90 { 91 92 @Override 93 public void onItemClick(AdapterView<?> parent, View view, 94 int position, long id) 95 { 96 FolderEntry entry = data.get(position); 97 98 final Intent intent; 99 switch (entry.type) 100 { 101 case FOLDER: 102 103 intent = new Intent(FolderActivity.this, 104 FolderActivity.class); 105 intent.putExtra(CLIENT, client); 106 intent.putExtra("folderid", entry.id); 107 startActivity(intent); 108 break; 109 case PAGE: 110 intent = new Intent(FolderActivity.this, 111 PageElementsActivity.class); 112 intent.putExtra(CLIENT, client); 113 intent.putExtra(PageElementsActivity.ID, entry.id); 114 startActivity(intent); 115 break; 116 case FILE: 117 intent = new Intent(FolderActivity.this, 118 FileShowActivity.class); 119 intent.putExtra(CLIENT, client); 120 intent.putExtra(FileShowActivity.ID, entry.id); 121 startActivity(intent); 122 break; 123 default: 124 } 125 } 126 }); 127 128 list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() 129 { 130 131 @Override 132 public void onCreateContextMenu(ContextMenu menu, View v, 133 ContextMenu.ContextMenuInfo menuInfo) 134 { 135 MenuInflater menuInflater = getMenuInflater(); 136 menuInflater.inflate(R.menu.context, menu); 137 // menu.add(0, 5, 0, "Click Me"); 138 139 } 140 141 }); 142 /** 143 * 144 list.setonOnItemLongClickListener(new OnItemLongClickListener() { 145 * 146 * @Override public boolean onItemLongClick(AdapterView<?> parent, View 147 * view, int position, long id) { Map<String, String> entry = 148 * data.get(position); 149 * 150 * final Intent intent; intent = new 151 * Intent(FolderActivity.this, PropertiesActivity.class); 152 * intent.putExtra(CLIENT, request); 153 * intent.putExtra("objectid", entry.get(ID2)); 154 * startActivity(intent); return true; } }); 155 */ 156 } 157 158 public boolean onContextItemSelected(MenuItem item) 159 { 160 161 switch (item.getItemId()) 162 { 163 164 case R.id.menu_properties: 165 166 // This is actually where the magic happens. 167 168 // As we use an adapter view (which the ListView is) 169 170 // We can cast item.getMenuInfo() to AdapterContextMenuInfo 171 172 AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item 173 .getMenuInfo(); 174 175 // To get the id of the clicked item in the list use menuInfo.id 176 177 // Log.d("t", "list pos:" + menuInfo.position + " id:" + 178 // menuInfo.id); 179 FolderEntry entry = data.get(menuInfo.position); 180 final Intent intent; 181 intent = new Intent(FolderActivity.this, 182 PropertiesActivity.class); 183 intent.putExtra(CLIENT, client); 184 intent.putExtra("objectid", entry.id); 185 intent.putExtra(TYP, entry.type.name().toLowerCase()); 186 startActivity(intent); 187 return true; 188 189 case R.id.menu_delete: 190 191 final AdapterContextMenuInfo mInfo = (AdapterView.AdapterContextMenuInfo) item 192 .getMenuInfo(); 193 194 AlertDialog.Builder builder = new AlertDialog.Builder(this); 195 builder.setMessage( 196 getResources().getString(R.string.areyousure)) 197 .setCancelable(true).setPositiveButton( 198 getResources().getString(R.string.delete), 199 new DialogInterface.OnClickListener() 200 { 201 public void onClick(DialogInterface dialog, 202 int id) 203 { 204 final FolderEntry en = data 205 .get(mInfo.position); 206 207 new OpenRatClientAsyncTask( 208 FolderActivity.this, 209 R.string.waitingfordelete) 210 { 211 @Override 212 protected void callServer() 213 throws IOException 214 { 215 client.delete(folderid, en.id); 216 } 217 }.execute(); 218 } 219 }); 220 AlertDialog alert = builder.create(); 221 alert.show(); 222 223 return true; 224 225 case R.id.menu_publish: 226 227 menuInfo = (AdapterView.AdapterContextMenuInfo) item 228 .getMenuInfo(); 229 entry = data.get(menuInfo.position); 230 231 final Intent publishIntent = new Intent(this, 232 PublishIntentService.class); 233 234 publishIntent.putExtra(PublishIntentService.EXTRA_REQUEST, 235 client); 236 publishIntent.putExtra(PublishIntentService.EXTRA_TYPE, 237 entry.type.name().toLowerCase()); 238 publishIntent.putExtra(PublishIntentService.EXTRA_NAME, 239 entry.name); 240 publishIntent.putExtra(PublishIntentService.EXTRA_ID, entry.id); 241 startService(publishIntent); 242 243 Toast.makeText(this, R.string.publish, Toast.LENGTH_SHORT); 244 245 return true; 246 247 default: 248 249 return super.onContextItemSelected(item); 250 251 } 252 253 } 254 255 @Override 256 public boolean onCreateOptionsMenu(Menu menu) 257 { 258 super.onCreateOptionsMenu(menu); 259 MenuInflater mi = new MenuInflater(getApplication()); 260 mi.inflate(R.menu.folder, menu); 261 262 return true; 263 } 264 265 public boolean onOptionsItemSelected(MenuItem item) 266 { 267 switch (item.getItemId()) 268 { 269 case R.id.menu_language: 270 new OpenRatClientAsyncTask(FolderActivity.this, 271 R.string.waitingforlanguageload) 272 { 273 private Map<String, String> languages; 274 275 @Override 276 protected void callServer() throws IOException 277 { 278 languages = client.getLanguages(); 279 } 280 281 @Override 282 protected void doOnSuccess() 283 { 284 AlertDialog.Builder builder = new AlertDialog.Builder( 285 FolderActivity.this); 286 final String[] languageIds = languages.keySet() 287 .toArray(new String[0]); 288 final String[] languageNames = languages.values() 289 .toArray(new String[0]); 290 291 builder.setTitle(R.string.language).setItems( 292 languageNames, new OnClickListener() 293 { 294 295 @Override 296 public void onClick(DialogInterface dialog, 297 int which) 298 { 299 final String newlanguageid = languageIds[which]; 300 new OpenRatClientAsyncTask( 301 FolderActivity.this, 302 R.string.waitingforlanguagesave) 303 { 304 @Override 305 protected void callServer() 306 throws IOException 307 { 308 client 309 .setLanguage(newlanguageid); 310 } 311 }.execute(); 312 //alert.cancel(); 313 } 314 }); 315 final AlertDialog alert = builder.create(); 316 alert.show(); 317 } 318 }.execute(); 319 320 return true; 321 322 case R.id.menu_upload: 323 324 Intent chooseFile; 325 Intent intent; 326 chooseFile = new Intent(Intent.ACTION_GET_CONTENT); 327 chooseFile.setType("file/*"); 328 intent = Intent.createChooser(chooseFile, getResources() 329 .getString(R.string.choosefile)); 330 startActivityForResult(intent, ACTIVITY_CHOOSE_FILE); 331 return true; 332 case R.id.menu_upload_image: 333 334 chooseFile = new Intent(Intent.ACTION_GET_CONTENT); 335 chooseFile.setType("image/*"); 336 intent = Intent.createChooser(chooseFile, getResources() 337 .getString(R.string.chooseimage)); 338 startActivityForResult(intent, ACTIVITY_CHOOSE_IMAGE); 339 return true; 340 341 case R.id.menu_newfolder: 342 case R.id.menu_newpage: 343 344 intent = new Intent(this, NewActivity.class); 345 intent.putExtra(NewActivity.EXTRA_CLIENT, client); 346 intent.putExtra(NewActivity.EXTRA_MENUID, item.getItemId()); 347 intent.putExtra(NewActivity.EXTRA_FOLDERID, folderid); 348 startActivity(intent); 349 return true; 350 351 default: 352 Toast.makeText(this, "??: " + item.getItemId(), 353 Toast.LENGTH_SHORT); 354 355 } 356 return false; 357 } 358 359 @Override 360 protected void onActivityResult(int requestCode, int resultCode, Intent data) 361 { 362 switch (requestCode) 363 { 364 case ACTIVITY_CHOOSE_FILE: 365 case ACTIVITY_CHOOSE_IMAGE: 366 { 367 if (resultCode == RESULT_OK) 368 { 369 // Upload durchführen 370 Uri uri = data.getData(); 371 372 String filePath; 373 if (requestCode == ACTIVITY_CHOOSE_IMAGE) 374 { 375 376 filePath = getPath(uri); 377 } 378 else 379 { 380 filePath = uri.getPath(); 381 } 382 383 final Intent uploadIntent = new Intent( 384 FolderActivity.this, UploadIntentService.class); 385 uploadIntent.putExtra( 386 UploadIntentService.EXTRA_FILENAME, filePath); 387 uploadIntent.putExtra( 388 UploadIntentService.EXTRA_REQUEST, client); 389 startService(uploadIntent); 390 391 Toast.makeText(this, R.string.publish, 392 Toast.LENGTH_SHORT); 393 } 394 } 395 } 396 } 397 398 public String getPath(Uri uri) 399 { 400 String[] projection = { MediaStore.Images.Media.DATA }; 401 Cursor cursor = managedQuery(uri, projection, null, null, null); 402 int column_index = cursor 403 .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 404 cursor.moveToFirst(); 405 return cursor.getString(column_index); 406 } 407 }