android-openrat

Unnamed repository; edit this file 'description' to name the repository.
git clone http://git.code.weiherhei.de/android-openrat.git
Log | Files | Refs

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 }