android-openrat

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 6d0023f368c82eae74a123989bbfe7424ac6ba46
parent 709a2f5d1df3bf1c58b6d0f7559dd407f2812924
Author: dankert <devnull@localhost>
Date:   Thu, 27 Oct 2011 22:57:28 +0200

Packagename geändert!

Diffstat:
AndroidManifest.xml | 2+-
src/de/openrat/android/blog/Configuration.java | 15---------------
src/de/openrat/android/blog/EditorActivity.java | 94-------------------------------------------------------------------------------
src/de/openrat/android/blog/FileShowActivity.java | 57---------------------------------------------------------
src/de/openrat/android/blog/FolderActivity.java | 407-------------------------------------------------------------------------------
src/de/openrat/android/blog/FolderEntry.java | 27---------------------------
src/de/openrat/android/blog/NewActivity.java | 119-------------------------------------------------------------------------------
src/de/openrat/android/blog/OpenRatBlog.java | 214-------------------------------------------------------------------------------
src/de/openrat/android/blog/PageElementsActivity.java | 87-------------------------------------------------------------------------------
src/de/openrat/android/blog/ProjectActivity.java | 107-------------------------------------------------------------------------------
src/de/openrat/android/blog/PropertiesActivity.java | 80-------------------------------------------------------------------------------
src/de/openrat/android/blog/Server.java | 62--------------------------------------------------------------
src/de/openrat/android/blog/adapter/FolderContentAdapter.java | 2+-
src/de/openrat/android/blog/service/PublishIntentService.java | 2+-
src/de/openrat/android/blog/service/UploadIntentService.java | 2+-
src/de/openrat/android/client/Configuration.java | 16++++++++++++++++
src/de/openrat/android/client/EditorActivity.java | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/FileShowActivity.java | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/FolderActivity.java | 408+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/FolderEntry.java | 27+++++++++++++++++++++++++++
src/de/openrat/android/client/NewActivity.java | 120+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/OpenRatBlog.java | 215+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/PageElementsActivity.java | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/ProjectActivity.java | 108+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/PropertiesActivity.java | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/android/client/Server.java | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/de/openrat/client/OpenRatClient.java | 4++--
27 files changed, 1285 insertions(+), 1275 deletions(-)

diff --git a/AndroidManifest.xml b/AndroidManifest.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="de.openrat.android.blog" android:versionCode="1" + package="de.openrat.android.client" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/logo" android:label="@string/app_name"> diff --git a/src/de/openrat/android/blog/Configuration.java b/src/de/openrat/android/blog/Configuration.java @@ -1,15 +0,0 @@ -package de.openrat.android.blog; - -import android.os.Bundle; -import android.preference.PreferenceActivity; - -public class Configuration extends PreferenceActivity -{ - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.preferences); - } -} diff --git a/src/de/openrat/android/blog/EditorActivity.java b/src/de/openrat/android/blog/EditorActivity.java @@ -1,94 +0,0 @@ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.Map; - -import android.app.Activity; -import android.os.Bundle; -import android.text.Editable; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.Toast; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.client.OpenRatClient; - -public class EditorActivity extends Activity -{ - public final static String ELEMENTID = "elementid"; - public final static String OBJECTID = "objectid"; - // public final static String TYPE = "type"; - public static final String CLIENT = "client"; - private OpenRatClient client; - private String objectid; - private String elementid; - private String type; - private Map<String, String> properties; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - this.client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); - this.objectid = getIntent().getStringExtra(OBJECTID); - this.elementid = getIntent().getStringExtra(ELEMENTID); - - new OpenRatClientAsyncTask(this, R.string.waitingforcontent) - { - - @Override - protected void callServer() throws IOException - { - properties = client.getValue(objectid, elementid); - type = properties.get("type"); - } - - protected void doOnSuccess() - { - if (type.equals("longtext")) - { - setContentView(R.layout.editor); - final EditText view = (EditText) findViewById(R.id.text); - view.setText(properties.get("text")); - - Button button = (Button) findViewById(R.id.save); - button.setOnClickListener(new OnClickListener() - { - - @Override - public void onClick(View v) - { - final String text = view.getEditableText() - .toString(); - final CheckBox releaseBox = (CheckBox) findViewById(R.id.release); - - new OpenRatClientAsyncTask(EditorActivity.this, - R.string.waitingforsave) - { - - @Override - protected void callServer() throws IOException - { - client.setValue(objectid, elementid, - "longtext", text, releaseBox.isChecked(), false); - } - - protected void doOnSuccess() - { - Toast.makeText(EditorActivity.this, - R.string.saved, Toast.LENGTH_SHORT); - EditorActivity.this.finish(); - }; - }.execute(); - - } - - }); - } - } - }.execute(); - } -} diff --git a/src/de/openrat/android/blog/FileShowActivity.java b/src/de/openrat/android/blog/FileShowActivity.java @@ -1,57 +0,0 @@ -/** - * - */ -package de.openrat.android.blog; - -import java.io.IOException; - -import android.app.Activity; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.Bundle; -import android.widget.ImageView; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.client.OpenRatClient; - -/** - * @author dankert - * - */ -public class FileShowActivity extends Activity -{ - public static final String ID = "id"; - public static final String CLIENT = "client"; - private String objectid; - private OpenRatClient client; - - byte[] data; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); - - new OpenRatClientAsyncTask(this, R.string.waitingforcontent) - { - - @Override - protected void callServer() throws IOException - { - objectid = getIntent().getStringExtra(ID); - data = client.getFileContent(objectid); - } - - protected void doOnSuccess() - { - Bitmap imageBitmap = BitmapFactory.decodeByteArray(data,0,data.length); - setContentView(R.layout.show_image); - ImageView image = (ImageView) findViewById(R.id.image); - image.setImageBitmap(imageBitmap); - } - - }.execute(); - } - -} diff --git a/src/de/openrat/android/blog/FolderActivity.java b/src/de/openrat/android/blog/FolderActivity.java @@ -1,407 +0,0 @@ -/** - * - */ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import android.app.AlertDialog; -import android.app.ListActivity; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.DialogInterface.OnClickListener; -import android.database.Cursor; -import android.net.Uri; -import android.os.Bundle; -import android.provider.MediaStore; -import android.view.ContextMenu; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnCreateContextMenuListener; -import android.widget.AdapterView; -import android.widget.ListAdapter; -import android.widget.ListView; -import android.widget.Toast; -import android.widget.AdapterView.AdapterContextMenuInfo; -import android.widget.AdapterView.OnItemClickListener; -import de.openrat.android.blog.adapter.FolderContentAdapter; -import de.openrat.android.blog.service.PublishIntentService; -import de.openrat.android.blog.service.UploadIntentService; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.client.OpenRatClient; - -/** - * @author dankert - * - */ -public class FolderActivity extends ListActivity -{ - - private static final String ID2 = "id"; - public static final String CLIENT = "client"; - private static final String NAME = "name"; - private static final String TYP = "type"; - private static final String DESCRIPTION = "description"; - private static final int ACTIVITY_CHOOSE_FILE = 1; - private static final int ACTIVITY_CHOOSE_IMAGE = 2; - private OpenRatClient client; - private List<FolderEntry> data; - private String folderid; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - setContentView(R.layout.listing); - - super.onCreate(savedInstanceState); - - data = new ArrayList<FolderEntry>(); - client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); - - new OpenRatClientAsyncTask(this, R.string.waitingforcontent) - { - @Override - protected void callServer() throws IOException - { - folderid = getIntent().getStringExtra("folderid"); - if (folderid == null) - folderid = client.getRootFolder(); - - data = client.getFolderEntries(folderid); - } - - protected void doOnSuccess() - { - final ListAdapter adapter = new FolderContentAdapter( - FolderActivity.this, data); - setListAdapter(adapter); - }; - - }.execute(); - - ListView list = getListView(); - - list.setOnItemClickListener(new OnItemClickListener() - { - - @Override - public void onItemClick(AdapterView<?> parent, View view, - int position, long id) - { - FolderEntry entry = data.get(position); - - final Intent intent; - switch (entry.type) - { - case FOLDER: - - intent = new Intent(FolderActivity.this, - FolderActivity.class); - intent.putExtra(CLIENT, client); - intent.putExtra("folderid", entry.id); - startActivity(intent); - break; - case PAGE: - intent = new Intent(FolderActivity.this, - PageElementsActivity.class); - intent.putExtra(CLIENT, client); - intent.putExtra(PageElementsActivity.ID, entry.id); - startActivity(intent); - break; - case FILE: - intent = new Intent(FolderActivity.this, - FileShowActivity.class); - intent.putExtra(CLIENT, client); - intent.putExtra(FileShowActivity.ID, entry.id); - startActivity(intent); - break; - default: - } - } - }); - - list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() - { - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenu.ContextMenuInfo menuInfo) - { - MenuInflater menuInflater = getMenuInflater(); - menuInflater.inflate(R.menu.context, menu); - // menu.add(0, 5, 0, "Click Me"); - - } - - }); - /** - * - list.setonOnItemLongClickListener(new OnItemLongClickListener() { - * - * @Override public boolean onItemLongClick(AdapterView<?> parent, View - * view, int position, long id) { Map<String, String> entry = - * data.get(position); - * - * final Intent intent; intent = new - * Intent(FolderActivity.this, PropertiesActivity.class); - * intent.putExtra(CLIENT, request); - * intent.putExtra("objectid", entry.get(ID2)); - * startActivity(intent); return true; } }); - */ - } - - public boolean onContextItemSelected(MenuItem item) - { - - switch (item.getItemId()) - { - - case R.id.menu_properties: - - // This is actually where the magic happens. - - // As we use an adapter view (which the ListView is) - - // We can cast item.getMenuInfo() to AdapterContextMenuInfo - - AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item - .getMenuInfo(); - - // To get the id of the clicked item in the list use menuInfo.id - - // Log.d("t", "list pos:" + menuInfo.position + " id:" + - // menuInfo.id); - FolderEntry entry = data.get(menuInfo.position); - final Intent intent; - intent = new Intent(FolderActivity.this, - PropertiesActivity.class); - intent.putExtra(CLIENT, client); - intent.putExtra("objectid", entry.id); - intent.putExtra(TYP, entry.type.name().toLowerCase()); - startActivity(intent); - return true; - - case R.id.menu_delete: - - final AdapterContextMenuInfo mInfo = (AdapterView.AdapterContextMenuInfo) item - .getMenuInfo(); - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage( - getResources().getString(R.string.areyousure)) - .setCancelable(false).setPositiveButton( - getResources().getString(R.string.delete), - new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, - int id) - { - final FolderEntry en = data - .get(mInfo.position); - - new OpenRatClientAsyncTask( - FolderActivity.this, - R.string.waitingfordelete) - { - @Override - protected void callServer() - throws IOException - { - client.delete(folderid, en.id); - } - }.execute(); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - return true; - - case R.id.menu_publish: - - menuInfo = (AdapterView.AdapterContextMenuInfo) item - .getMenuInfo(); - entry = data.get(menuInfo.position); - - final Intent publishIntent = new Intent(this, - PublishIntentService.class); - - publishIntent.putExtra(PublishIntentService.EXTRA_REQUEST, - client); - publishIntent.putExtra(PublishIntentService.EXTRA_TYPE, - entry.type.name().toLowerCase()); - publishIntent.putExtra(PublishIntentService.EXTRA_NAME, - entry.name); - publishIntent.putExtra(PublishIntentService.EXTRA_ID, entry.id); - startService(publishIntent); - - Toast.makeText(this, R.string.publish, Toast.LENGTH_SHORT); - - return true; - - default: - - return super.onContextItemSelected(item); - - } - - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) - { - super.onCreateOptionsMenu(menu); - MenuInflater mi = new MenuInflater(getApplication()); - mi.inflate(R.menu.folder, menu); - - return true; - } - - public boolean onOptionsItemSelected(MenuItem item) - { - switch (item.getItemId()) - { - case R.id.menu_language: - new OpenRatClientAsyncTask(FolderActivity.this, - R.string.waitingforlanguageload) - { - private Map<String, String> languages; - - @Override - protected void callServer() throws IOException - { - languages = client.getLanguages(); - } - - @Override - protected void doOnSuccess() - { - AlertDialog.Builder builder = new AlertDialog.Builder( - FolderActivity.this); - final String[] languageIds = languages.keySet() - .toArray(new String[0]); - final String[] languageNames = languages.values() - .toArray(new String[0]); - - builder.setTitle(R.string.language).setItems( - languageNames, new OnClickListener() - { - - @Override - public void onClick(DialogInterface dialog, - int which) - { - final String newlanguageid = languageIds[which]; - new OpenRatClientAsyncTask( - FolderActivity.this, - R.string.waitingforlanguagesave) - { - @Override - protected void callServer() - throws IOException - { - client - .setLanguage(newlanguageid); - } - }.execute(); - //alert.cancel(); - } - }); - final AlertDialog alert = builder.create(); - alert.show(); - } - }.execute(); - - return true; - - case R.id.menu_upload: - - Intent chooseFile; - Intent intent; - chooseFile = new Intent(Intent.ACTION_GET_CONTENT); - chooseFile.setType("file/*"); - intent = Intent.createChooser(chooseFile, getResources() - .getString(R.string.choosefile)); - startActivityForResult(intent, ACTIVITY_CHOOSE_FILE); - return true; - case R.id.menu_upload_image: - - chooseFile = new Intent(Intent.ACTION_GET_CONTENT); - chooseFile.setType("image/*"); - intent = Intent.createChooser(chooseFile, getResources() - .getString(R.string.chooseimage)); - startActivityForResult(intent, ACTIVITY_CHOOSE_IMAGE); - return true; - - case R.id.menu_newfolder: - case R.id.menu_newpage: - - intent = new Intent(this, NewActivity.class); - intent.putExtra(NewActivity.EXTRA_CLIENT, client); - intent.putExtra(NewActivity.EXTRA_MENUID, item.getItemId()); - intent.putExtra(NewActivity.EXTRA_FOLDERID, folderid); - startActivity(intent); - return true; - - default: - Toast.makeText(this, "??: " + item.getItemId(), - Toast.LENGTH_SHORT); - - } - return false; - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) - { - switch (requestCode) - { - case ACTIVITY_CHOOSE_FILE: - case ACTIVITY_CHOOSE_IMAGE: - { - if (resultCode == RESULT_OK) - { - // Upload durchführen - Uri uri = data.getData(); - - String filePath; - if (requestCode == ACTIVITY_CHOOSE_IMAGE) - { - - filePath = getPath(uri); - } - else - { - filePath = uri.getPath(); - } - - final Intent uploadIntent = new Intent( - FolderActivity.this, UploadIntentService.class); - uploadIntent.putExtra( - UploadIntentService.EXTRA_FILENAME, filePath); - uploadIntent.putExtra( - UploadIntentService.EXTRA_REQUEST, client); - startService(uploadIntent); - - Toast.makeText(this, R.string.publish, - Toast.LENGTH_SHORT); - } - } - } - } - - public String getPath(Uri uri) - { - String[] projection = { MediaStore.Images.Media.DATA }; - Cursor cursor = managedQuery(uri, projection, null, null, null); - int column_index = cursor - .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - return cursor.getString(column_index); - } -} diff --git a/src/de/openrat/android/blog/FolderEntry.java b/src/de/openrat/android/blog/FolderEntry.java @@ -1,27 +0,0 @@ -package de.openrat.android.blog; - -public class FolderEntry -{ - public FType type; - public String id; - public String name; - public String description; - - public enum FType - { - FOLDER, PAGE, FILE, LINK, PROJECT; - } - - /** - * {@inheritDoc} - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() - { - return "FolderEntry [id=" + id + ", name=" + name + ", type=" + type - + "]"; - } - -} diff --git a/src/de/openrat/android/blog/NewActivity.java b/src/de/openrat/android/blog/NewActivity.java @@ -1,119 +0,0 @@ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import android.app.Activity; -import android.os.Bundle; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Spinner; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.client.OpenRatClient; - -public class NewActivity extends Activity -{ - - public static final String EXTRA_CLIENT = "request"; - public static final String EXTRA_MENUID = "menuid"; - public static final String EXTRA_FOLDERID = "folderid"; - - private OpenRatClient request; - private int menuid; - private Map<String, String> templates; - private String folderid; - - /** - * {@inheritDoc} - * - * @see android.app.Activity#onCreate(android.os.Bundle) - */ - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - request = (OpenRatClient) getIntent() - .getSerializableExtra(EXTRA_CLIENT); - menuid = getIntent().getIntExtra(EXTRA_MENUID, 0); - folderid = getIntent().getStringExtra(EXTRA_FOLDERID); - - setContentView(R.layout.new1); - - final EditText editText = (EditText) findViewById(R.id.newname); - final Spinner spinner = (Spinner) findViewById(R.id.spinner); - if (menuid == R.id.menu_newpage) - { - spinner.setVisibility(View.VISIBLE); - - new OpenRatClientAsyncTask(this, R.string.waitingforcontent) - { - - @Override - protected void callServer() throws IOException - { - templates = request.getTemplates(); - } - - @Override - protected void doOnSuccess() - { - final List<String> valueList = new ArrayList<String>( - templates.values()); - ArrayAdapter adapter = new ArrayAdapter(NewActivity.this, - android.R.layout.simple_spinner_item, valueList); - adapter - .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner.setAdapter(adapter); - } - }.execute(); - } - else - { - spinner.setVisibility(View.INVISIBLE); - } - - final Button button = (Button) findViewById(R.id.button_save); - button.setOnClickListener(new OnClickListener() - { - @Override - public void onClick(View v) - { - - new OpenRatClientAsyncTask(NewActivity.this, - R.string.waitingforcontent) - { - - @Override - protected void callServer() throws IOException - { - if (menuid == R.id.menu_newfolder) - { - request.createFolder(folderid, editText.getText() - .toString()); - } - if (menuid == R.id.menu_newpage) - { - - int pos = spinner.getSelectedItemPosition(); - final String templateid = NewActivity.this.templates - .keySet().toArray(new String[] {})[pos]; - request.createPage(folderid, editText.getText() - .toString(), templateid); - } - } - - @Override - protected void doOnSuccess() - { - NewActivity.this.finish(); - } - }.execute(); - } - }); - } -} diff --git a/src/de/openrat/android/blog/OpenRatBlog.java b/src/de/openrat/android/blog/OpenRatBlog.java @@ -1,213 +0,0 @@ -/* - * Openrat CMS-Client for Android - * - * Copyright (C) 2011 Jan Dankert - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see <http://www.gnu.org/licenses/>. - */ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import android.app.AlertDialog; -import android.app.ListActivity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.TextUtils; -import android.util.Log; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.AdapterView.OnItemLongClickListener; -import de.openrat.android.blog.adapter.SimpleNameAdapter; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.android.blog.util.ServerList; -import de.openrat.client.OpenRatClient; - -/** - * @author Jan Dankert - */ -public class OpenRatBlog extends ListActivity -{ - private static final String PREFS_NAME = "OR_BLOG_PREFS"; - private OpenRatClient client; - private List<String> serverList; - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - setContentView(R.layout.listing); - - ImageView image = (ImageView) findViewById(R.id.listimage); - image.setImageResource(R.drawable.openrat); - image.setVisibility(View.VISIBLE); - - TextView title = (TextView) findViewById(R.id.listtitle); - title.setText(getResources().getString(R.string.connect)); - title.setVisibility(View.VISIBLE); - - SharedPreferences globalPrefs = PreferenceManager - .getDefaultSharedPreferences(this); - serverList = Arrays.asList(TextUtils.split(globalPrefs.getString( - "server", ""), ",")); - - ArrayList<String> list = new ArrayList<String>(); - for (String server : serverList) - { - SharedPreferences preferences = getSharedPreferences(server, - MODE_PRIVATE); - - list.add(preferences.getString("name", "?")); - } - - if (list.size() == 0) - { - // Noch kein Server konfiguriert. Hinweis anzeigen! - final AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(getResources().getString(R.string.noserver)); - AlertDialog alert = builder.create(); - } - - final SimpleNameAdapter adapter = new SimpleNameAdapter(this, list, - android.R.drawable.ic_menu_set_as); - - ListView lv = getListView(); - lv.setAdapter(adapter); - - lv.setOnItemClickListener(new OnItemClickListener() - { - - @Override - public void onItemClick(AdapterView<?> arg0, View arg1, - final int pos, long rowId) - { - new OpenRatClientAsyncTask(OpenRatBlog.this, - R.string.waitingforlogin) - { - @Override - protected void callServer() throws IOException - { - SharedPreferences prefs = getSharedPreferences( - serverList.get(pos), MODE_PRIVATE); - - int port = Integer.parseInt(prefs.getString("port", - "80")); - String path = prefs.getString("path", "/"); - String host = prefs.getString("hostname", ""); - String dbid = prefs.getString("database", ""); - - client = new OpenRatClient(host, path, port); - - final String username = prefs.getString("username", ""); - client.login(username, prefs.getString("password", ""), - dbid); - Log.d(OpenRatBlog.this.getClass().getSimpleName(), - "User login: " + username); - - } - - protected void doOnSuccess() - { - // Verbindung und Login waren erfolgreich. - // Jetzt zur Projekt-Liste wechseln. - final Intent intent = new Intent(OpenRatBlog.this, - ProjectActivity.class); - intent.putExtra(ProjectActivity.CLIENT, client); - startActivity(intent); - }; - - }.execute(); - - } - - }); - - lv.setOnItemLongClickListener(new OnItemLongClickListener() - { - @Override - public boolean onItemLongClick(AdapterView<?> arg0, View arg1, - final int pos, long rowId) - { - Intent intent = new Intent(OpenRatBlog.this, Server.class); - intent.putExtra(Server.NAME, serverList.get(pos)); - startActivity(intent); - return true; - } - }); - - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) - { - super.onCreateOptionsMenu(menu); - MenuInflater mi = new MenuInflater(getApplication()); - mi.inflate(R.menu.main, menu); - - return true; - } - - public boolean onOptionsItemSelected(MenuItem item) - { - switch (item.getItemId()) - { - case R.id.menu_preferences: - startActivity(new Intent(this, Configuration.class)); - return true; - case R.id.menu_newserver: - - SharedPreferences globalPrefs = PreferenceManager - .getDefaultSharedPreferences(this); - String newServername = "" + System.currentTimeMillis(); - - ServerList list = new ServerList(globalPrefs.getString( - "server", "")).addServer(newServername); - globalPrefs.edit().putString("server", list.toPlain()).commit(); - - Intent intent = new Intent(this, Server.class); - intent.putExtra(Server.NAME, newServername); - startActivity(intent); - return true; - } - return false; - } - - @Override - protected void onStop() - { - super.onStop(); - - // Save user preferences. We need an Editor object to - // make changes. All objects are from android.context.Context - SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); - SharedPreferences.Editor editor = settings.edit(); - // editor.putBoolean("silentMode", mSilentMode); - - // Don't forget to commit your edits!!! - editor.commit(); - } -}- \ No newline at end of file diff --git a/src/de/openrat/android/blog/PageElementsActivity.java b/src/de/openrat/android/blog/PageElementsActivity.java @@ -1,87 +0,0 @@ -/** - * - */ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Map; - -import android.app.ListActivity; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ListView; -import android.widget.Toast; -import android.widget.AdapterView.OnItemClickListener; -import de.openrat.android.blog.adapter.SimpleNameAdapter; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.client.OpenRatClient; - -/** - * @author dankert - * - */ -public class PageElementsActivity extends ListActivity -{ - public static final String ID = "id"; - public static final String CLIENT = "client"; - private String objectid; - private OpenRatClient client; - - Map<String, String> data; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - setContentView(R.layout.listing); - - client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); - - new OpenRatClientAsyncTask(this, R.string.waitingforcontent) - { - - @Override - protected void callServer() throws IOException - { - objectid = getIntent().getStringExtra(ID); - data = client.getPageElements(objectid); - } - - protected void doOnSuccess() - { - SimpleNameAdapter adapter = new SimpleNameAdapter( - PageElementsActivity.this, new ArrayList<String>(data - .values()), android.R.drawable.ic_menu_edit); - setListAdapter(adapter); - } - - }.execute(); - - ListView list = getListView(); - list.setOnItemClickListener(new OnItemClickListener() - { - - @Override - public void onItemClick(AdapterView<?> parent, View view, - int position, long id) - { - String elementid = Arrays.asList( - data.keySet().toArray(new String[] {})).get(position); - - Intent intent = new Intent(PageElementsActivity.this, - EditorActivity.class); - intent.putExtra(EditorActivity.ELEMENTID, elementid); - intent.putExtra(EditorActivity.OBJECTID, objectid); - intent.putExtra(EditorActivity.CLIENT, client); - startActivity(intent); - } - }); - - } - -} diff --git a/src/de/openrat/android/blog/ProjectActivity.java b/src/de/openrat/android/blog/ProjectActivity.java @@ -1,107 +0,0 @@ -/** - * - */ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import android.app.ListActivity; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ListAdapter; -import android.widget.ListView; -import android.widget.AdapterView.OnItemClickListener; -import de.openrat.android.blog.adapter.FolderContentAdapter; -import de.openrat.android.blog.util.OpenRatClientAsyncTask; -import de.openrat.client.OpenRatClient; - -/** - * @author dankert - * - */ -public class ProjectActivity extends ListActivity -{ - public static final String CLIENT = "client"; - private OpenRatClient client; - private List<FolderEntry> data = new ArrayList<FolderEntry>(); - - /** - * {@inheritDoc} - * - * @see android.app.Activity#onCreate(android.os.Bundle) - */ - @Override - protected void onCreate(Bundle savedInstanceState) - { - setContentView(R.layout.listing); - - super.onCreate(savedInstanceState); - - client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); - - new OpenRatClientAsyncTask(this, R.string.waitingforprojects) - { - - protected void doOnSuccess() - { - final ListAdapter adapter = new FolderContentAdapter( - ProjectActivity.this, data); - setListAdapter(adapter); - } - - protected void callServer() throws IOException - { - - data = client.loadProjects(); - Log.d(ProjectActivity.this.getClass().getSimpleName(), "Lade Projekte: "+data.toString() ); - } - }.execute(); - - ListView list = getListView(); - - list.setOnItemClickListener(new OnItemClickListener() - { - - @Override - public void onItemClick(AdapterView<?> parent, View view, - int position, long id) - { - // Projekt auswählen - final String projectid = data.get(position).id; - - new OpenRatClientAsyncTask(ProjectActivity.this, - R.string.waitingforselectproject) - { - - @Override - protected void callServer() throws IOException - { - client.selectProject(projectid); - Log.d(ProjectActivity.this.getClass().getSimpleName(), "Waehle Projekt: "+projectid ); - } - - @Override - protected void doOnSuccess() - { - final Intent i = new Intent(ProjectActivity.this, - FolderActivity.class); - i.putExtra(CLIENT, client); - - startActivity(i); - - } - protected void doOnError(IOException error) { - super.doOnError(error); - }; - }.execute(); - - } - }); - - } -} diff --git a/src/de/openrat/android/blog/PropertiesActivity.java b/src/de/openrat/android/blog/PropertiesActivity.java @@ -1,80 +0,0 @@ -package de.openrat.android.blog; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -import android.app.Activity; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.EditText; -import android.widget.Toast; -import de.openrat.client.OpenRatClient; - -public class PropertiesActivity extends Activity -{ - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - setContentView(R.layout.properties); - - final OpenRatClient client = (OpenRatClient) getIntent() - .getSerializableExtra("client"); - final String id = getIntent().getStringExtra("objectid"); - final String type = getIntent().getStringExtra("type"); - - try - { - final Map<String, String> properties = client.getProperties(type, - id); - - final EditText editTextName = (EditText) findViewById(R.id.name); - editTextName.setText(properties.get("name")); - - final EditText editTextFilename = (EditText) findViewById(R.id.filename); - editTextFilename.setText(properties.get("filename")); - - final EditText editTextDesc = (EditText) findViewById(R.id.description); - editTextDesc.setText(properties.get("description")); - - findViewById(R.id.button_save).setOnClickListener( - new OnClickListener() - { - @Override - public void onClick(View v) - { - Map<String, String> properties = new HashMap<String, String>(); - properties.put("name", editTextName.getText() - .toString()); - properties.put("filename", editTextFilename - .getText().toString()); - properties.put("description", editTextDesc - .getText().toString()); - try - { - client.setProperties(type, id, properties); - } - catch (IOException e) - { - Log.e(this.getClass().getSimpleName(), e - .getMessage(), e); - Toast.makeText(PropertiesActivity.this, e - .getMessage(), Toast.LENGTH_SHORT); - } - PropertiesActivity.this.finish(); - } - }); - } - catch (IOException e) - { - Log.e(this.getClass().getSimpleName(), e.getMessage(), e); - Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT); - } - - } -} diff --git a/src/de/openrat/android/blog/Server.java b/src/de/openrat/android/blog/Server.java @@ -1,62 +0,0 @@ -package de.openrat.android.blog; - -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.preference.PreferenceManager; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import de.openrat.android.blog.util.ServerList; - -public class Server extends PreferenceActivity -{ - - public static final String NAME = "name"; - private String serverName; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - this.serverName = getIntent().getStringExtra(NAME); - getPreferenceManager().setSharedPreferencesName(serverName); - - addPreferencesFromResource(R.xml.server); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) - { - super.onCreateOptionsMenu(menu); - MenuInflater mi = new MenuInflater(getApplication()); - mi.inflate(R.menu.server, menu); - - return true; - } - - public boolean onOptionsItemSelected(MenuItem item) - { - switch (item.getItemId()) - { - case R.id.menu_delete: - - SharedPreferences globalPrefs = PreferenceManager - .getDefaultSharedPreferences(this); - ServerList serverList= new ServerList( - globalPrefs.getString("server", "")); - - // Server entfernen und alles löschen. - serverList.removeServer(serverName); - getPreferenceManager().getSharedPreferences().edit().clear().commit(); - - globalPrefs.edit().putString("server", - serverList.toPlain()).commit(); - finish(); - return true; - } - return false; - } - -} diff --git a/src/de/openrat/android/blog/adapter/FolderContentAdapter.java b/src/de/openrat/android/blog/adapter/FolderContentAdapter.java @@ -13,8 +13,8 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; -import de.openrat.android.blog.FolderEntry; import de.openrat.android.blog.R; +import de.openrat.android.client.FolderEntry; /** * @author dankert diff --git a/src/de/openrat/android/blog/service/PublishIntentService.java b/src/de/openrat/android/blog/service/PublishIntentService.java @@ -12,8 +12,8 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; -import de.openrat.android.blog.FolderActivity; import de.openrat.android.blog.R; +import de.openrat.android.client.FolderActivity; import de.openrat.client.OpenRatClient; /** diff --git a/src/de/openrat/android/blog/service/UploadIntentService.java b/src/de/openrat/android/blog/service/UploadIntentService.java @@ -13,8 +13,8 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; -import de.openrat.android.blog.FolderActivity; import de.openrat.android.blog.R; +import de.openrat.android.client.FolderActivity; import de.openrat.client.OpenRatClient; /** diff --git a/src/de/openrat/android/client/Configuration.java b/src/de/openrat/android/client/Configuration.java @@ -0,0 +1,16 @@ +package de.openrat.android.client; + +import de.openrat.android.blog.R; +import android.os.Bundle; +import android.preference.PreferenceActivity; + +public class Configuration extends PreferenceActivity +{ + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.preferences); + } +} diff --git a/src/de/openrat/android/client/EditorActivity.java b/src/de/openrat/android/client/EditorActivity.java @@ -0,0 +1,95 @@ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.Map; + +import android.app.Activity; +import android.os.Bundle; +import android.text.Editable; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.Toast; +import de.openrat.android.blog.R; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.client.OpenRatClient; + +public class EditorActivity extends Activity +{ + public final static String ELEMENTID = "elementid"; + public final static String OBJECTID = "objectid"; + // public final static String TYPE = "type"; + public static final String CLIENT = "client"; + private OpenRatClient client; + private String objectid; + private String elementid; + private String type; + private Map<String, String> properties; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + this.client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); + this.objectid = getIntent().getStringExtra(OBJECTID); + this.elementid = getIntent().getStringExtra(ELEMENTID); + + new OpenRatClientAsyncTask(this, R.string.waitingforcontent) + { + + @Override + protected void callServer() throws IOException + { + properties = client.getValue(objectid, elementid); + type = properties.get("type"); + } + + protected void doOnSuccess() + { + if (type.equals("longtext")) + { + setContentView(R.layout.editor); + final EditText view = (EditText) findViewById(R.id.text); + view.setText(properties.get("text")); + + Button button = (Button) findViewById(R.id.save); + button.setOnClickListener(new OnClickListener() + { + + @Override + public void onClick(View v) + { + final String text = view.getEditableText() + .toString(); + final CheckBox releaseBox = (CheckBox) findViewById(R.id.release); + + new OpenRatClientAsyncTask(EditorActivity.this, + R.string.waitingforsave) + { + + @Override + protected void callServer() throws IOException + { + client.setValue(objectid, elementid, + "longtext", text, releaseBox.isChecked(), false); + } + + protected void doOnSuccess() + { + Toast.makeText(EditorActivity.this, + R.string.saved, Toast.LENGTH_SHORT); + EditorActivity.this.finish(); + }; + }.execute(); + + } + + }); + } + } + }.execute(); + } +} diff --git a/src/de/openrat/android/client/FileShowActivity.java b/src/de/openrat/android/client/FileShowActivity.java @@ -0,0 +1,58 @@ +/** + * + */ +package de.openrat.android.client; + +import java.io.IOException; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.widget.ImageView; +import de.openrat.android.blog.R; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.client.OpenRatClient; + +/** + * @author dankert + * + */ +public class FileShowActivity extends Activity +{ + public static final String ID = "id"; + public static final String CLIENT = "client"; + private String objectid; + private OpenRatClient client; + + byte[] data; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); + + new OpenRatClientAsyncTask(this, R.string.waitingforcontent) + { + + @Override + protected void callServer() throws IOException + { + objectid = getIntent().getStringExtra(ID); + data = client.getFileContent(objectid); + } + + protected void doOnSuccess() + { + Bitmap imageBitmap = BitmapFactory.decodeByteArray(data,0,data.length); + setContentView(R.layout.show_image); + ImageView image = (ImageView) findViewById(R.id.image); + image.setImageBitmap(imageBitmap); + } + + }.execute(); + } + +} diff --git a/src/de/openrat/android/client/FolderActivity.java b/src/de/openrat/android/client/FolderActivity.java @@ -0,0 +1,408 @@ +/** + * + */ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import android.app.AlertDialog; +import android.app.ListActivity; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.DialogInterface.OnClickListener; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.view.ContextMenu; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnCreateContextMenuListener; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.Toast; +import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.AdapterView.OnItemClickListener; +import de.openrat.android.blog.R; +import de.openrat.android.blog.adapter.FolderContentAdapter; +import de.openrat.android.blog.service.PublishIntentService; +import de.openrat.android.blog.service.UploadIntentService; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.client.OpenRatClient; + +/** + * @author dankert + * + */ +public class FolderActivity extends ListActivity +{ + + private static final String ID2 = "id"; + public static final String CLIENT = "client"; + private static final String NAME = "name"; + private static final String TYP = "type"; + private static final String DESCRIPTION = "description"; + private static final int ACTIVITY_CHOOSE_FILE = 1; + private static final int ACTIVITY_CHOOSE_IMAGE = 2; + private OpenRatClient client; + private List<FolderEntry> data; + private String folderid; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + setContentView(R.layout.listing); + + super.onCreate(savedInstanceState); + + data = new ArrayList<FolderEntry>(); + client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); + + new OpenRatClientAsyncTask(this, R.string.waitingforcontent) + { + @Override + protected void callServer() throws IOException + { + folderid = getIntent().getStringExtra("folderid"); + if (folderid == null) + folderid = client.getRootFolder(); + + data = client.getFolderEntries(folderid); + } + + protected void doOnSuccess() + { + final ListAdapter adapter = new FolderContentAdapter( + FolderActivity.this, data); + setListAdapter(adapter); + }; + + }.execute(); + + ListView list = getListView(); + + list.setOnItemClickListener(new OnItemClickListener() + { + + @Override + public void onItemClick(AdapterView<?> parent, View view, + int position, long id) + { + FolderEntry entry = data.get(position); + + final Intent intent; + switch (entry.type) + { + case FOLDER: + + intent = new Intent(FolderActivity.this, + FolderActivity.class); + intent.putExtra(CLIENT, client); + intent.putExtra("folderid", entry.id); + startActivity(intent); + break; + case PAGE: + intent = new Intent(FolderActivity.this, + PageElementsActivity.class); + intent.putExtra(CLIENT, client); + intent.putExtra(PageElementsActivity.ID, entry.id); + startActivity(intent); + break; + case FILE: + intent = new Intent(FolderActivity.this, + FileShowActivity.class); + intent.putExtra(CLIENT, client); + intent.putExtra(FileShowActivity.ID, entry.id); + startActivity(intent); + break; + default: + } + } + }); + + list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() + { + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenu.ContextMenuInfo menuInfo) + { + MenuInflater menuInflater = getMenuInflater(); + menuInflater.inflate(R.menu.context, menu); + // menu.add(0, 5, 0, "Click Me"); + + } + + }); + /** + * + list.setonOnItemLongClickListener(new OnItemLongClickListener() { + * + * @Override public boolean onItemLongClick(AdapterView<?> parent, View + * view, int position, long id) { Map<String, String> entry = + * data.get(position); + * + * final Intent intent; intent = new + * Intent(FolderActivity.this, PropertiesActivity.class); + * intent.putExtra(CLIENT, request); + * intent.putExtra("objectid", entry.get(ID2)); + * startActivity(intent); return true; } }); + */ + } + + public boolean onContextItemSelected(MenuItem item) + { + + switch (item.getItemId()) + { + + case R.id.menu_properties: + + // This is actually where the magic happens. + + // As we use an adapter view (which the ListView is) + + // We can cast item.getMenuInfo() to AdapterContextMenuInfo + + AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + // To get the id of the clicked item in the list use menuInfo.id + + // Log.d("t", "list pos:" + menuInfo.position + " id:" + + // menuInfo.id); + FolderEntry entry = data.get(menuInfo.position); + final Intent intent; + intent = new Intent(FolderActivity.this, + PropertiesActivity.class); + intent.putExtra(CLIENT, client); + intent.putExtra("objectid", entry.id); + intent.putExtra(TYP, entry.type.name().toLowerCase()); + startActivity(intent); + return true; + + case R.id.menu_delete: + + final AdapterContextMenuInfo mInfo = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage( + getResources().getString(R.string.areyousure)) + .setCancelable(false).setPositiveButton( + getResources().getString(R.string.delete), + new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, + int id) + { + final FolderEntry en = data + .get(mInfo.position); + + new OpenRatClientAsyncTask( + FolderActivity.this, + R.string.waitingfordelete) + { + @Override + protected void callServer() + throws IOException + { + client.delete(folderid, en.id); + } + }.execute(); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + + return true; + + case R.id.menu_publish: + + menuInfo = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + entry = data.get(menuInfo.position); + + final Intent publishIntent = new Intent(this, + PublishIntentService.class); + + publishIntent.putExtra(PublishIntentService.EXTRA_REQUEST, + client); + publishIntent.putExtra(PublishIntentService.EXTRA_TYPE, + entry.type.name().toLowerCase()); + publishIntent.putExtra(PublishIntentService.EXTRA_NAME, + entry.name); + publishIntent.putExtra(PublishIntentService.EXTRA_ID, entry.id); + startService(publishIntent); + + Toast.makeText(this, R.string.publish, Toast.LENGTH_SHORT); + + return true; + + default: + + return super.onContextItemSelected(item); + + } + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) + { + super.onCreateOptionsMenu(menu); + MenuInflater mi = new MenuInflater(getApplication()); + mi.inflate(R.menu.folder, menu); + + return true; + } + + public boolean onOptionsItemSelected(MenuItem item) + { + switch (item.getItemId()) + { + case R.id.menu_language: + new OpenRatClientAsyncTask(FolderActivity.this, + R.string.waitingforlanguageload) + { + private Map<String, String> languages; + + @Override + protected void callServer() throws IOException + { + languages = client.getLanguages(); + } + + @Override + protected void doOnSuccess() + { + AlertDialog.Builder builder = new AlertDialog.Builder( + FolderActivity.this); + final String[] languageIds = languages.keySet() + .toArray(new String[0]); + final String[] languageNames = languages.values() + .toArray(new String[0]); + + builder.setTitle(R.string.language).setItems( + languageNames, new OnClickListener() + { + + @Override + public void onClick(DialogInterface dialog, + int which) + { + final String newlanguageid = languageIds[which]; + new OpenRatClientAsyncTask( + FolderActivity.this, + R.string.waitingforlanguagesave) + { + @Override + protected void callServer() + throws IOException + { + client + .setLanguage(newlanguageid); + } + }.execute(); + //alert.cancel(); + } + }); + final AlertDialog alert = builder.create(); + alert.show(); + } + }.execute(); + + return true; + + case R.id.menu_upload: + + Intent chooseFile; + Intent intent; + chooseFile = new Intent(Intent.ACTION_GET_CONTENT); + chooseFile.setType("file/*"); + intent = Intent.createChooser(chooseFile, getResources() + .getString(R.string.choosefile)); + startActivityForResult(intent, ACTIVITY_CHOOSE_FILE); + return true; + case R.id.menu_upload_image: + + chooseFile = new Intent(Intent.ACTION_GET_CONTENT); + chooseFile.setType("image/*"); + intent = Intent.createChooser(chooseFile, getResources() + .getString(R.string.chooseimage)); + startActivityForResult(intent, ACTIVITY_CHOOSE_IMAGE); + return true; + + case R.id.menu_newfolder: + case R.id.menu_newpage: + + intent = new Intent(this, NewActivity.class); + intent.putExtra(NewActivity.EXTRA_CLIENT, client); + intent.putExtra(NewActivity.EXTRA_MENUID, item.getItemId()); + intent.putExtra(NewActivity.EXTRA_FOLDERID, folderid); + startActivity(intent); + return true; + + default: + Toast.makeText(this, "??: " + item.getItemId(), + Toast.LENGTH_SHORT); + + } + return false; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) + { + switch (requestCode) + { + case ACTIVITY_CHOOSE_FILE: + case ACTIVITY_CHOOSE_IMAGE: + { + if (resultCode == RESULT_OK) + { + // Upload durchführen + Uri uri = data.getData(); + + String filePath; + if (requestCode == ACTIVITY_CHOOSE_IMAGE) + { + + filePath = getPath(uri); + } + else + { + filePath = uri.getPath(); + } + + final Intent uploadIntent = new Intent( + FolderActivity.this, UploadIntentService.class); + uploadIntent.putExtra( + UploadIntentService.EXTRA_FILENAME, filePath); + uploadIntent.putExtra( + UploadIntentService.EXTRA_REQUEST, client); + startService(uploadIntent); + + Toast.makeText(this, R.string.publish, + Toast.LENGTH_SHORT); + } + } + } + } + + public String getPath(Uri uri) + { + String[] projection = { MediaStore.Images.Media.DATA }; + Cursor cursor = managedQuery(uri, projection, null, null, null); + int column_index = cursor + .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + return cursor.getString(column_index); + } +} diff --git a/src/de/openrat/android/client/FolderEntry.java b/src/de/openrat/android/client/FolderEntry.java @@ -0,0 +1,27 @@ +package de.openrat.android.client; + +public class FolderEntry +{ + public FType type; + public String id; + public String name; + public String description; + + public enum FType + { + FOLDER, PAGE, FILE, LINK, PROJECT; + } + + /** + * {@inheritDoc} + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return "FolderEntry [id=" + id + ", name=" + name + ", type=" + type + + "]"; + } + +} diff --git a/src/de/openrat/android/client/NewActivity.java b/src/de/openrat/android/client/NewActivity.java @@ -0,0 +1,120 @@ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import android.app.Activity; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Spinner; +import de.openrat.android.blog.R; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.client.OpenRatClient; + +public class NewActivity extends Activity +{ + + public static final String EXTRA_CLIENT = "request"; + public static final String EXTRA_MENUID = "menuid"; + public static final String EXTRA_FOLDERID = "folderid"; + + private OpenRatClient request; + private int menuid; + private Map<String, String> templates; + private String folderid; + + /** + * {@inheritDoc} + * + * @see android.app.Activity#onCreate(android.os.Bundle) + */ + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + request = (OpenRatClient) getIntent() + .getSerializableExtra(EXTRA_CLIENT); + menuid = getIntent().getIntExtra(EXTRA_MENUID, 0); + folderid = getIntent().getStringExtra(EXTRA_FOLDERID); + + setContentView(R.layout.new1); + + final EditText editText = (EditText) findViewById(R.id.newname); + final Spinner spinner = (Spinner) findViewById(R.id.spinner); + if (menuid == R.id.menu_newpage) + { + spinner.setVisibility(View.VISIBLE); + + new OpenRatClientAsyncTask(this, R.string.waitingforcontent) + { + + @Override + protected void callServer() throws IOException + { + templates = request.getTemplates(); + } + + @Override + protected void doOnSuccess() + { + final List<String> valueList = new ArrayList<String>( + templates.values()); + ArrayAdapter adapter = new ArrayAdapter(NewActivity.this, + android.R.layout.simple_spinner_item, valueList); + adapter + .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(adapter); + } + }.execute(); + } + else + { + spinner.setVisibility(View.INVISIBLE); + } + + final Button button = (Button) findViewById(R.id.button_save); + button.setOnClickListener(new OnClickListener() + { + @Override + public void onClick(View v) + { + + new OpenRatClientAsyncTask(NewActivity.this, + R.string.waitingforcontent) + { + + @Override + protected void callServer() throws IOException + { + if (menuid == R.id.menu_newfolder) + { + request.createFolder(folderid, editText.getText() + .toString()); + } + if (menuid == R.id.menu_newpage) + { + + int pos = spinner.getSelectedItemPosition(); + final String templateid = NewActivity.this.templates + .keySet().toArray(new String[] {})[pos]; + request.createPage(folderid, editText.getText() + .toString(), templateid); + } + } + + @Override + protected void doOnSuccess() + { + NewActivity.this.finish(); + } + }.execute(); + } + }); + } +} diff --git a/src/de/openrat/android/client/OpenRatBlog.java b/src/de/openrat/android/client/OpenRatBlog.java @@ -0,0 +1,214 @@ +/* + * Openrat CMS-Client for Android + * + * Copyright (C) 2011 Jan Dankert + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import android.app.AlertDialog; +import android.app.ListActivity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import de.openrat.android.blog.R; +import de.openrat.android.blog.adapter.SimpleNameAdapter; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.android.blog.util.ServerList; +import de.openrat.client.OpenRatClient; + +/** + * @author Jan Dankert + */ +public class OpenRatBlog extends ListActivity +{ + private static final String PREFS_NAME = "OR_BLOG_PREFS"; + private OpenRatClient client; + private List<String> serverList; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.listing); + + ImageView image = (ImageView) findViewById(R.id.listimage); + image.setImageResource(R.drawable.openrat); + image.setVisibility(View.VISIBLE); + + TextView title = (TextView) findViewById(R.id.listtitle); + title.setText(getResources().getString(R.string.connect)); + title.setVisibility(View.VISIBLE); + + SharedPreferences globalPrefs = PreferenceManager + .getDefaultSharedPreferences(this); + serverList = Arrays.asList(TextUtils.split(globalPrefs.getString( + "server", ""), ",")); + + ArrayList<String> list = new ArrayList<String>(); + for (String server : serverList) + { + SharedPreferences preferences = getSharedPreferences(server, + MODE_PRIVATE); + + list.add(preferences.getString("name", "?")); + } + + if (list.size() == 0) + { + // Noch kein Server konfiguriert. Hinweis anzeigen! + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(getResources().getString(R.string.noserver)); + AlertDialog alert = builder.create(); + } + + final SimpleNameAdapter adapter = new SimpleNameAdapter(this, list, + android.R.drawable.ic_menu_set_as); + + ListView lv = getListView(); + lv.setAdapter(adapter); + + lv.setOnItemClickListener(new OnItemClickListener() + { + + @Override + public void onItemClick(AdapterView<?> arg0, View arg1, + final int pos, long rowId) + { + new OpenRatClientAsyncTask(OpenRatBlog.this, + R.string.waitingforlogin) + { + @Override + protected void callServer() throws IOException + { + SharedPreferences prefs = getSharedPreferences( + serverList.get(pos), MODE_PRIVATE); + + int port = Integer.parseInt(prefs.getString("port", + "80")); + String path = prefs.getString("path", "/"); + String host = prefs.getString("hostname", ""); + String dbid = prefs.getString("database", ""); + + client = new OpenRatClient(host, path, port); + + final String username = prefs.getString("username", ""); + client.login(username, prefs.getString("password", ""), + dbid); + Log.d(OpenRatBlog.this.getClass().getSimpleName(), + "User login: " + username); + + } + + protected void doOnSuccess() + { + // Verbindung und Login waren erfolgreich. + // Jetzt zur Projekt-Liste wechseln. + final Intent intent = new Intent(OpenRatBlog.this, + ProjectActivity.class); + intent.putExtra(ProjectActivity.CLIENT, client); + startActivity(intent); + }; + + }.execute(); + + } + + }); + + lv.setOnItemLongClickListener(new OnItemLongClickListener() + { + @Override + public boolean onItemLongClick(AdapterView<?> arg0, View arg1, + final int pos, long rowId) + { + Intent intent = new Intent(OpenRatBlog.this, Server.class); + intent.putExtra(Server.NAME, serverList.get(pos)); + startActivity(intent); + return true; + } + }); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) + { + super.onCreateOptionsMenu(menu); + MenuInflater mi = new MenuInflater(getApplication()); + mi.inflate(R.menu.main, menu); + + return true; + } + + public boolean onOptionsItemSelected(MenuItem item) + { + switch (item.getItemId()) + { + case R.id.menu_preferences: + startActivity(new Intent(this, Configuration.class)); + return true; + case R.id.menu_newserver: + + SharedPreferences globalPrefs = PreferenceManager + .getDefaultSharedPreferences(this); + String newServername = "" + System.currentTimeMillis(); + + ServerList list = new ServerList(globalPrefs.getString( + "server", "")).addServer(newServername); + globalPrefs.edit().putString("server", list.toPlain()).commit(); + + Intent intent = new Intent(this, Server.class); + intent.putExtra(Server.NAME, newServername); + startActivity(intent); + return true; + } + return false; + } + + @Override + protected void onStop() + { + super.onStop(); + + // Save user preferences. We need an Editor object to + // make changes. All objects are from android.context.Context + SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + // editor.putBoolean("silentMode", mSilentMode); + + // Don't forget to commit your edits!!! + editor.commit(); + } +}+ \ No newline at end of file diff --git a/src/de/openrat/android/client/PageElementsActivity.java b/src/de/openrat/android/client/PageElementsActivity.java @@ -0,0 +1,88 @@ +/** + * + */ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Map; + +import android.app.ListActivity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.Toast; +import android.widget.AdapterView.OnItemClickListener; +import de.openrat.android.blog.R; +import de.openrat.android.blog.adapter.SimpleNameAdapter; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.client.OpenRatClient; + +/** + * @author dankert + * + */ +public class PageElementsActivity extends ListActivity +{ + public static final String ID = "id"; + public static final String CLIENT = "client"; + private String objectid; + private OpenRatClient client; + + Map<String, String> data; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + setContentView(R.layout.listing); + + client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); + + new OpenRatClientAsyncTask(this, R.string.waitingforcontent) + { + + @Override + protected void callServer() throws IOException + { + objectid = getIntent().getStringExtra(ID); + data = client.getPageElements(objectid); + } + + protected void doOnSuccess() + { + SimpleNameAdapter adapter = new SimpleNameAdapter( + PageElementsActivity.this, new ArrayList<String>(data + .values()), android.R.drawable.ic_menu_edit); + setListAdapter(adapter); + } + + }.execute(); + + ListView list = getListView(); + list.setOnItemClickListener(new OnItemClickListener() + { + + @Override + public void onItemClick(AdapterView<?> parent, View view, + int position, long id) + { + String elementid = Arrays.asList( + data.keySet().toArray(new String[] {})).get(position); + + Intent intent = new Intent(PageElementsActivity.this, + EditorActivity.class); + intent.putExtra(EditorActivity.ELEMENTID, elementid); + intent.putExtra(EditorActivity.OBJECTID, objectid); + intent.putExtra(EditorActivity.CLIENT, client); + startActivity(intent); + } + }); + + } + +} diff --git a/src/de/openrat/android/client/ProjectActivity.java b/src/de/openrat/android/client/ProjectActivity.java @@ -0,0 +1,108 @@ +/** + * + */ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import android.app.ListActivity; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.AdapterView.OnItemClickListener; +import de.openrat.android.blog.R; +import de.openrat.android.blog.adapter.FolderContentAdapter; +import de.openrat.android.blog.util.OpenRatClientAsyncTask; +import de.openrat.client.OpenRatClient; + +/** + * @author dankert + * + */ +public class ProjectActivity extends ListActivity +{ + public static final String CLIENT = "client"; + private OpenRatClient client; + private List<FolderEntry> data = new ArrayList<FolderEntry>(); + + /** + * {@inheritDoc} + * + * @see android.app.Activity#onCreate(android.os.Bundle) + */ + @Override + protected void onCreate(Bundle savedInstanceState) + { + setContentView(R.layout.listing); + + super.onCreate(savedInstanceState); + + client = (OpenRatClient) getIntent().getSerializableExtra(CLIENT); + + new OpenRatClientAsyncTask(this, R.string.waitingforprojects) + { + + protected void doOnSuccess() + { + final ListAdapter adapter = new FolderContentAdapter( + ProjectActivity.this, data); + setListAdapter(adapter); + } + + protected void callServer() throws IOException + { + + data = client.loadProjects(); + Log.d(ProjectActivity.this.getClass().getSimpleName(), "Lade Projekte: "+data.toString() ); + } + }.execute(); + + ListView list = getListView(); + + list.setOnItemClickListener(new OnItemClickListener() + { + + @Override + public void onItemClick(AdapterView<?> parent, View view, + int position, long id) + { + // Projekt auswählen + final String projectid = data.get(position).id; + + new OpenRatClientAsyncTask(ProjectActivity.this, + R.string.waitingforselectproject) + { + + @Override + protected void callServer() throws IOException + { + client.selectProject(projectid); + Log.d(ProjectActivity.this.getClass().getSimpleName(), "Waehle Projekt: "+projectid ); + } + + @Override + protected void doOnSuccess() + { + final Intent i = new Intent(ProjectActivity.this, + FolderActivity.class); + i.putExtra(CLIENT, client); + + startActivity(i); + + } + protected void doOnError(IOException error) { + super.doOnError(error); + }; + }.execute(); + + } + }); + + } +} diff --git a/src/de/openrat/android/client/PropertiesActivity.java b/src/de/openrat/android/client/PropertiesActivity.java @@ -0,0 +1,81 @@ +package de.openrat.android.client; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; +import android.widget.Toast; +import de.openrat.android.blog.R; +import de.openrat.client.OpenRatClient; + +public class PropertiesActivity extends Activity +{ + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + setContentView(R.layout.properties); + + final OpenRatClient client = (OpenRatClient) getIntent() + .getSerializableExtra("client"); + final String id = getIntent().getStringExtra("objectid"); + final String type = getIntent().getStringExtra("type"); + + try + { + final Map<String, String> properties = client.getProperties(type, + id); + + final EditText editTextName = (EditText) findViewById(R.id.name); + editTextName.setText(properties.get("name")); + + final EditText editTextFilename = (EditText) findViewById(R.id.filename); + editTextFilename.setText(properties.get("filename")); + + final EditText editTextDesc = (EditText) findViewById(R.id.description); + editTextDesc.setText(properties.get("description")); + + findViewById(R.id.button_save).setOnClickListener( + new OnClickListener() + { + @Override + public void onClick(View v) + { + Map<String, String> properties = new HashMap<String, String>(); + properties.put("name", editTextName.getText() + .toString()); + properties.put("filename", editTextFilename + .getText().toString()); + properties.put("description", editTextDesc + .getText().toString()); + try + { + client.setProperties(type, id, properties); + } + catch (IOException e) + { + Log.e(this.getClass().getSimpleName(), e + .getMessage(), e); + Toast.makeText(PropertiesActivity.this, e + .getMessage(), Toast.LENGTH_SHORT); + } + PropertiesActivity.this.finish(); + } + }); + } + catch (IOException e) + { + Log.e(this.getClass().getSimpleName(), e.getMessage(), e); + Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT); + } + + } +} diff --git a/src/de/openrat/android/client/Server.java b/src/de/openrat/android/client/Server.java @@ -0,0 +1,63 @@ +package de.openrat.android.client; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.preference.PreferenceManager; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import de.openrat.android.blog.R; +import de.openrat.android.blog.util.ServerList; + +public class Server extends PreferenceActivity +{ + + public static final String NAME = "name"; + private String serverName; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + this.serverName = getIntent().getStringExtra(NAME); + getPreferenceManager().setSharedPreferencesName(serverName); + + addPreferencesFromResource(R.xml.server); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) + { + super.onCreateOptionsMenu(menu); + MenuInflater mi = new MenuInflater(getApplication()); + mi.inflate(R.menu.server, menu); + + return true; + } + + public boolean onOptionsItemSelected(MenuItem item) + { + switch (item.getItemId()) + { + case R.id.menu_delete: + + SharedPreferences globalPrefs = PreferenceManager + .getDefaultSharedPreferences(this); + ServerList serverList= new ServerList( + globalPrefs.getString("server", "")); + + // Server entfernen und alles löschen. + serverList.removeServer(serverName); + getPreferenceManager().getSharedPreferences().edit().clear().commit(); + + globalPrefs.edit().putString("server", + serverList.toPlain()).commit(); + finish(); + return true; + } + return false; + } + +} diff --git a/src/de/openrat/client/OpenRatClient.java b/src/de/openrat/client/OpenRatClient.java @@ -16,9 +16,9 @@ import org.json.JSONException; import org.json.JSONObject; import android.util.Log; -import de.openrat.android.blog.FolderEntry; -import de.openrat.android.blog.FolderEntry.FType; import de.openrat.android.blog.util.FileUtils; +import de.openrat.android.client.FolderEntry; +import de.openrat.android.client.FolderEntry.FType; /** * Komfortabler Zugriff auf das OpenRat-CMS.