initial
This commit is contained in:
commit
d451e9dd28
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="lib" path="lib/pircbot.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Yaaic2</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>
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.yaaic.client"
|
||||
android:versionCode="1" android:versionName="0.1.0">
|
||||
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="YaaicApplication">
|
||||
<activity android:name=".ServerList"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".ServerAdd"
|
||||
android:label="@string/server_add_title">
|
||||
</activity>
|
||||
<activity android:name=".Settings"
|
||||
android:label="@string/settings_title">
|
||||
</activity>
|
||||
<activity android:name=".About"
|
||||
android:label="@string/about_title"
|
||||
android:theme="@android:style/Theme.Dialog" >
|
||||
</activity>
|
||||
<activity android:name=".ServerWindow"
|
||||
android:label="ServerWindow">
|
||||
</activity>
|
||||
<service android:name=".YaaicService"/>
|
||||
</application>
|
||||
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
|
||||
</manifest>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,62 @@
|
|||
9
|
||||
|
||||
dir
|
||||
4
|
||||
svn://svn.pocmo.de/yaaic/lib
|
||||
svn://svn.pocmo.de/yaaic
|
||||
|
||||
|
||||
|
||||
2009-03-08T17:11:52.298008Z
|
||||
1
|
||||
pocmo
|
||||
|
||||
|
||||
svn:special svn:externals svn:needs-lock
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
a7894ac8-149d-4e17-93c0-b356fc648384
|
||||
|
||||
pircbot.jar
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-03-08T17:14:26.000000Z
|
||||
24c1232877573f3e8291803a7b8a7d79
|
||||
2009-03-08T17:11:52.298008Z
|
||||
1
|
||||
pocmo
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
76667
|
||||
|
|
@ -0,0 +1 @@
|
|||
9
|
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 733 B |
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 865 B |
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical">
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:padding="10dip">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/about_text"
|
||||
android:autoLink="all"
|
||||
android:clickable="true"
|
||||
android:linksClickable="true"/>
|
||||
</ScrollView>
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Homepage"
|
||||
android:layout_weight="1" />
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Donate"
|
||||
android:layout_weight="1" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
|
@ -0,0 +1,33 @@
|
|||
<?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="fill_parent">
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#FF333333"
|
||||
android:padding="5px">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Yaaic"
|
||||
android:textSize="22px" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Yet Another Android IRC Client"
|
||||
android:paddingLeft="10px"/>
|
||||
</LinearLayout>
|
||||
<ListView
|
||||
android:id="@android:id/list"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<TextView
|
||||
android:text="Title:"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<EditText
|
||||
android:id="@+id/server_title"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:text="Host:"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<EditText
|
||||
android:id="@+id/server_host"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:text="Port:"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<EditText
|
||||
android:id="@+id/server_port"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="6667" />
|
||||
<TextView
|
||||
android:text="Password:"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<EditText
|
||||
android:id="@+id/server_password"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<CheckBox
|
||||
android:id="@+id/server_autoconnect"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Auto connect on startup" />
|
||||
<CheckBox
|
||||
android:id="@+id/server_usessl"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Use SSL" />
|
||||
<Button
|
||||
android:id="@+id/server_add"
|
||||
android:drawableLeft="@android:drawable/ic_input_add"
|
||||
android:drawablePadding="3px"
|
||||
android:text="Add to list"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" android:padding="3px">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawableLeft="@android:drawable/presence_away"
|
||||
android:layout_margin="5px"
|
||||
android:drawablePadding="5px"
|
||||
android:text="" />
|
||||
<!-- <RadioButton
|
||||
android:id="@+id/server_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_marginRight="5px"/>
|
||||
-->
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/server_title"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Title"
|
||||
android:textSize="22px"/>
|
||||
<TextView
|
||||
android:id="@+id/server_host"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Host" />
|
||||
<TextView
|
||||
android:id="@+id/server_channels"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Channels" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/server_title"
|
||||
android:text=""
|
||||
android:textSize="22px"
|
||||
android:drawableLeft="@android:drawable/presence_away"
|
||||
android:padding="5px"
|
||||
android:drawablePadding="5px"
|
||||
android:background="#FF333333" />
|
||||
<ExpandableListView
|
||||
android:id="@android:id/list"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="#FF333333"
|
||||
android:padding="5px">
|
||||
<TextView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/server_log"
|
||||
android:text="Connecting..." />
|
||||
</ScrollView>
|
||||
<EditText
|
||||
android:id="@+id/server_input"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/server_add"
|
||||
android:title="Add Server"
|
||||
android:icon="@android:drawable/ic_menu_add" />
|
||||
<item
|
||||
android:id="@+id/settings"
|
||||
android:title="Settings"
|
||||
android:icon="@android:drawable/ic_menu_preferences" />
|
||||
<item
|
||||
android:id="@+id/about"
|
||||
android:title="About"
|
||||
android:icon="@android:drawable/ic_menu_help" />
|
||||
</menu>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/server_quit"
|
||||
android:title="Quit"
|
||||
android:icon="@android:drawable/ic_menu_close_clear_cancel" />
|
||||
</menu>
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<array name="server_popup">
|
||||
<item>Connect</item>
|
||||
<!-- <item>Edit</item> -->
|
||||
<item>Delete</item>
|
||||
<item>Disconnect</item>
|
||||
</array>
|
||||
</resources>
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Yaaic</string>
|
||||
|
||||
<string name="server_add_title">Yaaic: New Server</string>
|
||||
<string name="settings_title">Yaaic: Settings</string>
|
||||
<string name="about_title">About Yaaic</string>
|
||||
|
||||
<string name="about_text">\
|
||||
Yaaic 0.1\n\
|
||||
Yet Another Android IRC Client\n\
|
||||
Sebastian Kaspari\n\
|
||||
http://www.yaaic.org\n\
|
||||
\n\
|
||||
Yaaic is free and will remain free! If you like Yaaic you can support Yaaic by donating a small amount. :)\n\
|
||||
\n\
|
||||
Thanks to:\n\
|
||||
- Bonko -\n\
|
||||
For Beta-Testing and Reporting Bugs\n\
|
||||
\n\
|
||||
- Paul Mutton -\n\
|
||||
For the awesome PircBot IRC API\n\
|
||||
</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory
|
||||
android:title="Chat">
|
||||
<EditTextPreference
|
||||
android:key="foreground_color"
|
||||
android:title="Foreground color"
|
||||
android:summary="Color of the text"
|
||||
android:defaultValue="#ffffff" />
|
||||
<EditTextPreference
|
||||
android:key="background_color"
|
||||
android:title="Background color"
|
||||
android:summary="Color of the background"
|
||||
android:defaultValue="#000000" />
|
||||
<CheckBoxPreference
|
||||
android:key="strip_mirc_colors"
|
||||
android:title="Strip mIRC colors"
|
||||
android:summary="Strip colors used by mIRC"
|
||||
android:defaultValue="true" />
|
||||
<ListPreference
|
||||
android:key="font_size"
|
||||
android:title="Font size"
|
||||
android:summary="Size of the font" />
|
||||
<CheckBoxPreference
|
||||
android:key="show_colors"
|
||||
android:title="Show colors"
|
||||
android:summary="Use colors to highlight special events"
|
||||
android:defaultValue="true" />
|
||||
<CheckBoxPreference
|
||||
android:key="show_smileys"
|
||||
android:title="Show Smileys"
|
||||
android:summary="Show smiley icons instead of text"
|
||||
android:defaultValue="true" />
|
||||
<CheckBoxPreference
|
||||
android:key="show_icons"
|
||||
android:title="Show Icons"
|
||||
android:summary="Show icons to highlight special events"
|
||||
android:defaultValue="true" />
|
||||
<CheckBoxPreference
|
||||
android:key="show_timestamp"
|
||||
android:title="Show timestamp"
|
||||
android:summary="Show timestamp in front of messages"
|
||||
android:defaultValue="false" />
|
||||
<EditTextPreference
|
||||
android:key="timestamp_format"
|
||||
android:title="Timestamp format"
|
||||
android:summary="Format of the timestamp"
|
||||
android:defaultValue="[H:i]"
|
||||
android:dependency="show_timestamp"
|
||||
android:layout="?android:attr/preferenceLayoutChild" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
android:title="Misc">
|
||||
<ListPreference
|
||||
android:key="language"
|
||||
android:title="Language"
|
||||
android:summary="Select language" />
|
||||
<CheckBoxPreference
|
||||
android:key="log_sdcard"
|
||||
android:title="Log on SD Card"
|
||||
android:summary="Save logs on SD Card in /yaaic/logs/"
|
||||
android:defaultValue="false" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
|
@ -0,0 +1,14 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class About extends Activity
|
||||
{
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.about);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/* 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 org.yaaic.client;
|
||||
|
||||
public final class R {
|
||||
public static final class array {
|
||||
public static final int server_popup=0x7f050000;
|
||||
}
|
||||
public static final class attr {
|
||||
}
|
||||
public static final class drawable {
|
||||
public static final int add=0x7f020000;
|
||||
public static final int icon=0x7f020001;
|
||||
public static final int settings=0x7f020002;
|
||||
}
|
||||
public static final class id {
|
||||
public static final int about=0x7f08000b;
|
||||
public static final int server_add=0x7f080006;
|
||||
public static final int server_autoconnect=0x7f080004;
|
||||
public static final int server_channels=0x7f080007;
|
||||
public static final int server_host=0x7f080001;
|
||||
public static final int server_input=0x7f080009;
|
||||
public static final int server_log=0x7f080008;
|
||||
public static final int server_password=0x7f080003;
|
||||
public static final int server_port=0x7f080002;
|
||||
public static final int server_quit=0x7f08000c;
|
||||
public static final int server_title=0x7f080000;
|
||||
public static final int server_usessl=0x7f080005;
|
||||
public static final int settings=0x7f08000a;
|
||||
}
|
||||
public static final class layout {
|
||||
public static final int about=0x7f030000;
|
||||
public static final int main=0x7f030001;
|
||||
public static final int serveradd=0x7f030002;
|
||||
public static final int serveritem=0x7f030003;
|
||||
public static final int serverwindow=0x7f030004;
|
||||
}
|
||||
public static final class menu {
|
||||
public static final int main=0x7f070000;
|
||||
public static final int server=0x7f070001;
|
||||
}
|
||||
public static final class string {
|
||||
public static final int about_text=0x7f060004;
|
||||
public static final int about_title=0x7f060003;
|
||||
public static final int app_name=0x7f060000;
|
||||
public static final int server_add_title=0x7f060001;
|
||||
public static final int settings_title=0x7f060002;
|
||||
}
|
||||
public static final class xml {
|
||||
public static final int settings=0x7f040000;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import org.yaaic.client.db.ServerDatabase;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.EditText;
|
||||
|
||||
public class ServerAdd extends Activity implements OnClickListener
|
||||
{
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.serveradd);
|
||||
|
||||
Button button = (Button) findViewById(R.id.server_add);
|
||||
button.setOnClickListener(this);
|
||||
}
|
||||
|
||||
public void onClick(View v)
|
||||
{
|
||||
switch (v.getId()) {
|
||||
case R.id.server_add:
|
||||
|
||||
String title = ((EditText) findViewById(R.id.server_title)).getText().toString();
|
||||
String host = ((EditText) findViewById(R.id.server_host)).getText().toString();
|
||||
int port = Integer.parseInt(((EditText) findViewById(R.id.server_port)).getText().toString());
|
||||
String password = ((EditText) findViewById(R.id.server_password)).getText().toString();
|
||||
boolean autoConnect = ((CheckBox) findViewById(R.id.server_autoconnect)).isChecked();
|
||||
boolean useSSL = ((CheckBox) findViewById(R.id.server_usessl)).isChecked();
|
||||
|
||||
ServerDatabase db = new ServerDatabase(this);
|
||||
db.addServer(title, host, port, password, autoConnect, useSSL);
|
||||
db.close();
|
||||
|
||||
this.finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,243 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.ListActivity;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.animation.AlphaAnimation;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationSet;
|
||||
import android.view.animation.LayoutAnimationController;
|
||||
import android.view.animation.TranslateAnimation;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.SimpleCursorAdapter;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.widget.AdapterView.OnItemLongClickListener;
|
||||
|
||||
import org.yaaic.client.db.ServerConstants;
|
||||
import org.yaaic.client.db.ServerDatabase;
|
||||
import org.yaaic.client.irc.IrcBinder;
|
||||
import org.yaaic.client.irc.IrcService;
|
||||
|
||||
public class ServerList extends ListActivity implements OnItemLongClickListener, ServiceConnection {
|
||||
public static final String TAG = "Yaaic/ServerList";
|
||||
|
||||
private ServerDatabase db;
|
||||
|
||||
private static final String[] FROM = { ServerConstants.TITLE, ServerConstants.HOST };
|
||||
private static final int[] TO = { R.id.server_title, R.id.server_host };
|
||||
|
||||
private Cursor cursor;
|
||||
private IrcBinder binder;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
Log.d(TAG, "onCreate");
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Start Service
|
||||
Intent serviceIntent = new Intent(this, IrcService.class);
|
||||
startService(serviceIntent);
|
||||
boolean binding = bindService(serviceIntent, this, 0);
|
||||
Log.d(TAG, "Binding to Service: " + binding);
|
||||
|
||||
setContentView(R.layout.main);
|
||||
|
||||
/*
|
||||
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
Notification notification = new Notification(R.drawable.icon, "#pocmo <Henna> Hallo Pocmo", System.currentTimeMillis());
|
||||
PendingIntent contentIntent = PendingIntent.getActivity(this, 123, new Intent(this, ServerAdd.class), 0);
|
||||
notification.setLatestEventInfo(this, "#pocmo", "<Henna> Hallo Pocmo", contentIntent);
|
||||
manager.notify(1234, notification);
|
||||
*/
|
||||
|
||||
db = new ServerDatabase(this);
|
||||
|
||||
cursor = db.getServers();
|
||||
this.startManagingCursor(cursor);
|
||||
|
||||
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.serveritem, cursor, FROM, TO);
|
||||
this.setListAdapter(adapter);
|
||||
|
||||
this.getListView().setOnItemLongClickListener(this);
|
||||
|
||||
AnimationSet set = new AnimationSet(true);
|
||||
|
||||
Animation animation = new AlphaAnimation(0.0f, 1.0f);
|
||||
animation.setDuration(100);
|
||||
set.addAnimation(animation);
|
||||
|
||||
animation = new TranslateAnimation(
|
||||
Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f,
|
||||
Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f
|
||||
);
|
||||
animation.setDuration(300);
|
||||
set.addAnimation(animation);
|
||||
|
||||
LayoutAnimationController controller =
|
||||
new LayoutAnimationController(set, 0.5f);
|
||||
ListView lv = (ListView) getListView();
|
||||
lv.setLayoutAnimation(controller);
|
||||
}
|
||||
|
||||
public void onResume()
|
||||
{
|
||||
Log.d(TAG, "onResume");
|
||||
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
public void onPause()
|
||||
{
|
||||
Log.d(TAG, "onPause");
|
||||
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
public void onDestroy()
|
||||
{
|
||||
Log.d(TAG, "onDestroy");
|
||||
|
||||
super.onDestroy();
|
||||
|
||||
db.close();
|
||||
unbindService(this);
|
||||
}
|
||||
|
||||
public void onListItemClick(ListView listView, View view, int position, long id)
|
||||
{
|
||||
TextView tv = (TextView) view.findViewById(R.id.server_title);
|
||||
|
||||
Intent serverIntent = new Intent(this, ServerWindow.class);
|
||||
serverIntent.putExtra("server_title", tv.getText());
|
||||
startActivity(serverIntent);
|
||||
//Toast.makeText(this, tv.getText().toString(), Toast.LENGTH_SHORT).show();
|
||||
//db.removeServer(tv.getText().toString());
|
||||
//cursor.requery();
|
||||
}
|
||||
|
||||
public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
|
||||
final TextView tv = (TextView) v.findViewById(R.id.server_title);
|
||||
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(tv.getText())
|
||||
.setItems(R.array.server_popup,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
onServerDialogSelect(i, tv.getText().toString());
|
||||
}
|
||||
}
|
||||
).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onServerDialogSelect(int item, String title)
|
||||
{
|
||||
Log.d(TAG, "ServerDialogSelect: Item #" + item);
|
||||
|
||||
switch (item)
|
||||
{
|
||||
case 0: // Connect
|
||||
if (!binder.isConnected(title)) {
|
||||
connectToServer(title);
|
||||
} else {
|
||||
Toast toast = Toast.makeText(this, "You are already connected to " + title, Toast.LENGTH_SHORT);
|
||||
toast.show();
|
||||
}
|
||||
break;
|
||||
case 1: // Delete
|
||||
db.removeServer(title);
|
||||
cursor.requery();
|
||||
break;
|
||||
case 2: // Disconnect
|
||||
binder.disconnect(title);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onCreateOptionsMenu(Menu menu)
|
||||
{
|
||||
super.onCreateOptionsMenu(menu);
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.main, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
switch (item.getItemId())
|
||||
{
|
||||
case R.id.server_add:
|
||||
Intent serverAddIntent = new Intent(this, ServerAdd.class);
|
||||
startActivity(serverAddIntent);
|
||||
return true;
|
||||
case R.id.settings:
|
||||
Intent settingsIntent = new Intent(this, Settings.class);
|
||||
startActivity(settingsIntent);
|
||||
return true;
|
||||
case R.id.about:
|
||||
Intent aboutIntent = new Intent(this, About.class);
|
||||
startActivity(aboutIntent);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onServiceConnected(ComponentName name, IBinder service)
|
||||
{
|
||||
Log.d(TAG, "Service connected");
|
||||
|
||||
binder = (IrcBinder) service;
|
||||
|
||||
// AutoConnect
|
||||
Cursor autoCursor = db.getAutoConnectServers();
|
||||
while(autoCursor.moveToNext()) {
|
||||
binder.connect(
|
||||
autoCursor.getString(autoCursor.getColumnIndex(ServerConstants.TITLE)),
|
||||
autoCursor.getString(autoCursor.getColumnIndex(ServerConstants.HOST)),
|
||||
autoCursor.getInt(autoCursor.getColumnIndex(ServerConstants.PORT)),
|
||||
autoCursor.getString(autoCursor.getColumnIndex(ServerConstants.PASSWORD))
|
||||
);
|
||||
}
|
||||
autoCursor.close();
|
||||
}
|
||||
|
||||
public void onServiceDisconnected(ComponentName name)
|
||||
{
|
||||
Log.d(TAG, "Service disconnected");
|
||||
}
|
||||
|
||||
private void connectToServer(String title)
|
||||
{
|
||||
Cursor cursor = db.getServer(title);
|
||||
if (cursor.moveToNext()) {
|
||||
binder.connect(
|
||||
cursor.getString(cursor.getColumnIndex(ServerConstants.TITLE)),
|
||||
cursor.getString(cursor.getColumnIndex(ServerConstants.HOST)),
|
||||
cursor.getInt(cursor.getColumnIndex(ServerConstants.PORT)),
|
||||
cursor.getString(cursor.getColumnIndex(ServerConstants.PASSWORD))
|
||||
);
|
||||
} else {
|
||||
Log.d(TAG, "Could not find server: " + title);
|
||||
}
|
||||
cursor.close();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import org.yaaic.client.db.ServerConstants;
|
||||
import org.yaaic.client.db.ServerDatabase;
|
||||
import org.yaaic.client.irc.IrcBinder;
|
||||
import org.yaaic.client.irc.IrcService;
|
||||
|
||||
import android.app.ExpandableListActivity;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class ServerWindow extends ExpandableListActivity implements ServiceConnection
|
||||
{
|
||||
private static final String TAG = "Yaaic/ServerWindow";
|
||||
private IrcBinder binder;
|
||||
private String title;
|
||||
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.serverwindow);
|
||||
|
||||
title = getIntent().getStringExtra("server_title");
|
||||
setTitle(title);
|
||||
|
||||
((TextView) findViewById(R.id.server_title)).setText(title);
|
||||
|
||||
setListAdapter(new ServerWindowListAdapter(this));
|
||||
//registerForContextMenu(getExpandableListView());
|
||||
|
||||
Intent serviceIntent = new Intent(this, IrcService.class);
|
||||
boolean binding = bindService(serviceIntent, this, 0);
|
||||
Log.d(TAG, "Binding to Service: " + binding);
|
||||
}
|
||||
|
||||
public boolean onCreateOptionsMenu(Menu menu)
|
||||
{
|
||||
super.onCreateOptionsMenu(menu);
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.server, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
switch (item.getItemId())
|
||||
{
|
||||
case R.id.server_quit:
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onServiceConnected(ComponentName name, IBinder service)
|
||||
{
|
||||
Log.d(TAG, "Service connected");
|
||||
|
||||
binder = (IrcBinder) service;
|
||||
|
||||
ServerDatabase db = new ServerDatabase(this);
|
||||
Cursor cursor = db.getServer(title);
|
||||
if (cursor.moveToNext()) {
|
||||
binder.connect(
|
||||
cursor.getString(cursor.getColumnIndex(ServerConstants.TITLE)),
|
||||
cursor.getString(cursor.getColumnIndex(ServerConstants.HOST)),
|
||||
cursor.getInt(cursor.getColumnIndex(ServerConstants.PORT)),
|
||||
cursor.getString(cursor.getColumnIndex(ServerConstants.PASSWORD))
|
||||
);
|
||||
}
|
||||
cursor.close();
|
||||
db.close();
|
||||
|
||||
TextView tv = (TextView) findViewById(R.id.server_title);
|
||||
|
||||
if (binder.isConnected(title)) {
|
||||
tv.setCompoundDrawablesWithIntrinsicBounds(
|
||||
getResources().getDrawable(android.R.drawable.presence_online),
|
||||
null,
|
||||
null,
|
||||
null
|
||||
);
|
||||
} else {
|
||||
tv.setCompoundDrawablesWithIntrinsicBounds(
|
||||
getResources().getDrawable(android.R.drawable.presence_offline),
|
||||
null,
|
||||
null,
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public void onServiceDisconnected(ComponentName name)
|
||||
{
|
||||
Log.d(TAG, "Service disconnected");
|
||||
}
|
||||
|
||||
public void onDestroy()
|
||||
{
|
||||
Log.d(TAG, "onDestroy");
|
||||
|
||||
super.onDestroy();
|
||||
|
||||
unbindService(this);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AbsListView;
|
||||
import android.widget.BaseExpandableListAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class ServerWindowListAdapter extends BaseExpandableListAdapter
|
||||
{
|
||||
private ServerWindow serverWindow;
|
||||
private String[] groups = { "Channels (0)", "Queries (0)" };
|
||||
|
||||
public ServerWindowListAdapter(ServerWindow serverWindow)
|
||||
{
|
||||
this.serverWindow = serverWindow;
|
||||
}
|
||||
|
||||
public Object getChild(int groupPosition, int childPosition) {
|
||||
return "Child";
|
||||
}
|
||||
|
||||
public long getChildId(int groupPosition, int childPosition) {
|
||||
return childPosition;
|
||||
}
|
||||
|
||||
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
|
||||
TextView textView = getGenericView();
|
||||
textView.setText(getChild(groupPosition, childPosition).toString());
|
||||
return textView;
|
||||
}
|
||||
|
||||
public int getChildrenCount(int groupPosition) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public Object getGroup(int groupPosition) {
|
||||
return groups[groupPosition];
|
||||
}
|
||||
|
||||
public int getGroupCount() {
|
||||
return groups.length;
|
||||
}
|
||||
|
||||
public long getGroupId(int groupPosition) {
|
||||
return groupPosition;
|
||||
}
|
||||
|
||||
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
|
||||
TextView textView = getGenericView();
|
||||
textView.setText(getGroup(groupPosition).toString());
|
||||
return textView;
|
||||
}
|
||||
|
||||
public boolean hasStableIds() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isChildSelectable(int groupPosition, int childPosition) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public TextView getGenericView() {
|
||||
// Layout parameters for the ExpandableListView
|
||||
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
|
||||
ViewGroup.LayoutParams.FILL_PARENT, 64);
|
||||
|
||||
TextView textView = new TextView(serverWindow);
|
||||
textView.setLayoutParams(lp);
|
||||
// Center the text vertically
|
||||
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
|
||||
// Set the text starting position
|
||||
textView.setPadding(36, 0, 0, 0);
|
||||
return textView;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
|
||||
public class Settings extends PreferenceActivity
|
||||
{
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.settings);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package org.yaaic.client;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
public class YaaicApplication extends Application {
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package org.yaaic.client.db;
|
||||
|
||||
import android.provider.BaseColumns;
|
||||
|
||||
public interface ChannelConstants extends BaseColumns
|
||||
{
|
||||
public static final String TABLE_NAME = "channels";
|
||||
|
||||
public static final String NAME = "name";
|
||||
public static final String PASSWORD = "password";
|
||||
public static final String SERVER = "server";
|
||||
|
||||
public static final String[] ALL = {
|
||||
NAME,
|
||||
PASSWORD,
|
||||
SERVER
|
||||
};
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package org.yaaic.client.db;
|
||||
|
||||
public class IdentityConstants {
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package org.yaaic.client.db;
|
||||
|
||||
import android.provider.BaseColumns;
|
||||
|
||||
public interface ServerConstants extends BaseColumns
|
||||
{
|
||||
public static final String TABLE_NAME = "servers";
|
||||
|
||||
public static final String TITLE = "title";
|
||||
public static final String HOST = "host";
|
||||
public static final String PORT = "port";
|
||||
public static final String PASSWORD = "password";
|
||||
public static final String AUTOCONNECT = "autoConnect";
|
||||
public static final String USE_SSL = "useSSL";
|
||||
public static final String IDENTITY = "identity";
|
||||
|
||||
public static final String[] ALL = {
|
||||
_ID,
|
||||
TITLE,
|
||||
HOST,
|
||||
PORT,
|
||||
PASSWORD,
|
||||
AUTOCONNECT,
|
||||
USE_SSL
|
||||
};
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
package org.yaaic.client.db;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
|
||||
public class ServerDatabase extends SQLiteOpenHelper
|
||||
{
|
||||
private static final String DATABASE_NAME = "servers.db";
|
||||
private static final int DATABASE_VERSION = 1;
|
||||
|
||||
public ServerDatabase(Context context)
|
||||
{
|
||||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(SQLiteDatabase db)
|
||||
{
|
||||
db.execSQL("CREATE TABLE " + ServerConstants.TABLE_NAME + " ( "
|
||||
+ ServerConstants._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
+ ServerConstants.TITLE + " TEXT NOT NULL, "
|
||||
+ ServerConstants.HOST + " TEXT NOT NULL, "
|
||||
+ ServerConstants.PORT + " INTEGER, "
|
||||
+ ServerConstants.PASSWORD + " TEXT, "
|
||||
+ ServerConstants.AUTOCONNECT + " BOOLEAN, " // XXX: Does SQLLite support boolean?
|
||||
+ ServerConstants.USE_SSL + " BOOLEAN, "
|
||||
+ ServerConstants.IDENTITY + " INTEGER"
|
||||
+ ");"
|
||||
);
|
||||
|
||||
db.execSQL("CREATE TABLE " + ChannelConstants.TABLE_NAME + " ("
|
||||
+ ChannelConstants._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
+ ChannelConstants.NAME + " TEXT NOT NULL, "
|
||||
+ ChannelConstants.PASSWORD + " TEXT, "
|
||||
+ ChannelConstants.SERVER + " INTEGER"
|
||||
+ ");"
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
|
||||
{
|
||||
// XXX: We delete the database currently, in future we want to
|
||||
// migrate the database to the new version (add or remove rows..)
|
||||
db.execSQL("DROP TABLE IF EXISTS " + ServerConstants.TABLE_NAME + ";");
|
||||
db.execSQL("DROP TABLE IF EXISTS " + ChannelConstants.TABLE_NAME + ";");
|
||||
|
||||
onCreate(db);
|
||||
}
|
||||
|
||||
public void addServer(String title, String host, int port, String password, boolean autoConnect, boolean useSSL)
|
||||
{
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(ServerConstants.TITLE, title);
|
||||
values.put(ServerConstants.HOST, host);
|
||||
values.put(ServerConstants.PORT, port);
|
||||
values.put(ServerConstants.PASSWORD, password);
|
||||
values.put(ServerConstants.AUTOCONNECT, autoConnect);
|
||||
values.put(ServerConstants.USE_SSL, useSSL);
|
||||
|
||||
this.getWritableDatabase().insert(ServerConstants.TABLE_NAME, null, values);
|
||||
}
|
||||
|
||||
public void addChannel(int server, String name, String password)
|
||||
{
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(ChannelConstants.NAME, name);
|
||||
values.put(ChannelConstants.PASSWORD, password);
|
||||
values.put(ChannelConstants.SERVER, server);
|
||||
|
||||
this.getWritableDatabase().insert(ServerConstants.TABLE_NAME, null, values);
|
||||
}
|
||||
|
||||
public Cursor getServers()
|
||||
{
|
||||
return this.getReadableDatabase().query(
|
||||
ServerConstants.TABLE_NAME,
|
||||
ServerConstants.ALL,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
ServerConstants.TITLE + " ASC"
|
||||
);
|
||||
}
|
||||
|
||||
public Cursor getAutoConnectServers()
|
||||
{
|
||||
return this.getReadableDatabase().query(
|
||||
ServerConstants.TABLE_NAME,
|
||||
ServerConstants.ALL,
|
||||
ServerConstants.AUTOCONNECT + " = 1",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
ServerConstants.TITLE + " ASC"
|
||||
);
|
||||
}
|
||||
|
||||
public Cursor getChannels()
|
||||
{
|
||||
return this.getReadableDatabase().query(
|
||||
ChannelConstants.TABLE_NAME,
|
||||
ChannelConstants.ALL,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
ChannelConstants.NAME + " ASC");
|
||||
}
|
||||
|
||||
public Cursor getChannelsByServer(int server)
|
||||
{
|
||||
return this.getReadableDatabase().query(
|
||||
ChannelConstants.TABLE_NAME,
|
||||
ChannelConstants.ALL,
|
||||
ChannelConstants.SERVER + "=" + server,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
ChannelConstants.NAME + " ASC");
|
||||
}
|
||||
|
||||
public Cursor getServer(String title)
|
||||
{
|
||||
return this.getReadableDatabase().query(
|
||||
ServerConstants.TABLE_NAME,
|
||||
ServerConstants.ALL,
|
||||
ServerConstants.TITLE + " = '" + title + "'",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
ServerConstants.TITLE + " ASC"
|
||||
);
|
||||
}
|
||||
|
||||
public void removeServer(String title)
|
||||
{
|
||||
this.getWritableDatabase().execSQL("DELETE FROM " + ServerConstants.TABLE_NAME + " WHERE title = '" + title + "';");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package org.yaaic.client.irc;
|
||||
|
||||
public class ChannelBuffer extends MessageBuffer {
|
||||
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
package org.yaaic.client.irc;
|
||||
|
||||
import android.os.Binder;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Kaspari <pocmo@yaaic.org>
|
||||
*/
|
||||
public class IrcBinder extends Binder
|
||||
{
|
||||
private IrcService service;
|
||||
private String TAG = "YaaicBinder";
|
||||
|
||||
/**
|
||||
*
|
||||
* @param service
|
||||
*/
|
||||
public IrcBinder(IrcService service)
|
||||
{
|
||||
Log.d(TAG, "Binder created");
|
||||
|
||||
this.service = service;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param title
|
||||
* @param host
|
||||
* @param port
|
||||
* @param password
|
||||
*/
|
||||
public void connect(final String title, final String host, final int port, final String password)
|
||||
{
|
||||
Thread thread = new Thread() {
|
||||
public void run() {
|
||||
service.connect(title, host, port, password);
|
||||
}
|
||||
};
|
||||
thread.start();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param title
|
||||
* @return
|
||||
*/
|
||||
public boolean isConnected(String title) {
|
||||
IrcServer server = this.service.getIrcServer(title);
|
||||
if (server != null) {
|
||||
return server.isConnected();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param title
|
||||
* @return
|
||||
*/
|
||||
public boolean disconnect(String title)
|
||||
{
|
||||
IrcServer server = this.service.getIrcServer(title);
|
||||
if (server != null) {
|
||||
if (server.isConnected()) {
|
||||
server.quitServer("Yaaic - Yet Another Android IRC Client - www.yaaic.org");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.yaaic.client.irc;
|
||||
|
||||
import org.jibble.pircbot.PircBot;
|
||||
|
||||
public class IrcServer extends PircBot
|
||||
{
|
||||
public IrcServer()
|
||||
{
|
||||
this.setName("Yaaic");
|
||||
this.setAutoNickChange(true);
|
||||
this.setLogin("yaaic");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
package org.yaaic.client.irc;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.jibble.pircbot.IrcException;
|
||||
import org.jibble.pircbot.NickAlreadyInUseException;
|
||||
import org.yaaic.client.db.ServerDatabase;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Kaspari
|
||||
*/
|
||||
public class IrcService extends Service
|
||||
{
|
||||
private static final String TAG = "Yaaic/Service";
|
||||
|
||||
private int createCounter = 0;
|
||||
private IrcBinder binder;
|
||||
private Handler handler;
|
||||
|
||||
private HashMap<String, IrcServer> servers = new HashMap<String, IrcServer>();
|
||||
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
Log.d(TAG, "onCreate(" + createCounter + ")");
|
||||
|
||||
super.onCreate();
|
||||
createCounter++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent)
|
||||
{
|
||||
Log.d(TAG, "onBind");
|
||||
|
||||
if (binder == null) {
|
||||
binder = new IrcBinder(this);
|
||||
}
|
||||
return binder;
|
||||
}
|
||||
|
||||
|
||||
public int getCounter()
|
||||
{
|
||||
return createCounter;
|
||||
}
|
||||
|
||||
public Handler getHandler()
|
||||
{
|
||||
return handler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy()
|
||||
{
|
||||
Log.d(TAG, "onDestroy(" + createCounter + ")");
|
||||
|
||||
super.onDestroy();
|
||||
createCounter--;
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to server
|
||||
*
|
||||
* @param title Title of the IRC-Network
|
||||
* @param host
|
||||
* @param port
|
||||
* @param password (If needed, else an empty string)
|
||||
*/
|
||||
public void connect(String title, String host, int port, String password)
|
||||
{
|
||||
if(!servers.containsKey(title)) {
|
||||
Log.d(TAG, "Connect to " + title + ": " + host + ":" + port + "[" + password + "]");
|
||||
|
||||
IrcServer irc = new IrcServer();
|
||||
|
||||
try {
|
||||
irc.connect(host, port);
|
||||
servers.put(title, irc);
|
||||
}
|
||||
catch(NickAlreadyInUseException e) {
|
||||
Log.d(TAG, e.getMessage());
|
||||
}
|
||||
catch(IrcException e) {
|
||||
Log.d(TAG, e.getMessage());
|
||||
}
|
||||
catch(IOException e) {
|
||||
Log.d(TAG, e.getMessage());
|
||||
}
|
||||
} else {
|
||||
Log.d(TAG, "Already connected to: " + title);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get IrcServer Object by Title
|
||||
*
|
||||
* @param title Title of the IRC-Network (PK)
|
||||
* @return IrcServer Object or null
|
||||
*/
|
||||
public IrcServer getIrcServer(String title)
|
||||
{
|
||||
return servers.get(title);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package org.yaaic.client.irc;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.text.SpannableString;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Kaspari <pocmo@yaaic.org>
|
||||
*/
|
||||
public class MessageBuffer
|
||||
{
|
||||
private ArrayList<SpannableString> messageBuffer;
|
||||
|
||||
/**
|
||||
* Maximum Buffer Size
|
||||
*/
|
||||
private static final int MAX_SIZE = 30;
|
||||
|
||||
/**
|
||||
* Maximum Buffer Size in Emergencies, e.g. if we are low on memory
|
||||
*/
|
||||
private static final int EMERGENCY_MAX_SIZE = 10;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public MessageBuffer()
|
||||
{
|
||||
messageBuffer = new ArrayList<SpannableString>();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param s
|
||||
* @return
|
||||
*/
|
||||
public boolean add(SpannableString s)
|
||||
{
|
||||
if (messageBuffer.size() > MAX_SIZE) {
|
||||
messageBuffer.remove(0);
|
||||
}
|
||||
return messageBuffer.add(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Truncate the buffer to the maximum size (emergency)
|
||||
*
|
||||
* Use this if we are low on memory
|
||||
*/
|
||||
public void truncate()
|
||||
{
|
||||
while (messageBuffer.size() > EMERGENCY_MAX_SIZE) {
|
||||
messageBuffer.remove(0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package org.yaaic.client.irc;
|
||||
|
||||
public class ServerBuffer extends MessageBuffer {
|
||||
|
||||
}
|
Loading…
Reference in New Issue