diff options
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 Binary files differnew file mode 100644 index 00000000..d4ae5a61 --- /dev/null +++ b/bin/SecureConversations.apk diff --git a/bin/classes.dex b/bin/classes.dex Binary files differnew file mode 100644 index 00000000..dd5510e6 --- /dev/null +++ b/bin/classes.dex diff --git a/bin/classes/de/gultsch/chat/BuildConfig.class b/bin/classes/de/gultsch/chat/BuildConfig.class Binary files differnew file mode 100644 index 00000000..ea4b0483 --- /dev/null +++ b/bin/classes/de/gultsch/chat/BuildConfig.class diff --git a/bin/classes/de/gultsch/chat/Contact.class b/bin/classes/de/gultsch/chat/Contact.class Binary files differnew file mode 100644 index 00000000..6432ac09 --- /dev/null +++ b/bin/classes/de/gultsch/chat/Contact.class diff --git a/bin/classes/de/gultsch/chat/Conversation.class b/bin/classes/de/gultsch/chat/Conversation.class Binary files differnew file mode 100644 index 00000000..37e0d0df --- /dev/null +++ b/bin/classes/de/gultsch/chat/Conversation.class diff --git a/bin/classes/de/gultsch/chat/ConversationCursor.class b/bin/classes/de/gultsch/chat/ConversationCursor.class Binary files differnew file mode 100644 index 00000000..e5d6023e --- /dev/null +++ b/bin/classes/de/gultsch/chat/ConversationCursor.class diff --git a/bin/classes/de/gultsch/chat/ConversationList$1.class b/bin/classes/de/gultsch/chat/ConversationList$1.class Binary files differnew file mode 100644 index 00000000..c0fbcdef --- /dev/null +++ b/bin/classes/de/gultsch/chat/ConversationList$1.class diff --git a/bin/classes/de/gultsch/chat/ConversationList.class b/bin/classes/de/gultsch/chat/ConversationList.class Binary files differnew file mode 100644 index 00000000..e45ad2bb --- /dev/null +++ b/bin/classes/de/gultsch/chat/ConversationList.class diff --git a/bin/classes/de/gultsch/chat/Message.class b/bin/classes/de/gultsch/chat/Message.class Binary files differnew file mode 100644 index 00000000..1dbcab2c --- /dev/null +++ b/bin/classes/de/gultsch/chat/Message.class diff --git a/bin/classes/de/gultsch/chat/R$array.class b/bin/classes/de/gultsch/chat/R$array.class Binary files differnew file mode 100644 index 00000000..5044b329 --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$array.class diff --git a/bin/classes/de/gultsch/chat/R$attr.class b/bin/classes/de/gultsch/chat/R$attr.class Binary files differnew file mode 100644 index 00000000..51bfe702 --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$attr.class diff --git a/bin/classes/de/gultsch/chat/R$dimen.class b/bin/classes/de/gultsch/chat/R$dimen.class Binary files differnew file mode 100644 index 00000000..c8834c65 --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$dimen.class diff --git a/bin/classes/de/gultsch/chat/R$drawable.class b/bin/classes/de/gultsch/chat/R$drawable.class Binary files differnew file mode 100644 index 00000000..e862ed44 --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$drawable.class diff --git a/bin/classes/de/gultsch/chat/R$id.class b/bin/classes/de/gultsch/chat/R$id.class Binary files differnew file mode 100644 index 00000000..ac0183a7 --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$id.class diff --git a/bin/classes/de/gultsch/chat/R$layout.class b/bin/classes/de/gultsch/chat/R$layout.class Binary files differnew file mode 100644 index 00000000..1f9040ae --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$layout.class diff --git a/bin/classes/de/gultsch/chat/R$menu.class b/bin/classes/de/gultsch/chat/R$menu.class Binary files differnew file mode 100644 index 00000000..0ed4eae1 --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$menu.class diff --git a/bin/classes/de/gultsch/chat/R$string.class b/bin/classes/de/gultsch/chat/R$string.class Binary files differnew file mode 100644 index 00000000..22df3f3c --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$string.class diff --git a/bin/classes/de/gultsch/chat/R$style.class b/bin/classes/de/gultsch/chat/R$style.class Binary files differnew file mode 100644 index 00000000..c1f8230a --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$style.class diff --git a/bin/classes/de/gultsch/chat/R$xml.class b/bin/classes/de/gultsch/chat/R$xml.class Binary files differnew file mode 100644 index 00000000..7104856f --- /dev/null +++ b/bin/classes/de/gultsch/chat/R$xml.class diff --git a/bin/classes/de/gultsch/chat/R.class b/bin/classes/de/gultsch/chat/R.class Binary files differnew file mode 100644 index 00000000..fd18617c --- /dev/null +++ b/bin/classes/de/gultsch/chat/R.class diff --git a/bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.class b/bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.class Binary files differnew file mode 100644 index 00000000..f6e7586a --- /dev/null +++ b/bin/classes/de/gultsch/chat/services/XmppConnectionService$XmppConnectionBinder.class diff --git a/bin/classes/de/gultsch/chat/services/XmppConnectionService.class b/bin/classes/de/gultsch/chat/services/XmppConnectionService.class Binary files differnew file mode 100644 index 00000000..91ea7355 --- /dev/null +++ b/bin/classes/de/gultsch/chat/services/XmppConnectionService.class diff --git a/bin/classes/de/gultsch/chat/ui/ConversationActivity$1.class b/bin/classes/de/gultsch/chat/ui/ConversationActivity$1.class Binary files differnew file mode 100644 index 00000000..c10eda28 --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/ConversationActivity$1.class diff --git a/bin/classes/de/gultsch/chat/ui/ConversationActivity$2.class b/bin/classes/de/gultsch/chat/ui/ConversationActivity$2.class Binary files differnew file mode 100644 index 00000000..2a2480fa --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/ConversationActivity$2.class diff --git a/bin/classes/de/gultsch/chat/ui/ConversationActivity.class b/bin/classes/de/gultsch/chat/ui/ConversationActivity.class Binary files differnew file mode 100644 index 00000000..73587f53 --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/ConversationActivity.class diff --git a/bin/classes/de/gultsch/chat/ui/ConversationFragment.class b/bin/classes/de/gultsch/chat/ui/ConversationFragment.class Binary files differnew file mode 100644 index 00000000..fc8463c6 --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/ConversationFragment.class diff --git a/bin/classes/de/gultsch/chat/ui/ManageAccountActivity.class b/bin/classes/de/gultsch/chat/ui/ManageAccountActivity.class Binary files differnew file mode 100644 index 00000000..da54422f --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/ManageAccountActivity.class diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.class Binary files differnew file mode 100644 index 00000000..151d9df3 --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$1.class diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.class Binary files differnew file mode 100644 index 00000000..7419a15f --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$2.class diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.class Binary files differnew file mode 100644 index 00000000..afa85e9f --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity$3.class diff --git a/bin/classes/de/gultsch/chat/ui/NewConversationActivity.class b/bin/classes/de/gultsch/chat/ui/NewConversationActivity.class Binary files differnew file mode 100644 index 00000000..9b80c256 --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/NewConversationActivity.class diff --git a/bin/classes/de/gultsch/chat/ui/SettingsActivity.class b/bin/classes/de/gultsch/chat/ui/SettingsActivity.class Binary files differnew file mode 100644 index 00000000..2f2344dc --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/SettingsActivity.class diff --git a/bin/classes/de/gultsch/chat/ui/SettingsFragment.class b/bin/classes/de/gultsch/chat/ui/SettingsFragment.class Binary files differnew file mode 100644 index 00000000..cd8046f2 --- /dev/null +++ b/bin/classes/de/gultsch/chat/ui/SettingsFragment.class diff --git a/bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jar b/bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jar Binary files differnew file mode 100644 index 00000000..ea8e5c71 --- /dev/null +++ b/bin/dexedLibs/android-support-v4-6dc474cfe2b92e991d4a9010169faf31.jar diff --git a/bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jar b/bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jar Binary files differnew file mode 100644 index 00000000..796205bc --- /dev/null +++ b/bin/dexedLibs/android-support-v4-84d310e21a82b69cbcd4bdc6eebebae6.jar 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 Binary files differnew file mode 100644 index 00000000..c7a0db24 --- /dev/null +++ b/bin/res/crunch/drawable-hdpi/ic_action_add.png diff --git a/bin/res/crunch/drawable-hdpi/ic_action_send.png b/bin/res/crunch/drawable-hdpi/ic_action_send.png Binary files differnew file mode 100644 index 00000000..8c01c107 --- /dev/null +++ b/bin/res/crunch/drawable-hdpi/ic_action_send.png diff --git a/bin/res/crunch/drawable-hdpi/ic_action_send_now.png b/bin/res/crunch/drawable-hdpi/ic_action_send_now.png Binary files differnew file mode 100644 index 00000000..9a19771e --- /dev/null +++ b/bin/res/crunch/drawable-hdpi/ic_action_send_now.png diff --git a/bin/res/crunch/drawable-hdpi/ic_action_unsecure.png b/bin/res/crunch/drawable-hdpi/ic_action_unsecure.png Binary files differnew file mode 100644 index 00000000..592d9ebc --- /dev/null +++ b/bin/res/crunch/drawable-hdpi/ic_action_unsecure.png diff --git a/bin/res/crunch/drawable-hdpi/ic_launcher.png b/bin/res/crunch/drawable-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..9ff16976 --- /dev/null +++ b/bin/res/crunch/drawable-hdpi/ic_launcher.png diff --git a/bin/res/crunch/drawable-hdpi/ic_profile.png b/bin/res/crunch/drawable-hdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..505c4bec --- /dev/null +++ b/bin/res/crunch/drawable-hdpi/ic_profile.png diff --git a/bin/res/crunch/drawable-mdpi/ic_action_add.png b/bin/res/crunch/drawable-mdpi/ic_action_add.png Binary files differnew file mode 100644 index 00000000..ca14aafd --- /dev/null +++ b/bin/res/crunch/drawable-mdpi/ic_action_add.png diff --git a/bin/res/crunch/drawable-mdpi/ic_action_send.png b/bin/res/crunch/drawable-mdpi/ic_action_send.png Binary files differnew file mode 100644 index 00000000..f6b0a3c2 --- /dev/null +++ b/bin/res/crunch/drawable-mdpi/ic_action_send.png diff --git a/bin/res/crunch/drawable-mdpi/ic_action_unsecure.png b/bin/res/crunch/drawable-mdpi/ic_action_unsecure.png Binary files differnew file mode 100644 index 00000000..a6f558f8 --- /dev/null +++ b/bin/res/crunch/drawable-mdpi/ic_action_unsecure.png diff --git a/bin/res/crunch/drawable-mdpi/ic_launcher.png b/bin/res/crunch/drawable-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..719c528d --- /dev/null +++ b/bin/res/crunch/drawable-mdpi/ic_launcher.png diff --git a/bin/res/crunch/drawable-mdpi/ic_profile.png b/bin/res/crunch/drawable-mdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..d0a0a92c --- /dev/null +++ b/bin/res/crunch/drawable-mdpi/ic_profile.png diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_add.png b/bin/res/crunch/drawable-xhdpi/ic_action_add.png Binary files differnew file mode 100644 index 00000000..b6a18bde --- /dev/null +++ b/bin/res/crunch/drawable-xhdpi/ic_action_add.png diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_send.png b/bin/res/crunch/drawable-xhdpi/ic_action_send.png Binary files differnew file mode 100644 index 00000000..276097fd --- /dev/null +++ b/bin/res/crunch/drawable-xhdpi/ic_action_send.png diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_send_now.png b/bin/res/crunch/drawable-xhdpi/ic_action_send_now.png Binary files differnew file mode 100644 index 00000000..b62e30e1 --- /dev/null +++ b/bin/res/crunch/drawable-xhdpi/ic_action_send_now.png diff --git a/bin/res/crunch/drawable-xhdpi/ic_action_unsecure.png b/bin/res/crunch/drawable-xhdpi/ic_action_unsecure.png Binary files differnew file mode 100644 index 00000000..9b722b85 --- /dev/null +++ b/bin/res/crunch/drawable-xhdpi/ic_action_unsecure.png diff --git a/bin/res/crunch/drawable-xhdpi/ic_launcher.png b/bin/res/crunch/drawable-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..44c64af9 --- /dev/null +++ b/bin/res/crunch/drawable-xhdpi/ic_launcher.png diff --git a/bin/res/crunch/drawable-xhdpi/ic_profile.png b/bin/res/crunch/drawable-xhdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..75a8838b --- /dev/null +++ b/bin/res/crunch/drawable-xhdpi/ic_profile.png diff --git a/bin/res/crunch/drawable-xxhdpi/ic_launcher.png b/bin/res/crunch/drawable-xxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..5a44e82f --- /dev/null +++ b/bin/res/crunch/drawable-xxhdpi/ic_launcher.png diff --git a/bin/res/crunch/drawable-xxhdpi/ic_profile.png b/bin/res/crunch/drawable-xxhdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..461c12ba --- /dev/null +++ b/bin/res/crunch/drawable-xxhdpi/ic_profile.png diff --git a/bin/resources.ap_ b/bin/resources.ap_ Binary files differnew file mode 100644 index 00000000..6d54a502 --- /dev/null +++ b/bin/resources.ap_ 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 Binary files differnew file mode 100644 index 00000000..8e26a931 --- /dev/null +++ b/ic_launcher-web.png diff --git a/ic_profile-web.png b/ic_profile-web.png Binary files differnew file mode 100644 index 00000000..c0c6ca8f --- /dev/null +++ b/ic_profile-web.png diff --git a/libs/android-support-v4.jar b/libs/android-support-v4.jar Binary files differnew file mode 100644 index 00000000..9056828a --- /dev/null +++ b/libs/android-support-v4.jar 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 Binary files differnew file mode 100644 index 00000000..aa7cf4f2 --- /dev/null +++ b/res/drawable-hdpi/ic_action_add.png diff --git a/res/drawable-hdpi/ic_action_send.png b/res/drawable-hdpi/ic_action_send.png Binary files differnew file mode 100644 index 00000000..6384a4ee --- /dev/null +++ b/res/drawable-hdpi/ic_action_send.png diff --git a/res/drawable-hdpi/ic_action_send_now.png b/res/drawable-hdpi/ic_action_send_now.png Binary files differnew file mode 100644 index 00000000..ff0e369e --- /dev/null +++ b/res/drawable-hdpi/ic_action_send_now.png diff --git a/res/drawable-hdpi/ic_action_unsecure.png b/res/drawable-hdpi/ic_action_unsecure.png Binary files differnew file mode 100644 index 00000000..b9f442d5 --- /dev/null +++ b/res/drawable-hdpi/ic_action_unsecure.png diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..3125b12d --- /dev/null +++ b/res/drawable-hdpi/ic_launcher.png diff --git a/res/drawable-hdpi/ic_profile.png b/res/drawable-hdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..3f071dec --- /dev/null +++ b/res/drawable-hdpi/ic_profile.png 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 Binary files differnew file mode 100644 index 00000000..99b189a0 --- /dev/null +++ b/res/drawable-mdpi/ic_action_add.png diff --git a/res/drawable-mdpi/ic_action_send.png b/res/drawable-mdpi/ic_action_send.png Binary files differnew file mode 100644 index 00000000..4552ae6d --- /dev/null +++ b/res/drawable-mdpi/ic_action_send.png diff --git a/res/drawable-mdpi/ic_action_unsecure.png b/res/drawable-mdpi/ic_action_unsecure.png Binary files differnew file mode 100644 index 00000000..84072abd --- /dev/null +++ b/res/drawable-mdpi/ic_action_unsecure.png diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..b3c9a5e1 --- /dev/null +++ b/res/drawable-mdpi/ic_launcher.png diff --git a/res/drawable-mdpi/ic_profile.png b/res/drawable-mdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..0d056c7c --- /dev/null +++ b/res/drawable-mdpi/ic_profile.png 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 Binary files differnew file mode 100644 index 00000000..9d6af042 --- /dev/null +++ b/res/drawable-xhdpi/ic_action_add.png diff --git a/res/drawable-xhdpi/ic_action_send.png b/res/drawable-xhdpi/ic_action_send.png Binary files differnew file mode 100644 index 00000000..652ac68d --- /dev/null +++ b/res/drawable-xhdpi/ic_action_send.png diff --git a/res/drawable-xhdpi/ic_action_send_now.png b/res/drawable-xhdpi/ic_action_send_now.png Binary files differnew file mode 100644 index 00000000..373dde23 --- /dev/null +++ b/res/drawable-xhdpi/ic_action_send_now.png diff --git a/res/drawable-xhdpi/ic_action_unsecure.png b/res/drawable-xhdpi/ic_action_unsecure.png Binary files differnew file mode 100644 index 00000000..96b128f2 --- /dev/null +++ b/res/drawable-xhdpi/ic_action_unsecure.png diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..5ef36c2f --- /dev/null +++ b/res/drawable-xhdpi/ic_launcher.png diff --git a/res/drawable-xhdpi/ic_profile.png b/res/drawable-xhdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..88a82cf0 --- /dev/null +++ b/res/drawable-xhdpi/ic_profile.png 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 Binary files differnew file mode 100644 index 00000000..9dbbdd97 --- /dev/null +++ b/res/drawable-xxhdpi/ic_launcher.png diff --git a/res/drawable-xxhdpi/ic_profile.png b/res/drawable-xxhdpi/ic_profile.png Binary files differnew file mode 100644 index 00000000..309dc513 --- /dev/null +++ b/res/drawable-xxhdpi/ic_profile.png 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); + } +} |