Refactoring ServersActivity to new (more "Material") OverviewFragment.
The new launch activity is MainActivity. The other activities will mostly become fragments.
@ -22,6 +22,8 @@ android {
|
|||||||
dependencies {
|
dependencies {
|
||||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
compile 'com.android.support:support-v4:22.0.0'
|
compile 'com.android.support:support-v4:22.0.0'
|
||||||
|
compile 'com.android.support:cardview-v7:22.0.0'
|
||||||
|
compile "com.android.support:recyclerview-v7:22.0.0"
|
||||||
|
|
||||||
compile 'com.viewpagerindicator:library:2.4.1@aar'
|
compile 'com.viewpagerindicator:library:2.4.1@aar'
|
||||||
}
|
}
|
||||||
|
@ -27,12 +27,11 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:icon="@drawable/icon"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="Yaaic"
|
android:label="Yaaic"
|
||||||
android:theme="@style/Theme.Yaaic"
|
android:theme="@style/Theme.Yaaic"
|
||||||
android:allowBackup="true">
|
android:allowBackup="true">
|
||||||
<activity
|
<activity android:name=".activity.MainActivity"
|
||||||
android:name=".activity.ServersActivity"
|
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:launchMode="standard" >
|
android:launchMode="standard" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
101
app/src/main/java/org/yaaic/activity/MainActivity.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2015 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.activity;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.ServiceConnection;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.IBinder;
|
||||||
|
|
||||||
|
import org.yaaic.R;
|
||||||
|
import org.yaaic.fragment.OverviewFragment;
|
||||||
|
import org.yaaic.irc.IRCBinder;
|
||||||
|
import org.yaaic.irc.IRCService;
|
||||||
|
import org.yaaic.model.Extra;
|
||||||
|
import org.yaaic.model.Server;
|
||||||
|
import org.yaaic.model.Status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main activity of Yaaic. We'll add, remove and replace fragments here.
|
||||||
|
*/
|
||||||
|
public class MainActivity extends Activity implements OverviewFragment.Callback, ServiceConnection {
|
||||||
|
private IRCBinder binder;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
setContentView(R.layout.activity_main);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
Intent intent = new Intent(this, IRCService.class);
|
||||||
|
intent.setAction(IRCService.ACTION_BACKGROUND);
|
||||||
|
startService(intent);
|
||||||
|
|
||||||
|
bindService(intent, this, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
|
||||||
|
if (binder != null && binder.getService() != null) {
|
||||||
|
binder.getService().checkServiceStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
unbindService(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServerSelected(Server server) {
|
||||||
|
Intent intent = new Intent(this, ConversationActivity.class);
|
||||||
|
|
||||||
|
if (server.getStatus() == Status.DISCONNECTED && !server.mayReconnect()) {
|
||||||
|
server.setStatus(Status.PRE_CONNECTING);
|
||||||
|
intent.putExtra(Extra.CONNECT, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
intent.putExtra(Extra.SERVER_ID, server.getId());
|
||||||
|
startActivity(intent);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IRCBinder getBinder() {
|
||||||
|
return binder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
binder = (IRCBinder) service;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
binder = null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,347 +0,0 @@
|
|||||||
/*
|
|
||||||
Yaaic - Yet Another Android IRC Client
|
|
||||||
|
|
||||||
Copyright 2009-2013 Sebastian Kaspari
|
|
||||||
|
|
||||||
This file is part of Yaaic.
|
|
||||||
|
|
||||||
Yaaic is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Yaaic is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.yaaic.activity;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.yaaic.R;
|
|
||||||
import org.yaaic.Yaaic;
|
|
||||||
import org.yaaic.adapter.ServerListAdapter;
|
|
||||||
import org.yaaic.db.Database;
|
|
||||||
import org.yaaic.irc.IRCBinder;
|
|
||||||
import org.yaaic.irc.IRCService;
|
|
||||||
import org.yaaic.listener.ServerListener;
|
|
||||||
import org.yaaic.model.Broadcast;
|
|
||||||
import org.yaaic.model.Extra;
|
|
||||||
import org.yaaic.model.Server;
|
|
||||||
import org.yaaic.model.Status;
|
|
||||||
import org.yaaic.receiver.ServerReceiver;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.ServiceConnection;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.IBinder;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuInflater;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.AdapterView;
|
|
||||||
import android.widget.AdapterView.OnItemClickListener;
|
|
||||||
import android.widget.AdapterView.OnItemLongClickListener;
|
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of servers
|
|
||||||
*
|
|
||||||
* @author Sebastian Kaspari <sebastian@yaaic.org>
|
|
||||||
*/
|
|
||||||
public class ServersActivity extends Activity implements ServiceConnection, ServerListener, OnItemClickListener, OnItemLongClickListener {
|
|
||||||
private IRCBinder binder;
|
|
||||||
private ServerReceiver receiver;
|
|
||||||
private ServerListAdapter adapter;
|
|
||||||
private ListView list;
|
|
||||||
private static int instanceCount = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On create
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState)
|
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
/*
|
|
||||||
* With activity:launchMode = standard, we get duplicated activities
|
|
||||||
* depending on the task the app was started in. In order to avoid
|
|
||||||
* stacking up of this duplicated activities we keep a count of this
|
|
||||||
* root activity and let it finish if it already exists
|
|
||||||
*
|
|
||||||
* Launching the app via the notification icon creates a new task,
|
|
||||||
* and there doesn't seem to be a way around this so this is needed
|
|
||||||
*/
|
|
||||||
if (instanceCount > 0) {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
instanceCount++;
|
|
||||||
setContentView(R.layout.servers);
|
|
||||||
|
|
||||||
adapter = new ServerListAdapter();
|
|
||||||
|
|
||||||
list = (ListView) findViewById(android.R.id.list);
|
|
||||||
list.setAdapter(adapter);
|
|
||||||
list.setOnItemClickListener(this);
|
|
||||||
list.setOnItemLongClickListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On Destroy
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onDestroy()
|
|
||||||
{
|
|
||||||
super.onDestroy();
|
|
||||||
instanceCount--;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On resume
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onResume()
|
|
||||||
{
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
// Start and connect to service
|
|
||||||
Intent intent = new Intent(this, IRCService.class);
|
|
||||||
intent.setAction(IRCService.ACTION_BACKGROUND);
|
|
||||||
startService(intent);
|
|
||||||
bindService(intent, this, 0);
|
|
||||||
|
|
||||||
receiver = new ServerReceiver(this);
|
|
||||||
registerReceiver(receiver, new IntentFilter(Broadcast.SERVER_UPDATE));
|
|
||||||
|
|
||||||
adapter.loadServers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On pause
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onPause()
|
|
||||||
{
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
if (binder != null && binder.getService() != null) {
|
|
||||||
binder.getService().checkServiceStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
unbindService(this);
|
|
||||||
unregisterReceiver(receiver);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Service connected to Activity
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onServiceConnected(ComponentName name, IBinder service)
|
|
||||||
{
|
|
||||||
binder = (IRCBinder) service;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Service disconnected from Activity
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onServiceDisconnected(ComponentName name)
|
|
||||||
{
|
|
||||||
binder = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On server selected
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
|
||||||
Server server = adapter.getItem(position);
|
|
||||||
|
|
||||||
if (server == null) {
|
|
||||||
// "Add server" was selected
|
|
||||||
startActivityForResult(new Intent(this, AddServerActivity.class), 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Intent intent = new Intent(this, ConversationActivity.class);
|
|
||||||
|
|
||||||
if (server.getStatus() == Status.DISCONNECTED && !server.mayReconnect()) {
|
|
||||||
server.setStatus(Status.PRE_CONNECTING);
|
|
||||||
intent.putExtra("connect", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
intent.putExtra("serverId", server.getId());
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On long click
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean onItemLongClick(AdapterView<?> l, View v, int position, long id)
|
|
||||||
{
|
|
||||||
final Server server = adapter.getItem(position);
|
|
||||||
|
|
||||||
if (server == null) {
|
|
||||||
// "Add server" view selected
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
final CharSequence[] items = {
|
|
||||||
getString(R.string.connect),
|
|
||||||
getString(R.string.disconnect),
|
|
||||||
getString(R.string.edit),
|
|
||||||
getString(R.string.delete)
|
|
||||||
};
|
|
||||||
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
|
||||||
builder.setTitle(server.getTitle());
|
|
||||||
builder.setItems(items, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int item) {
|
|
||||||
switch (item) {
|
|
||||||
case 0: // Connect
|
|
||||||
if (server.getStatus() == Status.DISCONNECTED) {
|
|
||||||
binder.connect(server);
|
|
||||||
server.setStatus(Status.CONNECTING);
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1: // Disconnect
|
|
||||||
server.clearConversations();
|
|
||||||
server.setStatus(Status.DISCONNECTED);
|
|
||||||
server.setMayReconnect(false);
|
|
||||||
binder.getService().getConnection(server.getId()).quitServer();
|
|
||||||
break;
|
|
||||||
case 2: // Edit
|
|
||||||
editServer(server.getId());
|
|
||||||
break;
|
|
||||||
case 3: // Delete
|
|
||||||
binder.getService().getConnection(server.getId()).quitServer();
|
|
||||||
deleteServer(server.getId());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
AlertDialog alert = builder.create();
|
|
||||||
alert.show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start activity to edit server with given id
|
|
||||||
*
|
|
||||||
* @param serverId The id of the server
|
|
||||||
*/
|
|
||||||
private void editServer(int serverId)
|
|
||||||
{
|
|
||||||
Server server = Yaaic.getInstance().getServerById(serverId);
|
|
||||||
|
|
||||||
if (server.getStatus() != Status.DISCONNECTED) {
|
|
||||||
Toast.makeText(this, getResources().getString(R.string.disconnect_before_editing), Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Intent intent = new Intent(this, AddServerActivity.class);
|
|
||||||
intent.putExtra(Extra.SERVER, serverId);
|
|
||||||
startActivityForResult(intent, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Options Menu (Menu Button pressed)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu)
|
|
||||||
{
|
|
||||||
super.onCreateOptionsMenu(menu);
|
|
||||||
|
|
||||||
// inflate from xml
|
|
||||||
MenuInflater inflater = new MenuInflater(this);
|
|
||||||
inflater.inflate(R.menu.servers, menu);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On menu item selected
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean onMenuItemSelected(int featureId, MenuItem item)
|
|
||||||
{
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case R.id.add:
|
|
||||||
startActivityForResult(new Intent(this, AddServerActivity.class), 0);
|
|
||||||
break;
|
|
||||||
case R.id.about:
|
|
||||||
startActivity(new Intent(this, AboutActivity.class));
|
|
||||||
break;
|
|
||||||
case R.id.settings:
|
|
||||||
startActivity(new Intent(this, SettingsActivity.class));
|
|
||||||
break;
|
|
||||||
case R.id.disconnect_all:
|
|
||||||
ArrayList<Server> mServers = Yaaic.getInstance().getServersAsArrayList();
|
|
||||||
for (Server server : mServers) {
|
|
||||||
if (binder.getService().hasConnection(server.getId())) {
|
|
||||||
server.setStatus(Status.DISCONNECTED);
|
|
||||||
server.setMayReconnect(false);
|
|
||||||
binder.getService().getConnection(server.getId()).quitServer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ugly
|
|
||||||
binder.getService().stopForegroundCompat(R.string.app_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On activity result
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data)
|
|
||||||
{
|
|
||||||
if (resultCode == RESULT_OK) {
|
|
||||||
// Refresh list from database
|
|
||||||
adapter.loadServers();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete server
|
|
||||||
*
|
|
||||||
* @param serverId
|
|
||||||
*/
|
|
||||||
public void deleteServer(int serverId)
|
|
||||||
{
|
|
||||||
Database db = new Database(this);
|
|
||||||
db.removeServerById(serverId);
|
|
||||||
db.close();
|
|
||||||
|
|
||||||
Yaaic.getInstance().removeServerById(serverId);
|
|
||||||
adapter.loadServers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On server status update
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onStatusUpdate()
|
|
||||||
{
|
|
||||||
adapter.loadServers();
|
|
||||||
|
|
||||||
if (adapter.getCount() > 2) {
|
|
||||||
// Hide background if there are servers in the list
|
|
||||||
list.setBackgroundDrawable(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,153 +0,0 @@
|
|||||||
/*
|
|
||||||
Yaaic - Yet Another Android IRC Client
|
|
||||||
|
|
||||||
Copyright 2009-2013 Sebastian Kaspari
|
|
||||||
|
|
||||||
This file is part of Yaaic.
|
|
||||||
|
|
||||||
Yaaic is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Yaaic is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.yaaic.adapter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.yaaic.R;
|
|
||||||
import org.yaaic.Yaaic;
|
|
||||||
import org.yaaic.model.Server;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.BaseAdapter;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adapter for server lists
|
|
||||||
*
|
|
||||||
* @author Sebastian Kaspari <sebastian@yaaic.org>
|
|
||||||
*/
|
|
||||||
public class ServerListAdapter extends BaseAdapter
|
|
||||||
{
|
|
||||||
private static final int COLOR_CONNECTED = 0xFFbcbcbc;
|
|
||||||
private static final int COLOR_DISCONNECTED = 0xFF585858;
|
|
||||||
|
|
||||||
private ArrayList<Server> servers;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new adapter for server lists
|
|
||||||
*/
|
|
||||||
public ServerListAdapter()
|
|
||||||
{
|
|
||||||
loadServers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load servers from database
|
|
||||||
*
|
|
||||||
* Delegate call to yaaic instance
|
|
||||||
*/
|
|
||||||
public void loadServers()
|
|
||||||
{
|
|
||||||
servers = Yaaic.getInstance().getServersAsArrayList();
|
|
||||||
notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get number of items
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int getCount()
|
|
||||||
{
|
|
||||||
int size = servers.size();
|
|
||||||
|
|
||||||
// Display "Add server" item
|
|
||||||
if (size == 0) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get item at position
|
|
||||||
*
|
|
||||||
* @param position
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Server getItem(int position)
|
|
||||||
{
|
|
||||||
if (servers.size() == 0) {
|
|
||||||
return null; // No server object for the "add server" view
|
|
||||||
}
|
|
||||||
|
|
||||||
return servers.get(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get id of item at position
|
|
||||||
*
|
|
||||||
* @param position
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public long getItemId(int position)
|
|
||||||
{
|
|
||||||
if (servers.size() == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return getItem(position).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get view for item at given position
|
|
||||||
*
|
|
||||||
* @param position
|
|
||||||
* @param convertView
|
|
||||||
* @param parent
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent)
|
|
||||||
{
|
|
||||||
Server server = getItem(position);
|
|
||||||
|
|
||||||
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
|
|
||||||
if (server == null) {
|
|
||||||
// Return "Add server" view
|
|
||||||
return inflater.inflate(R.layout.addserveritem, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
View v = inflater.inflate(R.layout.serveritem, null);
|
|
||||||
|
|
||||||
TextView titleView = (TextView) v.findViewById(R.id.title);
|
|
||||||
titleView.setText(server.getTitle());
|
|
||||||
|
|
||||||
TextView hostView = (TextView) v.findViewById(R.id.host);
|
|
||||||
hostView.setText(server.getIdentity().getNickname() + " @ " + server.getHost() + " : " + server.getPort());
|
|
||||||
|
|
||||||
if (server.isConnected()) {
|
|
||||||
titleView.setTextColor(COLOR_CONNECTED);
|
|
||||||
hostView.setTextColor(COLOR_CONNECTED);
|
|
||||||
} else {
|
|
||||||
titleView.setTextColor(COLOR_DISCONNECTED);
|
|
||||||
hostView.setTextColor(COLOR_DISCONNECTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
((ImageView) v.findViewById(R.id.status)).setImageResource(server.getStatusIcon());
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
}
|
|
128
app/src/main/java/org/yaaic/adapter/ServersAdapter.java
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2013 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.adapter;
|
||||||
|
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.yaaic.R;
|
||||||
|
import org.yaaic.Yaaic;
|
||||||
|
import org.yaaic.menu.ServerPopupMenu;
|
||||||
|
import org.yaaic.model.Server;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RecyclerView adapter for server cards.
|
||||||
|
*/
|
||||||
|
public class ServersAdapter extends RecyclerView.Adapter<ServersAdapter.ViewHolder> {
|
||||||
|
public interface ClickListener {
|
||||||
|
void onServerSelected(Server server);
|
||||||
|
void onConnectToServer(Server server);
|
||||||
|
void onDisconnectFromServer(Server server);
|
||||||
|
void onEditServer(Server server);
|
||||||
|
void onDeleteServer(Server server);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
public final TextView titleView;
|
||||||
|
public final TextView hostView;
|
||||||
|
public final View connectionView;
|
||||||
|
public final View menuView;
|
||||||
|
public final ServerPopupMenu popupMenu;
|
||||||
|
|
||||||
|
public ViewHolder(View view, ClickListener listener) {
|
||||||
|
super(view);
|
||||||
|
|
||||||
|
titleView = (TextView) view.findViewById(R.id.title);
|
||||||
|
hostView = (TextView) view.findViewById(R.id.host);
|
||||||
|
connectionView = view.findViewById(R.id.connection);
|
||||||
|
menuView = view.findViewById(R.id.menu);
|
||||||
|
|
||||||
|
popupMenu = new ServerPopupMenu(
|
||||||
|
view.getContext(), view.findViewById(R.id.menu),
|
||||||
|
listener
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Server> servers;
|
||||||
|
private ClickListener listener;
|
||||||
|
|
||||||
|
public ServersAdapter(ClickListener listener) {
|
||||||
|
this.listener = listener;
|
||||||
|
|
||||||
|
loadServers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
View view = LayoutInflater.
|
||||||
|
from(parent.getContext()).
|
||||||
|
inflate(R.layout.item_server, parent, false);
|
||||||
|
|
||||||
|
return new ViewHolder(view, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
|
final Server server = servers.get(position);
|
||||||
|
|
||||||
|
int colorResource = server.isConnected() ? R.color.connected : R.color.disconnected;
|
||||||
|
int color = holder.itemView.getContext().getResources().getColor(colorResource);
|
||||||
|
|
||||||
|
holder.titleView.setText(server.getTitle());
|
||||||
|
holder.titleView.setTextColor(color);
|
||||||
|
holder.connectionView.setBackgroundColor(color);
|
||||||
|
holder.hostView.setText(String.format("%s @ %s : %d",
|
||||||
|
server.getIdentity().getNickname(),
|
||||||
|
server.getHost(),
|
||||||
|
server.getPort()
|
||||||
|
));
|
||||||
|
|
||||||
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
listener.onServerSelected(server);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
holder.popupMenu.updateServer(server);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load servers from database
|
||||||
|
*
|
||||||
|
* Delegate call to yaaic instance
|
||||||
|
*/
|
||||||
|
public void loadServers() {
|
||||||
|
servers = Yaaic.getInstance().getServersAsArrayList();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return servers.size();
|
||||||
|
}
|
||||||
|
}
|
183
app/src/main/java/org/yaaic/fragment/OverviewFragment.java
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2015 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.fragment;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.yaaic.R;
|
||||||
|
import org.yaaic.Yaaic;
|
||||||
|
import org.yaaic.activity.AddServerActivity;
|
||||||
|
import org.yaaic.adapter.ServersAdapter;
|
||||||
|
import org.yaaic.db.Database;
|
||||||
|
import org.yaaic.irc.IRCBinder;
|
||||||
|
import org.yaaic.irc.IRCService;
|
||||||
|
import org.yaaic.listener.ServerListener;
|
||||||
|
import org.yaaic.model.Broadcast;
|
||||||
|
import org.yaaic.model.Extra;
|
||||||
|
import org.yaaic.model.Server;
|
||||||
|
import org.yaaic.model.Status;
|
||||||
|
import org.yaaic.receiver.ServerReceiver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fragment showing a list of configured servers.
|
||||||
|
*/
|
||||||
|
public class OverviewFragment extends Fragment implements ServerListener, ServersAdapter.ClickListener, View.OnClickListener {
|
||||||
|
/**
|
||||||
|
* Callback interface to be implemented by Activities using this fragment.
|
||||||
|
*/
|
||||||
|
public interface Callback {
|
||||||
|
void onServerSelected(Server server);
|
||||||
|
IRCBinder getBinder();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServersAdapter adapter;
|
||||||
|
private Callback callback;
|
||||||
|
private BroadcastReceiver receiver;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
|
||||||
|
if (!(activity instanceof Callback)) {
|
||||||
|
throw new IllegalArgumentException("Activity has to implement Callback interface");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.callback = (Callback) activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
View view = inflater.inflate(R.layout.fragment_servers, container, false);
|
||||||
|
|
||||||
|
adapter = new ServersAdapter(this);
|
||||||
|
|
||||||
|
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
|
||||||
|
recyclerView.setAdapter(adapter);
|
||||||
|
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
|
||||||
|
|
||||||
|
ImageButton button = (ImageButton) view.findViewById(R.id.fab);
|
||||||
|
button.setOnClickListener(this);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
receiver = new ServerReceiver(this);
|
||||||
|
getActivity().registerReceiver(receiver, new IntentFilter(Broadcast.SERVER_UPDATE));
|
||||||
|
|
||||||
|
adapter.loadServers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
|
||||||
|
getActivity().unregisterReceiver(receiver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
final Context context = view.getContext();
|
||||||
|
|
||||||
|
Intent intent = new Intent(context, AddServerActivity.class);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServerSelected(Server server) {
|
||||||
|
callback.onServerSelected(server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConnectToServer(Server server) {
|
||||||
|
IRCBinder binder = callback.getBinder();
|
||||||
|
|
||||||
|
if (binder != null && server.getStatus() == Status.DISCONNECTED) {
|
||||||
|
binder.connect(server);
|
||||||
|
server.setStatus(Status.CONNECTING);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisconnectFromServer(Server server) {
|
||||||
|
IRCBinder binder = callback.getBinder();
|
||||||
|
|
||||||
|
if (binder != null) {
|
||||||
|
server.clearConversations();
|
||||||
|
server.setStatus(Status.DISCONNECTED);
|
||||||
|
server.setMayReconnect(false);
|
||||||
|
binder.getService().getConnection(server.getId()).quitServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEditServer(Server server) {
|
||||||
|
if (server.getStatus() != Status.DISCONNECTED) {
|
||||||
|
Toast.makeText(getActivity(), getResources().getString(R.string.disconnect_before_editing), Toast.LENGTH_SHORT).show();
|
||||||
|
} else {
|
||||||
|
Intent intent = new Intent(getActivity(), AddServerActivity.class);
|
||||||
|
intent.putExtra(Extra.SERVER, server.getId());
|
||||||
|
startActivityForResult(intent, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDeleteServer(Server server) {
|
||||||
|
IRCBinder binder = callback.getBinder();
|
||||||
|
|
||||||
|
if (binder != null) {
|
||||||
|
binder.getService().getConnection(server.getId()).quitServer();
|
||||||
|
|
||||||
|
Database db = new Database(getActivity());
|
||||||
|
db.removeServerById(server.getId());
|
||||||
|
db.close();
|
||||||
|
|
||||||
|
Yaaic.getInstance().removeServerById(server.getId());
|
||||||
|
adapter.loadServers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusUpdate() {
|
||||||
|
adapter.loadServers();
|
||||||
|
}
|
||||||
|
}
|
79
app/src/main/java/org/yaaic/menu/ServerPopupMenu.java
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2013 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.menu;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.PopupMenu;
|
||||||
|
|
||||||
|
import org.yaaic.R;
|
||||||
|
import org.yaaic.adapter.ServersAdapter;
|
||||||
|
import org.yaaic.model.Server;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Popup menu for the server cards.
|
||||||
|
*/
|
||||||
|
public class ServerPopupMenu extends PopupMenu implements PopupMenu.OnMenuItemClickListener, View.OnClickListener {
|
||||||
|
private Server server;
|
||||||
|
private ServersAdapter.ClickListener listener;
|
||||||
|
|
||||||
|
public ServerPopupMenu(Context context, View anchor, ServersAdapter.ClickListener listener) {
|
||||||
|
super(context, anchor);
|
||||||
|
|
||||||
|
this.listener = listener;
|
||||||
|
|
||||||
|
getMenuInflater().inflate(R.menu.context_server, getMenu());
|
||||||
|
setOnMenuItemClickListener(this);
|
||||||
|
|
||||||
|
anchor.setOnClickListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateServer(Server server) {
|
||||||
|
this.server = server;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
int id = item.getItemId();
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case R.id.edit:
|
||||||
|
listener.onEditServer(server);
|
||||||
|
break;
|
||||||
|
case R.id.delete:
|
||||||
|
listener.onDeleteServer(server);
|
||||||
|
break;
|
||||||
|
case R.id.connect:
|
||||||
|
listener.onConnectToServer(server);
|
||||||
|
break;
|
||||||
|
case R.id.disconnect:
|
||||||
|
listener.onDisconnectFromServer(server);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onClick(View v) {
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
}
|
@ -41,4 +41,7 @@ public class Extra
|
|||||||
public static final String NICKSERV_PASSWORD = "nickserv_password";
|
public static final String NICKSERV_PASSWORD = "nickserv_password";
|
||||||
public static final String SASL_USER = "sasl_user";
|
public static final String SASL_USER = "sasl_user";
|
||||||
public static final String SASL_PASSWORD = "sasl_password";
|
public static final String SASL_PASSWORD = "sasl_password";
|
||||||
|
|
||||||
|
public static final String CONNECT = "connect";
|
||||||
|
public static final String SERVER_ID = "serverId";
|
||||||
}
|
}
|
||||||
|
@ -409,26 +409,6 @@ public class Server
|
|||||||
return channels;
|
return channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get icon for current server status
|
|
||||||
*
|
|
||||||
* @return int Status icon ressource
|
|
||||||
*/
|
|
||||||
public int getStatusIcon()
|
|
||||||
{
|
|
||||||
switch (status) {
|
|
||||||
case Status.CONNECTED:
|
|
||||||
return R.drawable.connected;
|
|
||||||
case Status.DISCONNECTED:
|
|
||||||
return R.drawable.disconnected;
|
|
||||||
case Status.PRE_CONNECTING:
|
|
||||||
case Status.CONNECTING:
|
|
||||||
return R.drawable.connecting;
|
|
||||||
}
|
|
||||||
|
|
||||||
return R.drawable.connecting;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get whether a ConversationActivity for this server is currently in the foreground.
|
* Get whether a ConversationActivity for this server is currently in the foreground.
|
||||||
*/
|
*/
|
||||||
|
BIN
app/src/main/res/drawable-hdpi/ic_action_menu.png
Executable file
After Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 454 B |
Before Width: | Height: | Size: 498 B |
Before Width: | Height: | Size: 440 B |
BIN
app/src/main/res/drawable-mdpi/ic_action_menu.png
Executable file
After Width: | Height: | Size: 176 B |
BIN
app/src/main/res/drawable-xhdpi/ic_action_menu.png
Executable file
After Width: | Height: | Size: 394 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_action_menu.png
Executable file
After Width: | Height: | Size: 715 B |
10
app/src/main/res/layout/activity_main.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/container">
|
||||||
|
<fragment
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:name="org.yaaic.fragment.OverviewFragment" />
|
||||||
|
</FrameLayout>
|
@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
Yaaic - Yet Another Android IRC Client
|
|
||||||
|
|
||||||
Copyright 2009-2013 Sebastian Kaspari
|
|
||||||
|
|
||||||
This file is part of Yaaic.
|
|
||||||
|
|
||||||
Yaaic is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Yaaic is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
-->
|
|
||||||
<TextView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:padding="10dip"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:text="@string/add_server_list"
|
|
||||||
android:textSize="18sp" />
|
|
40
app/src/main/res/layout/fragment_servers.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!--
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2013 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/recyclerView"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_margin="4dp" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/fab"
|
||||||
|
style="@style/FloatingActionButton"
|
||||||
|
android:src="@drawable/plus"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
|
android:contentDescription="@string/add_server_label" />
|
||||||
|
</RelativeLayout>
|
70
app/src/main/res/layout/item_server.xml
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!--
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2013 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<android.support.v7.widget.CardView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_margin="4dp"
|
||||||
|
card_view:cardBackgroundColor="@color/cardview_background">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="8dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/connection"
|
||||||
|
android:layout_width="16dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginRight="4dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:paddingLeft="4dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Server"
|
||||||
|
android:textAppearance="@android:style/TextAppearance.Material.Title" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/host"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="irc.example.com"
|
||||||
|
android:textAppearance="@android:style/TextAppearance.Material.Body1" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/menu"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/ic_action_menu" />
|
||||||
|
</LinearLayout>
|
||||||
|
</android.support.v7.widget.CardView>
|
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
Yaaic - Yet Another Android IRC Client
|
|
||||||
|
|
||||||
Copyright 2009-2013 Sebastian Kaspari
|
|
||||||
|
|
||||||
This file is part of Yaaic.
|
|
||||||
|
|
||||||
Yaaic is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Yaaic is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
-->
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="5dp">
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/status"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@drawable/disconnected"
|
|
||||||
android:layout_gravity="center_vertical" />
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:paddingLeft="5dp">
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/title"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Server"
|
|
||||||
android:textSize="18sp" />
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/host"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="irc.example.com"
|
|
||||||
android:textSize="12sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
@ -19,7 +19,7 @@ GNU General Public License for more details.
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
-->
|
-->
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent">
|
android:layout_height="fill_parent">
|
||||||
@ -27,4 +27,4 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
android:id="@android:id/list"
|
android:id="@android:id/list"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent" />
|
android:layout_height="fill_parent" />
|
||||||
</LinearLayout>
|
</FrameLayout>
|
||||||
|
15
app/src/main/res/menu/context_server.xml
Normal file
@ -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/connect"
|
||||||
|
android:title="@string/connect" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/disconnect"
|
||||||
|
android:title="@string/disconnect" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/edit"
|
||||||
|
android:title="@string/edit" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/delete"
|
||||||
|
android:title="@string/delete" />
|
||||||
|
</menu>
|
@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
Yaaic - Yet Another Android IRC Client
|
|
||||||
|
|
||||||
Copyright 2009-2013 Sebastian Kaspari
|
|
||||||
|
|
||||||
This file is part of Yaaic.
|
|
||||||
|
|
||||||
Yaaic is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Yaaic is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
-->
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item
|
|
||||||
android:id="@+id/add"
|
|
||||||
android:title="@string/add_server_menu" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/settings"
|
|
||||||
android:title="@string/settings_menu" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/disconnect_all"
|
|
||||||
android:title="@string/disconnect_menu" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/about"
|
|
||||||
android:title="@string/about_menu" />
|
|
||||||
</menu>
|
|
@ -9,4 +9,8 @@
|
|||||||
<color name="divider">#B6B6B6</color>
|
<color name="divider">#B6B6B6</color>
|
||||||
<color name="highlight">#FFC107</color>
|
<color name="highlight">#FFC107</color>
|
||||||
<color name="window_background">#EEEEEE</color>
|
<color name="window_background">#EEEEEE</color>
|
||||||
|
|
||||||
|
<color name="cardview_background">#FFFFFF</color>
|
||||||
|
<color name="connected">#4CAF50</color>
|
||||||
|
<color name="disconnected">#F44336</color>
|
||||||
</resources>
|
</resources>
|