aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.classpath9
-rw-r--r--.project33
-rw-r--r--AndroidManifest.xml48
-rw-r--r--bin/AndroidManifest.xml48
-rw-r--r--bin/SecureConversations.apkbin0 -> 282717 bytes
-rw-r--r--bin/classes.dexbin0 -> 710120 bytes
-rw-r--r--bin/classes/de/gultsch/chat/BuildConfig.classbin0 -> 339 bytes
-rw-r--r--bin/classes/de/gultsch/chat/Contact.classbin0 -> 1238 bytes
-rw-r--r--bin/classes/de/gultsch/chat/Conversation.classbin0 -> 985 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ConversationCursor.classbin0 -> 2400 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ConversationList$1.classbin0 -> 998 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ConversationList.classbin0 -> 1496 bytes
-rw-r--r--bin/classes/de/gultsch/chat/Message.classbin0 -> 553 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$array.classbin0 -> 473 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$attr.classbin0 -> 331 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$dimen.classbin0 -> 452 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$drawable.classbin0 -> 674 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$id.classbin0 -> 1493 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$layout.classbin0 -> 572 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$menu.classbin0 -> 388 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$string.classbin0 -> 704 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$style.classbin0 -> 490 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R$xml.classbin0 -> 383 bytes
-rw-r--r--bin/classes/de/gultsch/chat/R.classbin0 -> 729 bytes
-rw-r--r--bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.classbin0 -> 751 bytes
-rw-r--r--bin/classes/de/gultsch/chat/services/XmppConnectionService.classbin0 -> 768 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/ConversationActivity$1.classbin0 -> 1982 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/ConversationActivity$2.classbin0 -> 2335 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/ConversationActivity.classbin0 -> 6058 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/ConversationFragment.classbin0 -> 766 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/ManageAccountActivity.classbin0 -> 330 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.classbin0 -> 2865 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.classbin0 -> 2395 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.classbin0 -> 1168 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/NewConversationActivity.classbin0 -> 6063 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/SettingsActivity.classbin0 -> 870 bytes
-rw-r--r--bin/classes/de/gultsch/chat/ui/SettingsFragment.classbin0 -> 558 bytes
-rw-r--r--bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jarbin0 -> 232610 bytes
-rw-r--r--bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jarbin0 -> 232610 bytes
-rw-r--r--bin/jarlist.cache3
-rw-r--r--bin/res/crunch/drawable-hdpi/ic_action_add.pngbin0 -> 171 bytes
-rw-r--r--bin/res/crunch/drawable-hdpi/ic_action_send.pngbin0 -> 404 bytes
-rw-r--r--bin/res/crunch/drawable-hdpi/ic_action_send_now.pngbin0 -> 306 bytes
-rw-r--r--bin/res/crunch/drawable-hdpi/ic_action_unsecure.pngbin0 -> 386 bytes
-rw-r--r--bin/res/crunch/drawable-hdpi/ic_launcher.pngbin0 -> 1768 bytes
-rw-r--r--bin/res/crunch/drawable-hdpi/ic_profile.pngbin0 -> 1316 bytes
-rw-r--r--bin/res/crunch/drawable-mdpi/ic_action_add.pngbin0 -> 140 bytes
-rw-r--r--bin/res/crunch/drawable-mdpi/ic_action_send.pngbin0 -> 296 bytes
-rw-r--r--bin/res/crunch/drawable-mdpi/ic_action_unsecure.pngbin0 -> 322 bytes
-rw-r--r--bin/res/crunch/drawable-mdpi/ic_launcher.pngbin0 -> 1515 bytes
-rw-r--r--bin/res/crunch/drawable-mdpi/ic_profile.pngbin0 -> 875 bytes
-rw-r--r--bin/res/crunch/drawable-xhdpi/ic_action_add.pngbin0 -> 174 bytes
-rw-r--r--bin/res/crunch/drawable-xhdpi/ic_action_send.pngbin0 -> 496 bytes
-rw-r--r--bin/res/crunch/drawable-xhdpi/ic_action_send_now.pngbin0 -> 384 bytes
-rw-r--r--bin/res/crunch/drawable-xhdpi/ic_action_unsecure.pngbin0 -> 462 bytes
-rw-r--r--bin/res/crunch/drawable-xhdpi/ic_launcher.pngbin0 -> 2324 bytes
-rw-r--r--bin/res/crunch/drawable-xhdpi/ic_profile.pngbin0 -> 1689 bytes
-rw-r--r--bin/res/crunch/drawable-xxhdpi/ic_launcher.pngbin0 -> 3581 bytes
-rw-r--r--bin/res/crunch/drawable-xxhdpi/ic_profile.pngbin0 -> 2354 bytes
-rw-r--r--bin/resources.ap_bin0 -> 37509 bytes
-rw-r--r--gen/de/gultsch/chat/BuildConfig.java6
-rw-r--r--gen/de/gultsch/chat/R.java123
-rw-r--r--ic_launcher-web.pngbin0 -> 16179 bytes
-rw-r--r--ic_profile-web.pngbin0 -> 11878 bytes
-rw-r--r--libs/android-support-v4.jarbin0 -> 621451 bytes
-rw-r--r--proguard-project.txt20
-rw-r--r--project.properties14
-rw-r--r--res/drawable-hdpi/es_slidingpane_shadow.xml8
-rw-r--r--res/drawable-hdpi/ic_action_add.pngbin0 -> 181 bytes
-rw-r--r--res/drawable-hdpi/ic_action_send.pngbin0 -> 342 bytes
-rw-r--r--res/drawable-hdpi/ic_action_send_now.pngbin0 -> 578 bytes
-rw-r--r--res/drawable-hdpi/ic_action_unsecure.pngbin0 -> 368 bytes
-rw-r--r--res/drawable-hdpi/ic_launcher.pngbin0 -> 1615 bytes
-rw-r--r--res/drawable-hdpi/ic_profile.pngbin0 -> 999 bytes
-rw-r--r--res/drawable-mdpi/es_slidingpane_shadow.xml8
-rw-r--r--res/drawable-mdpi/ic_action_add.pngbin0 -> 134 bytes
-rw-r--r--res/drawable-mdpi/ic_action_send.pngbin0 -> 246 bytes
-rw-r--r--res/drawable-mdpi/ic_action_unsecure.pngbin0 -> 283 bytes
-rw-r--r--res/drawable-mdpi/ic_launcher.pngbin0 -> 1111 bytes
-rw-r--r--res/drawable-mdpi/ic_profile.pngbin0 -> 622 bytes
-rw-r--r--res/drawable-xhdpi/es_slidingpane_shadow.xml7
-rw-r--r--res/drawable-xhdpi/ic_action_add.pngbin0 -> 201 bytes
-rw-r--r--res/drawable-xhdpi/ic_action_send.pngbin0 -> 416 bytes
-rw-r--r--res/drawable-xhdpi/ic_action_send_now.pngbin0 -> 759 bytes
-rw-r--r--res/drawable-xhdpi/ic_action_unsecure.pngbin0 -> 458 bytes
-rw-r--r--res/drawable-xhdpi/ic_launcher.pngbin0 -> 2146 bytes
-rw-r--r--res/drawable-xhdpi/ic_profile.pngbin0 -> 1374 bytes
-rw-r--r--res/drawable-xhdpi/section_header.xml10
-rw-r--r--res/drawable-xxhdpi/es_slidingpane_shadow.xml8
-rw-r--r--res/drawable-xxhdpi/ic_launcher.pngbin0 -> 3272 bytes
-rw-r--r--res/drawable-xxhdpi/ic_profile.pngbin0 -> 2137 bytes
-rw-r--r--res/layout/activity_conversations.xml29
-rw-r--r--res/layout/activity_new_conversation.xml82
-rw-r--r--res/layout/contact.xml44
-rw-r--r--res/layout/conversation_list_row.xml62
-rw-r--r--res/layout/frament_conversation.xml64
-rw-r--r--res/menu/conversations.xml42
-rw-r--r--res/values-sw600dp/dimens.xml8
-rw-r--r--res/values-sw720dp-land/dimens.xml9
-rw-r--r--res/values-v11/styles.xml11
-rw-r--r--res/values-v14/styles.xml12
-rw-r--r--res/values/arrays.xml13
-rw-r--r--res/values/dimens.xml7
-rw-r--r--res/values/strings.xml14
-rw-r--r--res/values/styles.xml37
-rw-r--r--res/xml/preferences.xml41
-rw-r--r--src/de/gultsch/chat/Contact.java35
-rw-r--r--src/de/gultsch/chat/Conversation.java21
-rw-r--r--src/de/gultsch/chat/ConversationCursor.java94
-rw-r--r--src/de/gultsch/chat/ConversationList.java41
-rw-r--r--src/de/gultsch/chat/Message.java19
-rw-r--r--src/de/gultsch/chat/services/XmppConnectionService.java29
-rw-r--r--src/de/gultsch/chat/ui/ConversationActivity.java161
-rw-r--r--src/de/gultsch/chat/ui/ConversationFragment.java18
-rw-r--r--src/de/gultsch/chat/ui/ManageAccountActivity.java7
-rw-r--r--src/de/gultsch/chat/ui/NewConversationActivity.java197
-rw-r--r--src/de/gultsch/chat/ui/SettingsActivity.java16
-rw-r--r--src/de/gultsch/chat/ui/SettingsFragment.java15
118 files changed, 1473 insertions, 0 deletions
diff --git a/.classpath b/.classpath
new file mode 100644
index 00000000..96e9275b
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/.project b/.project
new file mode 100644
index 00000000..01f891d2
--- /dev/null
+++ b/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>SecureConversations</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100644
index 00000000..a2716651
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="de.gultsch.chat"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="19" />
+
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@android:style/Theme.Holo.Light" >
+ <activity
+ android:name="de.gultsch.chat.ui.ConversationActivity"
+ android:label="Secure Conversations">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="de.gultsch.chat.ui.SettingsActivity"
+ android:label="Settings"
+ android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" >
+ </activity>
+ <activity
+ android:name="de.gultsch.chat.ui.ManageAccountActivity"
+ android:label="Manage Accounts"
+ android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" >
+ </activity>
+ <activity
+ android:name="de.gultsch.chat.ui.NewConversationActivity"
+ android:label="@string/title_activity_new_conversation"
+ android:parentActivityName="de.gultsch.chat.ui.ConversationActivity"
+ android:windowSoftInputMode="stateHidden">
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value="de.gultsch.chat.ui.ConversationActivity" />
+ </activity>
+ </application>
+
+</manifest>
diff --git a/bin/AndroidManifest.xml b/bin/AndroidManifest.xml
new file mode 100644
index 00000000..a2716651
--- /dev/null
+++ b/bin/AndroidManifest.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="de.gultsch.chat"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="19" />
+
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@android:style/Theme.Holo.Light" >
+ <activity
+ android:name="de.gultsch.chat.ui.ConversationActivity"
+ android:label="Secure Conversations">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="de.gultsch.chat.ui.SettingsActivity"
+ android:label="Settings"
+ android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" >
+ </activity>
+ <activity
+ android:name="de.gultsch.chat.ui.ManageAccountActivity"
+ android:label="Manage Accounts"
+ android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" >
+ </activity>
+ <activity
+ android:name="de.gultsch.chat.ui.NewConversationActivity"
+ android:label="@string/title_activity_new_conversation"
+ android:parentActivityName="de.gultsch.chat.ui.ConversationActivity"
+ android:windowSoftInputMode="stateHidden">
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value="de.gultsch.chat.ui.ConversationActivity" />
+ </activity>
+ </application>
+
+</manifest>
diff --git a/bin/SecureConversations.apk b/bin/SecureConversations.apk
new file mode 100644
index 00000000..d4ae5a61
--- /dev/null
+++ b/bin/SecureConversations.apk
Binary files differ
diff --git a/bin/classes.dex b/bin/classes.dex
new file mode 100644
index 00000000..dd5510e6
--- /dev/null
+++ b/bin/classes.dex
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/BuildConfig.class b/bin/classes/de/gultsch/chat/BuildConfig.class
new file mode 100644
index 00000000..ea4b0483
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/BuildConfig.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/Contact.class b/bin/classes/de/gultsch/chat/Contact.class
new file mode 100644
index 00000000..6432ac09
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/Contact.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/Conversation.class b/bin/classes/de/gultsch/chat/Conversation.class
new file mode 100644
index 00000000..37e0d0df
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/Conversation.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ConversationCursor.class b/bin/classes/de/gultsch/chat/ConversationCursor.class
new file mode 100644
index 00000000..e5d6023e
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ConversationCursor.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ConversationList$1.class b/bin/classes/de/gultsch/chat/ConversationList$1.class
new file mode 100644
index 00000000..c0fbcdef
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ConversationList$1.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ConversationList.class b/bin/classes/de/gultsch/chat/ConversationList.class
new file mode 100644
index 00000000..e45ad2bb
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ConversationList.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/Message.class b/bin/classes/de/gultsch/chat/Message.class
new file mode 100644
index 00000000..1dbcab2c
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/Message.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$array.class b/bin/classes/de/gultsch/chat/R$array.class
new file mode 100644
index 00000000..5044b329
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$array.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$attr.class b/bin/classes/de/gultsch/chat/R$attr.class
new file mode 100644
index 00000000..51bfe702
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$attr.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$dimen.class b/bin/classes/de/gultsch/chat/R$dimen.class
new file mode 100644
index 00000000..c8834c65
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$dimen.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$drawable.class b/bin/classes/de/gultsch/chat/R$drawable.class
new file mode 100644
index 00000000..e862ed44
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$drawable.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$id.class b/bin/classes/de/gultsch/chat/R$id.class
new file mode 100644
index 00000000..ac0183a7
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$id.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$layout.class b/bin/classes/de/gultsch/chat/R$layout.class
new file mode 100644
index 00000000..1f9040ae
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$layout.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$menu.class b/bin/classes/de/gultsch/chat/R$menu.class
new file mode 100644
index 00000000..0ed4eae1
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$menu.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$string.class b/bin/classes/de/gultsch/chat/R$string.class
new file mode 100644
index 00000000..22df3f3c
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$string.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$style.class b/bin/classes/de/gultsch/chat/R$style.class
new file mode 100644
index 00000000..c1f8230a
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$style.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R$xml.class b/bin/classes/de/gultsch/chat/R$xml.class
new file mode 100644
index 00000000..7104856f
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R$xml.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/R.class b/bin/classes/de/gultsch/chat/R.class
new file mode 100644
index 00000000..fd18617c
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/R.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.class b/bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.class
new file mode 100644
index 00000000..f6e7586a
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/services/XmppConnectionService.class b/bin/classes/de/gultsch/chat/services/XmppConnectionService.class
new file mode 100644
index 00000000..91ea7355
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/services/XmppConnectionService.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/ConversationActivity$1.class b/bin/classes/de/gultsch/chat/ui/ConversationActivity$1.class
new file mode 100644
index 00000000..c10eda28
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/ConversationActivity$1.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/ConversationActivity$2.class b/bin/classes/de/gultsch/chat/ui/ConversationActivity$2.class
new file mode 100644
index 00000000..2a2480fa
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/ConversationActivity$2.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/ConversationActivity.class b/bin/classes/de/gultsch/chat/ui/ConversationActivity.class
new file mode 100644
index 00000000..73587f53
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/ConversationActivity.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/ConversationFragment.class b/bin/classes/de/gultsch/chat/ui/ConversationFragment.class
new file mode 100644
index 00000000..fc8463c6
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/ConversationFragment.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/ManageAccountActivity.class b/bin/classes/de/gultsch/chat/ui/ManageAccountActivity.class
new file mode 100644
index 00000000..da54422f
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/ManageAccountActivity.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.class
new file mode 100644
index 00000000..151d9df3
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.class
new file mode 100644
index 00000000..7419a15f
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.class
new file mode 100644
index 00000000..afa85e9f
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity.class
new file mode 100644
index 00000000..9b80c256
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/SettingsActivity.class b/bin/classes/de/gultsch/chat/ui/SettingsActivity.class
new file mode 100644
index 00000000..2f2344dc
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/SettingsActivity.class
Binary files differ
diff --git a/bin/classes/de/gultsch/chat/ui/SettingsFragment.class b/bin/classes/de/gultsch/chat/ui/SettingsFragment.class
new file mode 100644
index 00000000..cd8046f2
--- /dev/null
+++ b/bin/classes/de/gultsch/chat/ui/SettingsFragment.class
Binary files differ
diff --git a/bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jar b/bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jar
new file mode 100644
index 00000000..ea8e5c71
--- /dev/null
+++ b/bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jar
Binary files differ
diff --git a/bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jar b/bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jar
new file mode 100644
index 00000000..796205bc
--- /dev/null
+++ b/bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jar
Binary files differ
diff --git a/bin/jarlist.cache b/bin/jarlist.cache
new file mode 100644
index 00000000..0565465f
--- /dev/null
+++ b/bin/jarlist.cache
@@ -0,0 +1,3 @@
+# cache for current jar dependency. DO NOT EDIT.
+# format is <lastModified> <length> <SHA-1> <path>
+# Encoding is UTF-8
diff --git a/bin/res/crunch/drawable-hdpi/ic_action_add.png b/bin/res/crunch/drawable-hdpi/ic_action_add.png
new file mode 100644
index 00000000..c7a0db24
--- /dev/null
+++ b/bin/res/crunch/drawable-hdpi/ic_action_add.png
Binary files differ
diff --git a/bin/res/crunch/drawable-hdpi/ic_action_send.png b/bin/res/crunch/drawable-hdpi/ic_action_send.png
new file mode 100644
index 00000000..8c01c107
--- /dev/null
+++ b/bin/res/crunch/drawable-hdpi/ic_action_send.png
Binary files differ
diff --git a/bin/res/crunch/drawable-hdpi/ic_action_send_now.png b/bin/res/crunch/drawable-hdpi/ic_action_send_now.png
new file mode 100644
index 00000000..9a19771e
--- /dev/null
+++ b/bin/res/crunch/drawable-hdpi/ic_action_send_now.png
Binary files differ
diff --git a/bin/res/crunch/drawable-hdpi/ic_action_unsecure.png b/bin/res/crunch/drawable-hdpi/ic_action_unsecure.png
new file mode 100644
index 00000000..592d9ebc
--- /dev/null
+++ b/bin/res/crunch/drawable-hdpi/ic_action_unsecure.png
Binary files differ
diff --git a/bin/res/crunch/drawable-hdpi/ic_launcher.png b/bin/res/crunch/drawable-hdpi/ic_launcher.png
new file mode 100644
index 00000000..9ff16976
--- /dev/null
+++ b/bin/res/crunch/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/bin/res/crunch/drawable-hdpi/ic_profile.png b/bin/res/crunch/drawable-hdpi/ic_profile.png
new file mode 100644
index 00000000..505c4bec
--- /dev/null
+++ b/bin/res/crunch/drawable-hdpi/ic_profile.png
Binary files differ
diff --git a/bin/res/crunch/drawable-mdpi/ic_action_add.png b/bin/res/crunch/drawable-mdpi/ic_action_add.png
new file mode 100644
index 00000000..ca14aafd
--- /dev/null
+++ b/bin/res/crunch/drawable-mdpi/ic_action_add.png
Binary files differ
diff --git a/bin/res/crunch/drawable-mdpi/ic_action_send.png b/bin/res/crunch/drawable-mdpi/ic_action_send.png
new file mode 100644
index 00000000..f6b0a3c2
--- /dev/null
+++ b/bin/res/crunch/drawable-mdpi/ic_action_send.png
Binary files differ
diff --git a/bin/res/crunch/drawable-mdpi/ic_action_unsecure.png b/bin/res/crunch/drawable-mdpi/ic_action_unsecure.png
new file mode 100644
index 00000000..a6f558f8
--- /dev/null
+++ b/bin/res/crunch/drawable-mdpi/ic_action_unsecure.png
Binary files differ
diff --git a/bin/res/crunch/drawable-mdpi/ic_launcher.png b/bin/res/crunch/drawable-mdpi/ic_launcher.png
new file mode 100644
index 00000000..719c528d
--- /dev/null
+++ b/bin/res/crunch/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/bin/res/crunch/drawable-mdpi/ic_profile.png b/bin/res/crunch/drawable-mdpi/ic_profile.png
new file mode 100644
index 00000000..d0a0a92c
--- /dev/null
+++ b/bin/res/crunch/drawable-mdpi/ic_profile.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_add.png b/bin/res/crunch/drawable-xhdpi/ic_action_add.png
new file mode 100644
index 00000000..b6a18bde
--- /dev/null
+++ b/bin/res/crunch/drawable-xhdpi/ic_action_add.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_send.png b/bin/res/crunch/drawable-xhdpi/ic_action_send.png
new file mode 100644
index 00000000..276097fd
--- /dev/null
+++ b/bin/res/crunch/drawable-xhdpi/ic_action_send.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_send_now.png b/bin/res/crunch/drawable-xhdpi/ic_action_send_now.png
new file mode 100644
index 00000000..b62e30e1
--- /dev/null
+++ b/bin/res/crunch/drawable-xhdpi/ic_action_send_now.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_unsecure.png b/bin/res/crunch/drawable-xhdpi/ic_action_unsecure.png
new file mode 100644
index 00000000..9b722b85
--- /dev/null
+++ b/bin/res/crunch/drawable-xhdpi/ic_action_unsecure.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xhdpi/ic_launcher.png b/bin/res/crunch/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..44c64af9
--- /dev/null
+++ b/bin/res/crunch/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xhdpi/ic_profile.png b/bin/res/crunch/drawable-xhdpi/ic_profile.png
new file mode 100644
index 00000000..75a8838b
--- /dev/null
+++ b/bin/res/crunch/drawable-xhdpi/ic_profile.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xxhdpi/ic_launcher.png b/bin/res/crunch/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..5a44e82f
--- /dev/null
+++ b/bin/res/crunch/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/bin/res/crunch/drawable-xxhdpi/ic_profile.png b/bin/res/crunch/drawable-xxhdpi/ic_profile.png
new file mode 100644
index 00000000..461c12ba
--- /dev/null
+++ b/bin/res/crunch/drawable-xxhdpi/ic_profile.png
Binary files differ
diff --git a/bin/resources.ap_ b/bin/resources.ap_
new file mode 100644
index 00000000..6d54a502
--- /dev/null
+++ b/bin/resources.ap_
Binary files differ
diff --git a/gen/de/gultsch/chat/BuildConfig.java b/gen/de/gultsch/chat/BuildConfig.java
new file mode 100644
index 00000000..7ab91d7e
--- /dev/null
+++ b/gen/de/gultsch/chat/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package de.gultsch.chat;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+} \ No newline at end of file
diff --git a/gen/de/gultsch/chat/R.java b/gen/de/gultsch/chat/R.java
new file mode 100644
index 00000000..d9f298ff
--- /dev/null
+++ b/gen/de/gultsch/chat/R.java
@@ -0,0 +1,123 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package de.gultsch.chat;
+
+public final class R {
+ public static final class array {
+ public static final int conversation_encryption_type_entries=0x7f050000;
+ public static final int conversation_encryption_type_values=0x7f050001;
+ }
+ public static final class attr {
+ }
+ public static final class dimen {
+ /** Default screen margins, per the Android Design guidelines.
+
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+
+ */
+ public static final int activity_horizontal_margin=0x7f060000;
+ public static final int activity_vertical_margin=0x7f060001;
+ }
+ public static final class drawable {
+ public static final int es_slidingpane_shadow=0x7f020000;
+ public static final int ic_action_add=0x7f020001;
+ public static final int ic_action_send=0x7f020002;
+ public static final int ic_action_send_now=0x7f020003;
+ public static final int ic_action_unsecure=0x7f020004;
+ public static final int ic_launcher=0x7f020005;
+ public static final int ic_profile=0x7f020006;
+ public static final int section_header=0x7f020007;
+ }
+ public static final class id {
+ public static final int action_accounts=0x7f0a001c;
+ public static final int action_add=0x7f0a0018;
+ public static final int action_archive=0x7f0a001b;
+ public static final int action_details=0x7f0a001a;
+ public static final int action_security=0x7f0a0019;
+ public static final int action_settings=0x7f0a001d;
+ public static final int contact_display_name=0x7f0a000c;
+ public static final int contact_divider=0x7f0a000e;
+ public static final int contact_jid=0x7f0a000d;
+ public static final int contact_photo=0x7f0a000b;
+ public static final int conversation_lastmsg=0x7f0a0012;
+ public static final int conversation_name=0x7f0a0011;
+ public static final int create_new_contact=0x7f0a000a;
+ public static final int duration=0x7f0a0013;
+ public static final int editText1=0x7f0a0015;
+ public static final int imageButton1=0x7f0a0016;
+ public static final int imageView1=0x7f0a0010;
+ public static final int jabber_contacts=0x7f0a0008;
+ public static final int jabber_contacts_header=0x7f0a0007;
+ public static final int list=0x7f0a0001;
+ public static final int new_contact_header=0x7f0a0009;
+ public static final int new_conversation_search=0x7f0a0003;
+ public static final int phone_contacts=0x7f0a0006;
+ public static final int phone_contacts_header=0x7f0a0005;
+ public static final int scrollView1=0x7f0a0004;
+ public static final int selected_conversation=0x7f0a0002;
+ public static final int slidingpanelayout=0x7f0a0000;
+ public static final int textView1=0x7f0a0017;
+ public static final int textsend=0x7f0a0014;
+ public static final int thumbnail=0x7f0a000f;
+ }
+ public static final class layout {
+ public static final int activity_conversations=0x7f030000;
+ public static final int activity_new_conversation=0x7f030001;
+ public static final int contact=0x7f030002;
+ public static final int conversation_list_row=0x7f030003;
+ public static final int frament_conversation=0x7f030004;
+ }
+ public static final class menu {
+ public static final int conversations=0x7f090000;
+ }
+ public static final class string {
+ public static final int action_accounts=0x7f070003;
+ public static final int action_add=0x7f070002;
+ public static final int action_archive=0x7f070004;
+ public static final int action_details=0x7f070005;
+ public static final int action_secure=0x7f070006;
+ public static final int action_settings=0x7f070001;
+ public static final int app_name=0x7f070000;
+ public static final int hello_world=0x7f070008;
+ public static final int title_activity_new_conversation=0x7f070007;
+ }
+ public static final class style {
+ /**
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+
+
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+
+
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+
+ API 11 theme customizations can go here.
+
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+
+ API 14 theme customizations can go here.
+ */
+ public static final int AppBaseTheme=0x7f080000;
+ /** Application theme.
+ All customizations that are NOT specific to a particular API-level can go here.
+ */
+ public static final int AppTheme=0x7f080001;
+ public static final int Divider=0x7f080003;
+ public static final int sectionHeader=0x7f080002;
+ }
+ public static final class xml {
+ public static final int preferences=0x7f040000;
+ }
+}
diff --git a/ic_launcher-web.png b/ic_launcher-web.png
new file mode 100644
index 00000000..8e26a931
--- /dev/null
+++ b/ic_launcher-web.png
Binary files differ
diff --git a/ic_profile-web.png b/ic_profile-web.png
new file mode 100644
index 00000000..c0c6ca8f
--- /dev/null
+++ b/ic_profile-web.png
Binary files differ
diff --git a/libs/android-support-v4.jar b/libs/android-support-v4.jar
new file mode 100644
index 00000000..9056828a
--- /dev/null
+++ b/libs/android-support-v4.jar
Binary files differ
diff --git a/proguard-project.txt b/proguard-project.txt
new file mode 100644
index 00000000..f2fe1559
--- /dev/null
+++ b/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/project.properties b/project.properties
new file mode 100644
index 00000000..4ab12569
--- /dev/null
+++ b/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-19
diff --git a/res/drawable-hdpi/es_slidingpane_shadow.xml b/res/drawable-hdpi/es_slidingpane_shadow.xml
new file mode 100644
index 00000000..eaca7894
--- /dev/null
+++ b/res/drawable-hdpi/es_slidingpane_shadow.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+<gradient
+ android:centerColor="#8B0000"
+ android:endColor="#34FFDD"
+ android:startColor="#FF00FF" />
+<size android:width="5.0dp" android:height="0.5dp" />
+</shape> \ No newline at end of file
diff --git a/res/drawable-hdpi/ic_action_add.png b/res/drawable-hdpi/ic_action_add.png
new file mode 100644
index 00000000..aa7cf4f2
--- /dev/null
+++ b/res/drawable-hdpi/ic_action_add.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_action_send.png b/res/drawable-hdpi/ic_action_send.png
new file mode 100644
index 00000000..6384a4ee
--- /dev/null
+++ b/res/drawable-hdpi/ic_action_send.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_action_send_now.png b/res/drawable-hdpi/ic_action_send_now.png
new file mode 100644
index 00000000..ff0e369e
--- /dev/null
+++ b/res/drawable-hdpi/ic_action_send_now.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_action_unsecure.png b/res/drawable-hdpi/ic_action_unsecure.png
new file mode 100644
index 00000000..b9f442d5
--- /dev/null
+++ b/res/drawable-hdpi/ic_action_unsecure.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 00000000..3125b12d
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_profile.png b/res/drawable-hdpi/ic_profile.png
new file mode 100644
index 00000000..3f071dec
--- /dev/null
+++ b/res/drawable-hdpi/ic_profile.png
Binary files differ
diff --git a/res/drawable-mdpi/es_slidingpane_shadow.xml b/res/drawable-mdpi/es_slidingpane_shadow.xml
new file mode 100644
index 00000000..eaca7894
--- /dev/null
+++ b/res/drawable-mdpi/es_slidingpane_shadow.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+<gradient
+ android:centerColor="#8B0000"
+ android:endColor="#34FFDD"
+ android:startColor="#FF00FF" />
+<size android:width="5.0dp" android:height="0.5dp" />
+</shape> \ No newline at end of file
diff --git a/res/drawable-mdpi/ic_action_add.png b/res/drawable-mdpi/ic_action_add.png
new file mode 100644
index 00000000..99b189a0
--- /dev/null
+++ b/res/drawable-mdpi/ic_action_add.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_action_send.png b/res/drawable-mdpi/ic_action_send.png
new file mode 100644
index 00000000..4552ae6d
--- /dev/null
+++ b/res/drawable-mdpi/ic_action_send.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_action_unsecure.png b/res/drawable-mdpi/ic_action_unsecure.png
new file mode 100644
index 00000000..84072abd
--- /dev/null
+++ b/res/drawable-mdpi/ic_action_unsecure.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 00000000..b3c9a5e1
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_profile.png b/res/drawable-mdpi/ic_profile.png
new file mode 100644
index 00000000..0d056c7c
--- /dev/null
+++ b/res/drawable-mdpi/ic_profile.png
Binary files differ
diff --git a/res/drawable-xhdpi/es_slidingpane_shadow.xml b/res/drawable-xhdpi/es_slidingpane_shadow.xml
new file mode 100644
index 00000000..cc711819
--- /dev/null
+++ b/res/drawable-xhdpi/es_slidingpane_shadow.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+<gradient
+ android:endColor="#cccccc"
+ android:startColor="#f9f9f9" />
+<size android:width="3.0dp" android:height="0.5dp" />
+</shape> \ No newline at end of file
diff --git a/res/drawable-xhdpi/ic_action_add.png b/res/drawable-xhdpi/ic_action_add.png
new file mode 100644
index 00000000..9d6af042
--- /dev/null
+++ b/res/drawable-xhdpi/ic_action_add.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_action_send.png b/res/drawable-xhdpi/ic_action_send.png
new file mode 100644
index 00000000..652ac68d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_action_send.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_action_send_now.png b/res/drawable-xhdpi/ic_action_send_now.png
new file mode 100644
index 00000000..373dde23
--- /dev/null
+++ b/res/drawable-xhdpi/ic_action_send_now.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_action_unsecure.png b/res/drawable-xhdpi/ic_action_unsecure.png
new file mode 100644
index 00000000..96b128f2
--- /dev/null
+++ b/res/drawable-xhdpi/ic_action_unsecure.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..5ef36c2f
--- /dev/null
+++ b/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_profile.png b/res/drawable-xhdpi/ic_profile.png
new file mode 100644
index 00000000..88a82cf0
--- /dev/null
+++ b/res/drawable-xhdpi/ic_profile.png
Binary files differ
diff --git a/res/drawable-xhdpi/section_header.xml b/res/drawable-xhdpi/section_header.xml
new file mode 100644
index 00000000..25f148ce
--- /dev/null
+++ b/res/drawable-xhdpi/section_header.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+
+ <size
+ android:height="1.5dp"
+ android:width="1000dp" />
+
+ <solid android:color="#b7b7b7" />
+</shape> \ No newline at end of file
diff --git a/res/drawable-xxhdpi/es_slidingpane_shadow.xml b/res/drawable-xxhdpi/es_slidingpane_shadow.xml
new file mode 100644
index 00000000..eaca7894
--- /dev/null
+++ b/res/drawable-xxhdpi/es_slidingpane_shadow.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+<gradient
+ android:centerColor="#8B0000"
+ android:endColor="#34FFDD"
+ android:startColor="#FF00FF" />
+<size android:width="5.0dp" android:height="0.5dp" />
+</shape> \ No newline at end of file
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..9dbbdd97
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_profile.png b/res/drawable-xxhdpi/ic_profile.png
new file mode 100644
index 00000000..309dc513
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_profile.png
Binary files differ
diff --git a/res/layout/activity_conversations.xml b/res/layout/activity_conversations.xml
new file mode 100644
index 00000000..ae60de40
--- /dev/null
+++ b/res/layout/activity_conversations.xml
@@ -0,0 +1,29 @@
+<android.support.v4.widget.SlidingPaneLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/slidingpanelayout">
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="336dp"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <ListView
+ android:id="@+id/list"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:divider="#b5b5b5"
+ android:dividerHeight="1dp"
+ android:background="#f9f9f9"
+ />
+
+</LinearLayout>
+<LinearLayout
+ android:id="@+id/selected_conversation"
+ android:layout_width="400dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="#e5e5e5"
+ android:orientation="vertical">
+</LinearLayout>
+</android.support.v4.widget.SlidingPaneLayout> \ No newline at end of file
diff --git a/res/layout/activity_new_conversation.xml b/res/layout/activity_new_conversation.xml
new file mode 100644
index 00000000..68836761
--- /dev/null
+++ b/res/layout/activity_new_conversation.xml
@@ -0,0 +1,82 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#f9f9f9">
+
+ <EditText
+ android:id="@+id/new_conversation_search"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentTop="true"
+ android:ems="10"
+ android:inputType="textEmailAddress"
+ android:hint="Search or enter Jabber ID"
+ android:background="#ffffff"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="12dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp"/>
+
+ <ScrollView
+ android:id="@+id/scrollView1"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentRight="true"
+ android:layout_below="@+id/new_conversation_search"
+ android:background="#e5e5e5" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="380dp"
+ android:orientation="vertical"
+ android:padding="8dp" >
+
+ <TextView
+ android:id="@+id/phone_contacts_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Phone Contacts"
+ style="@style/sectionHeader"/>
+ <LinearLayout
+ android:id="@+id/phone_contacts"
+ android:layout_height="fill_parent"
+ android:layout_width="fill_parent"
+ android:orientation="vertical">
+
+ </LinearLayout>
+ <TextView
+ android:id="@+id/jabber_contacts_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Jabber Contacts"
+ style="@style/sectionHeader"/>
+ <LinearLayout
+ android:id="@+id/jabber_contacts"
+ android:layout_height="fill_parent"
+ android:layout_width="fill_parent"
+ android:orientation="vertical">
+
+ </LinearLayout>
+ <TextView
+ android:id="@+id/new_contact_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="create new contact"
+ style="@style/sectionHeader"
+ android:visibility="gone"/>
+ <LinearLayout
+ android:id="@+id/create_new_contact"
+ android:layout_height="fill_parent"
+ android:layout_width="fill_parent"
+ android:orientation="vertical"
+ android:visibility="gone">
+
+ </LinearLayout>
+ </LinearLayout>
+ </ScrollView>
+</RelativeLayout> \ No newline at end of file
diff --git a/res/layout/contact.xml b/res/layout/contact.xml
new file mode 100644
index 00000000..1b11f0fc
--- /dev/null
+++ b/res/layout/contact.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+<RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
+
+ <ImageView
+ android:id="@+id/contact_photo"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_alignParentLeft="true"
+ android:src="@drawable/ic_profile">
+ </ImageView>
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@+id/contact_photo"
+ android:layout_centerVertical="true"
+ android:orientation="vertical"
+ android:paddingLeft="8dp">
+ <TextView
+ android:id="@+id/contact_display_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="18sp"
+ android:textColor="#5b5b5b"
+ />
+ <TextView
+ android:id="@+id/contact_jid"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="#5b5b5b"
+ />
+ </LinearLayout>
+
+</RelativeLayout>
+ <View style="@style/Divider"
+ android:id="@+id/contact_divider"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/conversation_list_row.xml b/res/layout/conversation_list_row.xml
new file mode 100644
index 00000000..5b3959c3
--- /dev/null
+++ b/res/layout/conversation_list_row.xml
@@ -0,0 +1,62 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="5dip">
+
+ <!-- ListRow Left sied Thumbnail image -->
+ <LinearLayout android:id="@+id/thumbnail"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="3dip"
+ android:layout_alignParentLeft="true"
+ android:layout_marginRight="5dip">
+
+ <ImageView
+ android:id="@+id/imageView1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_profile" />
+
+ </LinearLayout>
+
+ <!-- Title Of Song-->
+ <TextView
+ android:id="@+id/conversation_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignTop="@+id/thumbnail"
+ android:layout_toRightOf="@+id/thumbnail"
+ android:text="Rihanna Love the way lie"
+ android:textColor="#636363"
+ android:typeface="sans"
+ android:textSize="20dip"/>
+
+ <!-- Artist Name -->
+ <TextView
+ android:id="@+id/conversation_lastmsg"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/conversation_name"
+ android:textColor="#636363"
+ android:textSize="12dip"
+ android:layout_marginTop="1dip"
+ android:layout_toRightOf="@+id/thumbnail"
+ android:text="Just gona stand there and ..." />
+
+ <!-- Rightend Duration -->
+ <TextView
+ android:id="@+id/duration"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignBottom="@id/conversation_name"
+ android:gravity="right"
+ android:text="5:45"
+ android:layout_marginRight="5dip"
+ android:textSize="10dip"
+ android:textColor="#636363"/>
+
+
+
+</RelativeLayout> \ No newline at end of file
diff --git a/res/layout/frament_conversation.xml b/res/layout/frament_conversation.xml
new file mode 100644
index 00000000..02fe1f90
--- /dev/null
+++ b/res/layout/frament_conversation.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#f9f9f9">
+
+ <RelativeLayout
+ android:id="@+id/textsend"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true" >
+
+ <EditText
+ android:id="@+id/editText1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_toLeftOf="@+id/imageButton1"
+ android:ems="10"
+ android:inputType="textMultiLine"
+ android:minLines="1"
+ android:background="#ffffff"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="12dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp">
+ </EditText>
+
+ <ImageButton
+ android:id="@+id/imageButton1"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:background="?android:selectableItemBackground"
+ android:src="@drawable/ic_action_send_now" />
+
+ </RelativeLayout>
+
+ <ScrollView
+ android:id="@+id/scrollView1"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_above="@+id/textsend"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:background="#e5e5e5" >
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="#e5e5e5"
+ android:orientation="vertical" >
+
+ <TextView
+ android:id="@+id/textView1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="TextView" />
+ </LinearLayout>
+ </ScrollView>
+
+</RelativeLayout>
diff --git a/res/menu/conversations.xml b/res/menu/conversations.xml
new file mode 100644
index 00000000..39c36a53
--- /dev/null
+++ b/res/menu/conversations.xml
@@ -0,0 +1,42 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <item
+ android:id="@+id/action_add"
+ android:orderInCategory="10"
+ android:icon="@drawable/ic_action_add"
+ android:showAsAction="always"
+ android:title="@string/action_add" />
+
+ <item
+ android:id="@+id/action_security"
+ android:orderInCategory="20"
+ android:showAsAction="always"
+ android:icon="@drawable/ic_action_unsecure"
+ android:title="@string/action_secure" />
+
+ <item
+ android:id="@+id/action_details"
+ android:orderInCategory="40"
+ android:showAsAction="never"
+ android:title="@string/action_details" />
+
+ <item
+ android:id="@+id/action_archive"
+ android:orderInCategory="50"
+ android:showAsAction="never"
+ android:title="@string/action_archive" />
+
+ <item
+ android:id="@+id/action_accounts"
+ android:orderInCategory="90"
+ android:showAsAction="never"
+ android:title="@string/action_accounts"
+ />
+
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/action_settings"/>
+
+</menu>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
new file mode 100644
index 00000000..44f01db7
--- /dev/null
+++ b/res/values-sw600dp/dimens.xml
@@ -0,0 +1,8 @@
+<resources>
+
+ <!--
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw600dp devices (e.g. 7" tablets) here.
+ -->
+
+</resources>
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 00000000..61e3fa8f
--- /dev/null
+++ b/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,9 @@
+<resources>
+
+ <!--
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+ -->
+ <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>
diff --git a/res/values-v11/styles.xml b/res/values-v11/styles.xml
new file mode 100644
index 00000000..3c02242a
--- /dev/null
+++ b/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+<resources>
+
+ <!--
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+ <!-- API 11 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/res/values-v14/styles.xml b/res/values-v14/styles.xml
new file mode 100644
index 00000000..a91fd037
--- /dev/null
+++ b/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+<resources>
+
+ <!--
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+ <!-- API 14 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
new file mode 100644
index 00000000..592007ba
--- /dev/null
+++ b/res/values/arrays.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <array name="conversation_encryption_type_entries">
+ <item>None</item>
+ <item>OpenPGP</item>
+ <item>Off the record</item>
+ </array>
+ <array name="conversation_encryption_type_values">
+ <item>none</item>
+ <item>pgp</item>
+ <item>otr</item>
+ </array>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
new file mode 100644
index 00000000..55c1e590
--- /dev/null
+++ b/res/values/dimens.xml
@@ -0,0 +1,7 @@
+<resources>
+
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
new file mode 100644
index 00000000..053dfa5c
--- /dev/null
+++ b/res/values/strings.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">Secure Conversations</string>
+ <string name="action_settings">Settings</string>
+ <string name="action_add">New conversation</string>
+ <string name="action_accounts">Manage accounts</string>
+ <string name="action_archive">Archive</string>
+ <string name="action_details">Show details</string>
+ <string name="action_secure">Secure conversation</string>
+ <string name="title_activity_new_conversation">New Conversation</string>
+ <string name="hello_world">Hello world!</string>
+
+</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100644
index 00000000..31b2823f
--- /dev/null
+++ b/res/values/styles.xml
@@ -0,0 +1,37 @@
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Light">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Application theme. -->
+ <style name="AppTheme" parent="AppBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+
+
+ <style name="sectionHeader" parent="android:Widget.Holo.Light.TextView">
+ <item name="android:drawableBottom">@drawable/section_header</item>
+ <item name="android:drawablePadding">4dp</item>
+ <item name="android:layout_marginTop">8dp</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textColor">#5b5b5b</item>
+ <item name="android:textStyle">bold</item>
+ </style>
+
+ <style name="Divider">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">1.5dp</item>
+ <item name="android:background">#b7b7b7</item>
+ </style>
+
+</resources>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
new file mode 100644
index 00000000..696978de
--- /dev/null
+++ b/res/xml/preferences.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
+ <PreferenceCategory
+ android:title="Security">
+ <CheckBoxPreference
+ android:key="trust_unknown_tls_certificates"
+ android:title="Trust TLS certificates"
+ android:summary="Accounts with untrusted certificates simply will not connect to server"
+ />
+ <ListPreference
+ android:key="default_conversation_encryption_type"
+ android:title="Default conversation encryption"
+ android:dialogTitle="Default conversation encryption"
+ android:entries="@array/conversation_encryption_type_entries"
+ android:entryValues="@array/conversation_encryption_type_values"
+ android:defaultValue="pgp"/>
+ </PreferenceCategory>
+ <PreferenceCategory
+ android:title="Notification settings">
+ <CheckBoxPreference
+ android:key="show_notification"
+ android:title="Notification"
+ android:summary="Show notification in status bar when a new message arrives"
+ />
+ <CheckBoxPreference
+ android:key="vibrate_on_notification"
+ android:dependency="show_notification"
+ android:title="Vibrate"
+ android:summary="Also vibrate when a new message arrives"/>
+ <RingtonePreference
+ android:key="notification_ringtone"
+ android:title="Sound"
+ android:ringtoneType="notification"
+ android:dependency="show_notification"
+ android:summary="Play ringtone with notification"/>
+ </PreferenceCategory>
+ <PreferenceCategory
+ android:title="Advanced settings">
+
+ </PreferenceCategory>
+</PreferenceScreen>
diff --git a/src/de/gultsch/chat/Contact.java b/src/de/gultsch/chat/Contact.java
new file mode 100644
index 00000000..64204461
--- /dev/null
+++ b/src/de/gultsch/chat/Contact.java
@@ -0,0 +1,35 @@
+package de.gultsch.chat;
+
+import java.io.Serializable;
+
+import android.net.Uri;
+
+public class Contact implements Serializable {
+ private static final long serialVersionUID = -4570817093119419962L;
+ protected String display_name;
+ protected String jid;
+ protected String photo;
+
+ public Contact(String display_name, String jid, String photo) {
+ this.display_name = display_name;
+ this.jid = jid;
+ this.photo = photo;
+ }
+
+ public String getDisplayName() {
+ return this.display_name;
+ }
+
+ public Uri getProfilePhoto() {
+ if (photo == null) return null;
+ return Uri.parse(photo);
+ }
+
+ public String getJid() {
+ return this.jid;
+ }
+
+ public boolean match(String needle) {
+ return (jid.toLowerCase().contains(needle.toLowerCase()) || (display_name.toLowerCase().contains(needle.toLowerCase())));
+ }
+}
diff --git a/src/de/gultsch/chat/Conversation.java b/src/de/gultsch/chat/Conversation.java
new file mode 100644
index 00000000..cec96a35
--- /dev/null
+++ b/src/de/gultsch/chat/Conversation.java
@@ -0,0 +1,21 @@
+package de.gultsch.chat;
+
+import java.util.ArrayList;
+
+
+public class Conversation {
+ private String name;
+ private ArrayList<Message> msgs = new ArrayList<Message>();
+
+ public Conversation(String name) {
+ this.name = name;
+ }
+
+ public ArrayList<Message> getLastMessages(int count, int offset) {
+ msgs.add(new Message("this is my last message"));
+ return msgs;
+ }
+ public String getName() {
+ return this.name;
+ }
+}
diff --git a/src/de/gultsch/chat/ConversationCursor.java b/src/de/gultsch/chat/ConversationCursor.java
new file mode 100644
index 00000000..1ce431b4
--- /dev/null
+++ b/src/de/gultsch/chat/ConversationCursor.java
@@ -0,0 +1,94 @@
+package de.gultsch.chat;
+
+
+import java.util.ArrayList;
+
+
+import android.database.AbstractCursor;
+
+public class ConversationCursor extends AbstractCursor {
+
+
+ protected ConversationList conversations;
+
+ public static final String NAME = "conversationname";
+ public static final String LAST_MSG = "lastmsg";
+ public static final String DATE = "date";
+ public static final String ID = "_id";
+
+ public ConversationCursor(ConversationList list) {
+ super();
+ this.conversations = list;
+ }
+
+ public ArrayList<Conversation> getConversationOverview() {
+ return this.conversations;
+ }
+
+ public void setConversationOverview(ConversationList list) {
+ this.conversations = list;
+ }
+
+ @Override
+ public String[] getColumnNames() {
+ return new String[]{ID,NAME,LAST_MSG,DATE};
+ }
+
+ @Override
+ public int getCount() {
+ return conversations.size();
+ }
+
+ @Override
+ public double getDouble(int column) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public float getFloat(int column) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getInt(int column) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public long getLong(int column) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public short getShort(int column) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getString(int column) {
+ Conversation conversation = conversations.get(getPosition());
+ Message lastMessage = conversation.getLastMessages(1,0).get(0);
+ switch (column) {
+ case 1:
+ return conversation.getName();
+ case 2:
+ return lastMessage.toString();
+ case 3:
+ return lastMessage.getTimeReadable();
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public boolean isNull(int column) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+} \ No newline at end of file
diff --git a/src/de/gultsch/chat/ConversationList.java b/src/de/gultsch/chat/ConversationList.java
new file mode 100644
index 00000000..b043f61a
--- /dev/null
+++ b/src/de/gultsch/chat/ConversationList.java
@@ -0,0 +1,41 @@
+package de.gultsch.chat;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public class ConversationList extends ArrayList<Conversation> {
+
+ private static final long serialVersionUID = 3661496589984289968L;
+
+ private int selectedConversationPosition = -1;
+
+ private ConversationCursor cursor = new ConversationCursor(this);
+
+ public ConversationCursor getCursor() {
+ return this.cursor;
+ }
+
+ public Conversation getSelectedConversation() {
+ return this.get(this.selectedConversationPosition);
+ }
+
+ public void setSelectedConversationPosition(int selectedConversation) {
+ this.selectedConversationPosition = selectedConversation;
+ }
+
+ public void sort() {
+ Conversation selectedConversation = this.get(selectedConversationPosition);
+ //sort this
+ Collections.sort(this, new Comparator<Conversation>() {
+
+ @Override
+ public int compare(Conversation lhs, Conversation rhs) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ });
+
+ this.selectedConversationPosition = this.indexOf(selectedConversation);
+ }
+}
diff --git a/src/de/gultsch/chat/Message.java b/src/de/gultsch/chat/Message.java
new file mode 100644
index 00000000..b4e5e7ca
--- /dev/null
+++ b/src/de/gultsch/chat/Message.java
@@ -0,0 +1,19 @@
+package de.gultsch.chat;
+
+public class Message {
+
+ String msg;
+
+ public Message(String msg) {
+ this.msg = msg;
+ }
+
+ public String toString() {
+ return msg;
+ }
+
+ public String getTimeReadable() {
+ return "2 min";
+ }
+
+}
diff --git a/src/de/gultsch/chat/services/XmppConnectionService.java b/src/de/gultsch/chat/services/XmppConnectionService.java
new file mode 100644
index 00000000..4477513d
--- /dev/null
+++ b/src/de/gultsch/chat/services/XmppConnectionService.java
@@ -0,0 +1,29 @@
+package de.gultsch.chat.services;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+
+public class XmppConnectionService extends Service {
+
+ // Binder given to clients
+ private final IBinder mBinder = new XmppConnectionBinder();
+
+ /**
+ * Class used for the client Binder. Because we know this service always
+ * runs in the same process as its clients, we don't need to deal with IPC.
+ */
+ public class XmppConnectionBinder extends Binder {
+ XmppConnectionService getService() {
+ // Return this instance of LocalService so clients can call public methods
+ return XmppConnectionService.this;
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return mBinder;
+ }
+
+}
diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java
new file mode 100644
index 00000000..446a0c97
--- /dev/null
+++ b/src/de/gultsch/chat/ui/ConversationActivity.java
@@ -0,0 +1,161 @@
+package de.gultsch.chat.ui;
+
+import java.util.HashMap;
+
+import de.gultsch.chat.Contact;
+import de.gultsch.chat.Conversation;
+import de.gultsch.chat.ConversationCursor;
+import de.gultsch.chat.ConversationList;
+import de.gultsch.chat.R;
+import de.gultsch.chat.R.id;
+import android.os.Bundle;
+import android.app.Activity;
+import android.app.FragmentTransaction;
+import android.content.Context;
+import android.content.Intent;
+import android.support.v4.widget.SlidingPaneLayout;
+import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.SimpleCursorAdapter;
+
+public class ConversationActivity extends Activity {
+
+ public static final String START_CONVERSATION = "startconversation";
+ public static final String CONVERSATION_CONTACT = "conversationcontact";
+
+ protected SlidingPaneLayout spl;
+
+ protected HashMap<Conversation, ConversationFragment> conversationFragments = new HashMap<Conversation, ConversationFragment>();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_conversations);
+
+ final ConversationList conversationList = new ConversationList();
+
+ if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
+ if (getIntent().getType().equals(ConversationActivity.START_CONVERSATION)) {
+ Contact contact = (Contact) getIntent().getExtras().get(ConversationActivity.CONVERSATION_CONTACT);
+ Log.d("gultsch","start conversation with "+contact.getDisplayName());
+ conversationList.add(new Conversation(contact.getDisplayName()));
+ }
+ }
+ String[] fromColumns = {ConversationCursor.NAME,
+ ConversationCursor.LAST_MSG};
+ int[] toViews = {R.id.conversation_name, R.id.conversation_lastmsg};
+
+ final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.conversation_list_row, conversationList.getCursor(), fromColumns, toViews,0);
+ final ListView listView = (ListView) findViewById(R.id.list);
+ listView.setAdapter(adapter);
+
+ listView.setOnItemClickListener(new OnItemClickListener() {
+
+ @Override
+ public void onItemClick(AdapterView<?> arg0, View clickedView, int position,
+ long arg3) {
+ conversationList.setSelectedConversationPosition(position);
+ swapConversationFragment(conversationList);
+ getActionBar().setTitle(conversationList.getSelectedConversation().getName());
+ spl.closePane();
+ }
+ });
+ spl = (SlidingPaneLayout) findViewById(id.slidingpanelayout);
+ spl.setParallaxDistance(150);
+ spl.openPane();
+ spl.setShadowResource(R.drawable.es_slidingpane_shadow);
+ spl.setSliderFadeColor(0);
+ spl.setPanelSlideListener(new PanelSlideListener() {
+ @Override
+ public void onPanelOpened(View arg0) {
+ getActionBar().setDisplayHomeAsUpEnabled(false);
+ getActionBar().setTitle(R.string.app_name);
+ invalidateOptionsMenu();
+
+ InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ inputManager.hideSoftInputFromWindow(
+ getCurrentFocus().getWindowToken(),
+ InputMethodManager.HIDE_NOT_ALWAYS);
+ listView.requestFocus();
+ }
+
+ @Override
+ public void onPanelClosed(View arg0) {
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setTitle(conversationList.getSelectedConversation().getName());
+ invalidateOptionsMenu();
+
+ }
+
+ @Override
+ public void onPanelSlide(View arg0, float arg1) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+ if (conversationList.size() >= 1) {
+ conversationList.setSelectedConversationPosition(0);
+ swapConversationFragment(conversationList);
+ } else {
+ //start new conversation activity
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.conversations, menu);
+
+ if (spl.isOpen()) {
+ ((MenuItem) menu.findItem(R.id.action_archive)).setVisible(false);
+ ((MenuItem) menu.findItem(R.id.action_details)).setVisible(false);
+ ((MenuItem) menu.findItem(R.id.action_security)).setVisible(false);
+ } else {
+ ((MenuItem) menu.findItem(R.id.action_add)).setVisible(false);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch(item.getItemId()) {
+ case android.R.id.home:
+ spl.openPane();
+ break;
+ case R.id.action_settings:
+ startActivity(new Intent(this, SettingsActivity.class));
+ break;
+ case R.id.action_accounts:
+ startActivity(new Intent(this, ManageAccountActivity.class));
+ break;
+ case R.id.action_add:
+ startActivity(new Intent(this, NewConversationActivity.class));
+ default:
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ protected void swapConversationFragment(
+ final ConversationList conversationList) {
+ ConversationFragment selectedFragment;
+ if (conversationFragments.containsKey(conversationList.getSelectedConversation())) {
+ selectedFragment = conversationFragments.get(conversationList.getSelectedConversation());
+ } else {
+ selectedFragment = new ConversationFragment();
+ conversationFragments.put(conversationList.getSelectedConversation(), selectedFragment);
+ }
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ transaction.replace(R.id.selected_conversation, selectedFragment);
+ transaction.commit();
+ }
+
+}
diff --git a/src/de/gultsch/chat/ui/ConversationFragment.java b/src/de/gultsch/chat/ui/ConversationFragment.java
new file mode 100644
index 00000000..0f619176
--- /dev/null
+++ b/src/de/gultsch/chat/ui/ConversationFragment.java
@@ -0,0 +1,18 @@
+package de.gultsch.chat.ui;
+
+import de.gultsch.chat.R;
+import android.app.Fragment;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+
+public class ConversationFragment extends Fragment {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.frament_conversation, container, false);
+ }
+}
diff --git a/src/de/gultsch/chat/ui/ManageAccountActivity.java b/src/de/gultsch/chat/ui/ManageAccountActivity.java
new file mode 100644
index 00000000..741f60c3
--- /dev/null
+++ b/src/de/gultsch/chat/ui/ManageAccountActivity.java
@@ -0,0 +1,7 @@
+package de.gultsch.chat.ui;
+
+import android.app.Activity;
+
+public class ManageAccountActivity extends Activity {
+
+}
diff --git a/src/de/gultsch/chat/ui/NewConversationActivity.java b/src/de/gultsch/chat/ui/NewConversationActivity.java
new file mode 100644
index 00000000..261f0ebf
--- /dev/null
+++ b/src/de/gultsch/chat/ui/NewConversationActivity.java
@@ -0,0 +1,197 @@
+package de.gultsch.chat.ui;
+
+import java.util.LinkedHashMap;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import de.gultsch.chat.Contact;
+import de.gultsch.chat.R;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.ImageView;
+import android.app.Activity;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Intent;
+import android.content.Loader;
+import android.content.Loader.OnLoadCompleteListener;
+import android.database.Cursor;
+
+public class NewConversationActivity extends Activity {
+
+ final protected LinkedHashMap<Contact, View> availablePhoneContacts = new LinkedHashMap<Contact, View>();
+ final protected LinkedHashMap<Contact, View> availableJabberContacts = new LinkedHashMap<Contact, View>();
+ protected View newContactView;
+ protected Contact newContact;
+
+ public static final Pattern VALID_JID =
+ Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);
+
+ static final String[] PROJECTION = new String[] {
+ ContactsContract.Data.CONTACT_ID,
+ ContactsContract.Data.DISPLAY_NAME,
+ ContactsContract.Data.PHOTO_THUMBNAIL_URI,
+ ContactsContract.CommonDataKinds.Im.DATA };
+
+ // This is the select criteria
+ static final String SELECTION = "(" + ContactsContract.Data.MIMETYPE
+ + "=\"" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
+ + "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL
+ + "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER
+ + "\")";
+
+ protected View getViewForContact(Contact contact) {
+ LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = (View) inflater.inflate(R.layout.contact,null);
+ ((TextView) view.findViewById(R.id.contact_display_name)).setText(contact.getDisplayName());
+ ((TextView) view.findViewById(R.id.contact_jid)).setText(contact.getJid());
+ if (contact.getProfilePhoto() != null) {
+ ((ImageView) view.findViewById(R.id.contact_photo)).setImageURI(contact.getProfilePhoto());
+ }
+ view.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ Contact clickedContact = null;
+ for(Entry<Contact, View> entry : availablePhoneContacts.entrySet()) {
+ if (entry.getValue() == v) {
+ clickedContact = entry.getKey();
+ break;
+ }
+ }
+ for(Entry<Contact, View> entry : availableJabberContacts.entrySet()) {
+ if (entry.getValue() == v) {
+ clickedContact = entry.getKey();
+ break;
+ }
+ }
+ if (newContactView==v) {
+ clickedContact = newContact;
+ }
+ Log.d("gultsch","clicked on "+clickedContact.getDisplayName());
+ Intent startConversationIntent = new Intent(v.getContext(),ConversationActivity.class);
+ startConversationIntent.setAction(Intent.ACTION_VIEW);
+ startConversationIntent.putExtra(ConversationActivity.CONVERSATION_CONTACT, clickedContact);
+ startConversationIntent.setType(ConversationActivity.START_CONVERSATION);
+ startActivity(startConversationIntent);
+ }
+ });
+ return view;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_new_conversation);
+ CursorLoader mCursorLoader = new CursorLoader(this,
+ ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null,
+ null);
+ mCursorLoader.registerListener(0, new OnLoadCompleteListener<Cursor>() {
+
+ @Override
+ public void onLoadComplete(Loader<Cursor> arg0, Cursor cursor) {
+ while (cursor.moveToNext()) {
+ Contact contact = new Contact(
+ cursor.getString(cursor
+ .getColumnIndex(ContactsContract.Data.DISPLAY_NAME)),
+ cursor.getString(cursor
+ .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)),
+ cursor.getString(cursor
+ .getColumnIndex(ContactsContract.Data.PHOTO_THUMBNAIL_URI)));
+ View contactView = getViewForContact(contact);
+ availablePhoneContacts.put(contact, getViewForContact(contact));
+ ((LinearLayout) findViewById(R.id.phone_contacts)).addView(contactView);
+ }
+ updateAvailableContacts();
+ }
+ });
+ mCursorLoader.startLoading();
+
+ ((TextView) findViewById(R.id.new_conversation_search)).addTextChangedListener(new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ updateAvailableContacts();
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+
+ }
+
+ protected void updateAvailableContacts() {
+ String search = ((TextView) findViewById(R.id.new_conversation_search)).getText().toString();
+
+ LinearLayout phoneContacts = (LinearLayout) findViewById(R.id.phone_contacts);
+ filterAvailableContacts(phoneContacts,this.availablePhoneContacts,search);
+
+ if (phoneContacts.getChildCount() == 0) {
+ findViewById(R.id.phone_contacts_header).setVisibility(View.GONE);
+ } else {
+ findViewById(R.id.phone_contacts_header).setVisibility(View.VISIBLE);
+ }
+
+ LinearLayout jabberContacts = (LinearLayout) findViewById(R.id.jabber_contacts);
+ filterAvailableContacts(jabberContacts,this.availableJabberContacts,search);
+ if (jabberContacts.getChildCount() == 0) {
+ findViewById(R.id.jabber_contacts_header).setVisibility(View.GONE);
+ } else {
+ findViewById(R.id.jabber_contacts_header).setVisibility(View.VISIBLE);
+ }
+
+ LinearLayout createNewContact = (LinearLayout) findViewById(R.id.create_new_contact);
+ Matcher matcher = VALID_JID.matcher(search);
+ if (matcher.find()) {
+ createNewContact.removeAllViews();
+ String name = search.split("@")[0];
+ newContact = new Contact(name,search,null);
+ newContactView = getViewForContact(newContact);
+ newContactView.findViewById(R.id.contact_divider).setVisibility(View.GONE);
+ createNewContact.addView(newContactView);
+ createNewContact.setVisibility(View.VISIBLE);
+ ((TextView) findViewById(R.id.new_contact_header)).setVisibility(View.VISIBLE);
+ } else {
+ createNewContact.setVisibility(View.GONE);
+ ((TextView) findViewById(R.id.new_contact_header)).setVisibility(View.GONE);
+ }
+ }
+
+ private void filterAvailableContacts(
+ LinearLayout layout, LinkedHashMap<Contact, View> contacts, String search) {
+ layout.removeAllViews();
+ for(Entry<Contact, View> entry : contacts.entrySet()) {
+
+ if (entry.getKey().match(search)) {
+ entry.getValue().setVisibility(View.VISIBLE);
+ entry.getValue().findViewById(R.id.contact_divider).setVisibility(View.VISIBLE);
+ layout.addView(entry.getValue());
+ }
+ }
+ int contactsCount = layout.getChildCount();
+ if (contactsCount>=1) {
+ View lastContact = layout.getChildAt(contactsCount - 1);
+ lastContact.findViewById(R.id.contact_divider).setVisibility(View.GONE);
+ }
+ }
+}
diff --git a/src/de/gultsch/chat/ui/SettingsActivity.java b/src/de/gultsch/chat/ui/SettingsActivity.java
new file mode 100644
index 00000000..886c05cc
--- /dev/null
+++ b/src/de/gultsch/chat/ui/SettingsActivity.java
@@ -0,0 +1,16 @@
+package de.gultsch.chat.ui;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class SettingsActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Display the fragment as the main content.
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, new SettingsFragment()).commit();
+ }
+
+}
diff --git a/src/de/gultsch/chat/ui/SettingsFragment.java b/src/de/gultsch/chat/ui/SettingsFragment.java
new file mode 100644
index 00000000..3ca4841a
--- /dev/null
+++ b/src/de/gultsch/chat/ui/SettingsFragment.java
@@ -0,0 +1,15 @@
+package de.gultsch.chat.ui;
+
+import de.gultsch.chat.R;
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+
+public class SettingsFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.preferences);
+ }
+}