diff --git a/app/build.gradle b/app/build.gradle index 6db8021a5574b9f1a51a454ce50c0ec666fb1584..7075e8a67857ee9cc1840553ef067159741f2bda 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ if (versionPropsFile.exists() && versionPropsFile.canRead()) { versionProps.load(new FileInputStream(versionPropsFile)) def runTasks = gradle.startParameter.taskNames versionBuild = Integer.valueOf(versionProps['VERSION_BUILD'].toString()) - if (!(runTasks.intersect([':app:assembleBeta', 'assembleBeta', ':app:assembleRelease', 'assembleRelease']).empty)) { + if (':app:assembleBeta' in runTasks || 'assembleBeta' in runTasks || ':app:assembleRelease' in runTasks || 'assembleRelease' in runTasks || ':app:assemblebeta' in runTasks || 'assemblebeta' in runTasks || ':app:assemblerelease' in runTasks || 'assemblerelease' in runTasks) { println "Increasing version number" versionBuild = versionBuild + 1 } diff --git a/app/src/main/java/de/kuschku/libquassel/BusProvider.java b/app/src/main/java/de/kuschku/libquassel/BusProvider.java index 46119430fccb6aba4bf8238844b84627b67098dd..7f3eeb4a0626926ab827c8e37a913983e5c0c196 100644 --- a/app/src/main/java/de/kuschku/libquassel/BusProvider.java +++ b/app/src/main/java/de/kuschku/libquassel/BusProvider.java @@ -32,7 +32,6 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.UUID; import de.kuschku.libquassel.events.BacklogReceivedEvent; -import de.kuschku.libquassel.events.GeneralErrorEvent; import de.kuschku.libquassel.events.LagChangedEvent; public class BusProvider { diff --git a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java index b86050154b18538cdc391f643d81136bb9dbabc8..8b8abd9d6b9bfc10f283c8491b8712410d8c9b8c 100644 --- a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java +++ b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java @@ -29,8 +29,6 @@ import org.greenrobot.eventbus.ThreadMode; import org.joda.time.DateTime; import org.joda.time.Interval; -import java.util.logging.Logger; - import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.events.CoreSetupRequiredEvent; diff --git a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java index 35c1a9be11a94a45003aff8ba40aca52b53fe5ed..f58fc882ccf240e011d3a4a1652b0b1fba91dee9 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java @@ -40,7 +40,6 @@ import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer; import de.kuschku.libquassel.localtypes.buffers.QueryBuffer; import de.kuschku.libquassel.localtypes.buffers.StatusBuffer; import de.kuschku.libquassel.primitives.types.BufferInfo; -import de.kuschku.libquassel.syncables.types.impl.BufferViewConfig; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; diff --git a/app/src/main/java/de/kuschku/libquassel/client/Client.java b/app/src/main/java/de/kuschku/libquassel/client/Client.java index 4c7fa00c513ddd92bbbd0f6315346df380482450..d67818b8d6d58fd4c1c02a5aea2d6e465151bf67 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/Client.java +++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java @@ -48,14 +48,9 @@ import de.kuschku.libquassel.objects.types.SessionState; import de.kuschku.libquassel.primitives.QMetaTypeRegistry; import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.syncables.types.SyncableObject; -import de.kuschku.libquassel.syncables.types.impl.AliasManager; import de.kuschku.libquassel.syncables.types.impl.BacklogManager; -import de.kuschku.libquassel.syncables.types.impl.BufferSyncer; -import de.kuschku.libquassel.syncables.types.impl.BufferViewManager; import de.kuschku.libquassel.syncables.types.impl.CoreInfo; import de.kuschku.libquassel.syncables.types.impl.Identity; -import de.kuschku.libquassel.syncables.types.impl.IgnoreListManager; -import de.kuschku.libquassel.syncables.types.impl.NetworkConfig; import de.kuschku.libquassel.syncables.types.interfaces.QAliasManager; import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager; import de.kuschku.libquassel.syncables.types.interfaces.QBufferSyncer; diff --git a/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java index 9a1fe8ef6102943c8eae514bd14e8ffd5ae3cf2b..ca33f53b937ecb00cb64f6200a02e299b41aa605 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java @@ -30,10 +30,27 @@ import java.util.List; import java.util.Map; import de.kuschku.libquassel.syncables.types.interfaces.QIdentity; +import de.kuschku.util.observables.lists.ObservableSortedList; public class IdentityManager { @NonNull private final Map<Integer, QIdentity> identities = new HashMap<>(); + private final ObservableSortedList<QIdentity> identityList = new ObservableSortedList<>(QIdentity.class, new ObservableSortedList.ItemComparator<QIdentity>() { + @Override + public int compare(QIdentity o1, QIdentity o2) { + return o1.id() - o2.id(); + } + + @Override + public boolean areContentsTheSame(QIdentity oldItem, QIdentity newItem) { + return oldItem.equals(newItem); + } + + @Override + public boolean areItemsTheSame(QIdentity item1, QIdentity item2) { + return item1.id() == item2.id(); + } + }); private final Client client; public IdentityManager(Client client) { @@ -42,6 +59,7 @@ public class IdentityManager { public void createIdentity(@NonNull QIdentity identity) { identities.put(identity.id(), identity); + identityList.add(identity); } public void removeIdentity(@IntRange(from = 0) int id) { @@ -58,4 +76,8 @@ public class IdentityManager { createIdentity(identity); } } + + public ObservableSortedList<QIdentity> identities() { + return identityList; + } } diff --git a/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java index 2d4b90f4b02f83975130b99addbf4d994a9b006c..84351a543ae69fb4a2feec62cb2bb13e0714620a 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java @@ -24,26 +24,39 @@ package de.kuschku.libquassel.client; import android.support.annotation.IntRange; import android.support.annotation.NonNull; -import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Observable; import de.kuschku.libquassel.syncables.types.impl.Network; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; -import de.kuschku.util.observables.lists.ObservableSet; import de.kuschku.util.observables.lists.ObservableSortedList; +import static de.kuschku.util.AndroidAssert.assertNotNull; + public class NetworkManager extends Observable { @NonNull private final Map<Integer, QNetwork> networks = new HashMap<>(); @NonNull - private final ObservableSortedList<QNetwork> list = new ObservableSortedList<>(QNetwork.class, new ObservableSortedList.ItemComparator<QNetwork>() { + private final ObservableSortedList<QNetwork> list = new ObservableSortedList<QNetwork>(QNetwork.class, new ObservableSortedList.ItemComparator<QNetwork>() { @Override public int compare(QNetwork o1, QNetwork o2) { - return o1 == null && o2 == null ? 0 : o1 == null ? 1 : o2 == null ? -1 : o1.networkName().compareTo(o2.networkName()); + assertNotNull(o1); + assertNotNull(o2); + + String name1 = o1.networkName(); + String name2 = o2.networkName(); + + if (name1 == null && name2 == null) { + return 0; + } else if (name1 == null) { + return 1; + } else if (name2 == null) { + return -1; + } else { + return name1.compareTo(name2); + } } @Override @@ -55,7 +68,21 @@ public class NetworkManager extends Observable { public boolean areItemsTheSame(QNetwork item1, QNetwork item2) { return item1.networkId() == item2.networkId(); } - }); + }) { + @Override + public boolean add(QNetwork object) { + if (object == null) + throw new Error(); + return super.add(object); + } + + @Override + public void add(int location, QNetwork object) { + if (object == null) + throw new Error(); + super.add(location, object); + } + }; @NonNull private final Client client; @@ -69,7 +96,7 @@ public class NetworkManager extends Observable { public void createNetwork(@NonNull QNetwork network) { QNetwork qNetwork = networks.get(network.networkId()); - if (list.contains(qNetwork)) + if (qNetwork != null && list.contains(qNetwork)) list.remove(qNetwork); networks.put(network.networkId(), network); list.add(network); @@ -80,7 +107,9 @@ public class NetworkManager extends Observable { } public void removeNetwork(@IntRange(from = 0) int network) { - list.remove(networks.get(network)); + QNetwork qNetwork = networks.get(network); + if (qNetwork != null) + list.remove(qNetwork); networks.remove(network); } diff --git a/app/src/main/java/de/kuschku/libquassel/message/Message.java b/app/src/main/java/de/kuschku/libquassel/message/Message.java index 0fffb912a8d772673bfc2c512483171c4a6df40c..99bd029dc78ab3e6b9c256273d053996e80b01f7 100644 --- a/app/src/main/java/de/kuschku/libquassel/message/Message.java +++ b/app/src/main/java/de/kuschku/libquassel/message/Message.java @@ -23,7 +23,6 @@ package de.kuschku.libquassel.message; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.util.Log; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; @@ -67,12 +66,6 @@ public class Message extends BaseModel implements ContentComparable<Message> { public LocalDate date; - public LocalDate getLocalDate() { - if (date == null) - date = time.toLocalDate(); - return date; - } - public static Message create(int id, DateTime time, Type type, Flags flags, BufferInfo bufferInfo, String sender, String content) { Message message = new Message(); message.id = id; @@ -85,6 +78,12 @@ public class Message extends BaseModel implements ContentComparable<Message> { return message; } + public LocalDate getLocalDate() { + if (date == null) + date = time.toLocalDate(); + return date; + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java index f08d8826af2ac3f79dbf795ba989b5a5fe456c1d..15936211f49bc49d0105cab898fd76e9b0a20c16 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java @@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.ClientLogin; import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class ClientLoginSerializer implements ObjectSerializer<ClientLogin> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java index f268b17abe5d5e320691a1447dc2efe8f3635fc5..73cb431fc2877612a901d4626ebd05d9ba792faf 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java @@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.CoreSetupData; import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class CoreSetupDataSerializer implements ObjectSerializer<CoreSetupData> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java index adb24bf870c81367540feeb9f1518f661c46a79f..ebef8b2e3a3451cc71757334e9ffac6a77592385 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java @@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.CoreSetupReject; import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class CoreSetupRejectSerializer implements ObjectSerializer<CoreSetupReject> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java index 0b0d94e7f78531e79a92aa13c8bd8e69a8e1ca22..3aca99af8340be584b5fc33d955377b09ffa54a1 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java @@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.NetworkServer; import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class NetworkServerSerializer implements ObjectSerializer<NetworkServer> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java index a86ae2d90e1d1e3d9bb0f6300985673ea317d034..eac46bd79c74fef97223e298b25063a1dfb7a7cd 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java @@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.SetupData; import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class SetupDataInitializer implements ObjectSerializer<SetupData> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java index 9150c045a32ae029189809c927a2f324d9f135fa..1d1e8549edb7d4be5747293ff108de001f69411a 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java @@ -34,8 +34,6 @@ import de.kuschku.libquassel.objects.types.StorageBackend; import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class StorageBackendSerializer implements ObjectSerializer<StorageBackend> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java index 135708e5183a203281fea3cb682feb098fae441b..b57b2be7c770df3e6276ec8b41f8c3204cce66b5 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java @@ -31,8 +31,6 @@ import de.kuschku.libquassel.functions.types.SerializedFunction; import de.kuschku.libquassel.functions.types.UnpackedFunction; import de.kuschku.libquassel.primitives.types.QVariant; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class StringObjectMapSerializer<T> implements ObjectSerializer<Map<String, T>> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java b/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java index cb963987613845a859bc1ab6a4c1872a9f6f0f76..ab9807acea6bf220fa4233193bc3d806d752f3ea 100644 --- a/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java +++ b/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java @@ -76,36 +76,44 @@ public class CoreStatus { case UInt: { defaults.putInt(key, (int) value.data); types.putString(key, "int"); - } break; + } + break; case Short: case UShort: { defaults.putShort(key, (short) value.data); types.putString(key, "short"); - } break; + } + break; case Long: case ULong: { defaults.putLong(key, (long) value.data); types.putString(key, "long"); - } break; + } + break; case Bool: { defaults.putBoolean(key, (boolean) value.data); types.putString(key, "boolean"); - } break; + } + break; case Double: { bundle.putDouble(key, (double) value.data); types.putString(key, "double"); - } break; + } + break; case Float: { defaults.putDouble(key, (float) value.data); types.putString(key, "float"); - } break; + } + break; case QString: { defaults.putString(key, (String) value.data); types.putString(key, "string"); - } break; + } + break; default: { Log.w("CoreSetup", "Found configuration element with incompatible type: " + key + " : " + value.type.type); - } break; + } + break; } } else { defaults.putString(key, ""); diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java index f4bd4e4de118e0d81ed3f921fba39daa958a7ea6..57345559c68c0cf01bc11e487c937fe6d659e8e4 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java @@ -23,7 +23,6 @@ package de.kuschku.libquassel.primitives.serializers; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.util.Log; import com.google.common.base.Charsets; diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java index fa637e5ca2b24fed39c9b3ae19e5dc595965c356..018faf12f39d802ddc3fb60e4bf4da3174e31dd0 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java @@ -29,7 +29,6 @@ import java.nio.channels.ByteChannel; import java.util.Map; import de.kuschku.libquassel.objects.serializers.ObjectSerializer; -import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; import static de.kuschku.util.AndroidAssert.assertNotNull; diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java index 202e69a8b3a837a95ba256365e51c6d8b92a1556..8c0a745aaa62b1404eab11c972185cd6da9a5fd0 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java @@ -22,7 +22,6 @@ package de.kuschku.libquassel.primitives.serializers; import android.support.annotation.NonNull; -import android.util.Log; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java b/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java index f29a3421a3e76b95187058f368bbc7b9b6dd9985..85899e7e4223ec1b53571220f7e351988fe93bf4 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java @@ -28,8 +28,6 @@ import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; import com.raizlabs.android.dbflow.structure.BaseModel; -import java.util.List; - import de.kuschku.libquassel.localtypes.orm.ConnectedDatabase; @Table(database = ConnectedDatabase.class) @@ -78,7 +76,7 @@ public class BufferInfo extends BaseModel { QUERY(0x04), GROUP(0x08); - public static final int ALL = STATUS.id | CHANNEL.id| QUERY.id | GROUP.id; + public static final int ALL = STATUS.id | CHANNEL.id | QUERY.id | GROUP.id; public final short id; diff --git a/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java b/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java index 8b05a4e3331bf159063f8465f712ad2153b4a565..e34f01e179ecb19fe4eb5c263f0bdc16eb12d727 100644 --- a/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java +++ b/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java @@ -23,7 +23,6 @@ package de.kuschku.libquassel.protocols; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.util.Log; import com.google.common.base.Function; import com.google.common.collect.Lists; @@ -38,7 +37,6 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java index 2f15fa3dc8cf2e3b7d327fe61dba0f400ead0e83..fa938c6f8d208ce0aac77837f3655660964d4407 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java @@ -63,7 +63,7 @@ public class BufferViewManagerSerializer implements ObjectSerializer<QBufferView private List<Integer> getBufferViewIds(@NonNull QBufferViewManager data) { List<Integer> bufferViewIds = new ArrayList<>(data.bufferViewConfigs().size()); for (QBufferViewConfig config : data.bufferViewConfigs()) - bufferViewIds.add(config.bufferViewId()); + bufferViewIds.add(config.bufferViewId()); return bufferViewIds; } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java index c250b9540e7b9deb8495a55d08a5467008384c88..5bae42e86f981e1418030aa1251488ce310ea9a9 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java @@ -35,7 +35,6 @@ import de.kuschku.libquassel.functions.types.UnpackedFunction; import de.kuschku.libquassel.objects.serializers.ObjectSerializer; import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.libquassel.syncables.types.impl.IgnoreListManager; -import de.kuschku.libquassel.syncables.types.interfaces.QIgnoreListManager; import static de.kuschku.util.AndroidAssert.assertNotNull; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java index d7c8c2cdbcbe4ec065e9cd4177927d61ebce80c8..d65982b04283113614f675d40bee7efeadaa91c1 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java @@ -36,8 +36,6 @@ import de.kuschku.libquassel.objects.serializers.ObjectSerializer; import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.libquassel.syncables.types.impl.IrcUser; -import static de.kuschku.util.AndroidAssert.assertNotNull; - @SuppressWarnings({"unchecked", "ConstantConditions"}) public class IrcUserSerializer implements ObjectSerializer<IrcUser> { @NonNull diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java index 0a216321e0d6dc06c4104cfd4c14a46b39e18789..144899f3277a38f156727987201e42d13265fb30 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java @@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.serializers; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.util.Log; import java.util.HashMap; import java.util.List; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java index c37fcf7ebae62246fca03321c02c52f27b835d6b..ebb98ef1d7808084263a36336c6a18c9dd005db5 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java @@ -98,7 +98,7 @@ public abstract class ABufferViewConfig extends SyncableObject<QBufferViewConfig @Override public void requestAddBuffer(int bufferId, int pos) { _requestAddBuffer(bufferId, pos); - sync("requestAddBuffer", new String[] { "BufferId", intName }, new Object[] { bufferId, pos }); + sync("requestAddBuffer", new String[]{"BufferId", intName}, new Object[]{bufferId, pos}); } @Override @@ -110,7 +110,7 @@ public abstract class ABufferViewConfig extends SyncableObject<QBufferViewConfig @Override public void requestMoveBuffer(int bufferId, int pos) { _requestMoveBuffer(bufferId, pos); - sync("requestMoveBuffer", new String[] { "BufferId", intName }, new Object[] { bufferId, pos }); + sync("requestMoveBuffer", new String[]{"BufferId", intName}, new Object[]{bufferId, pos}); } @Override @@ -122,18 +122,18 @@ public abstract class ABufferViewConfig extends SyncableObject<QBufferViewConfig @Override public void requestRemoveBuffer(int bufferId) { _requestRemoveBuffer(bufferId); - sync("requestRemoveBuffer", new String[] { "BufferId" }, new Object[] { bufferId }); + sync("requestRemoveBuffer", new String[]{"BufferId"}, new Object[]{bufferId}); } @Override public void removeBufferPermanently(int bufferId) { _removeBufferPermanently(bufferId); - sync("removeBufferPermanently", new String[] { "BufferId" }, new Object[] { bufferId }); + sync("removeBufferPermanently", new String[]{"BufferId"}, new Object[]{bufferId}); } @Override public void requestRemoveBufferPermanently(int bufferId) { _requestRemoveBufferPermanently(bufferId); - sync("requestRemoveBufferPermanently", new String[] { "BufferId" }, new Object[] { bufferId }); + sync("requestRemoveBufferPermanently", new String[]{"BufferId"}, new Object[]{bufferId}); } } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java index 8aaa2153713968497d85076dc79d2380ff9e9a02..0219ca64734465d80b5022ed56ad3959a793fadb 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java @@ -27,9 +27,7 @@ import java.util.Map; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.primitives.types.QVariant; -import de.kuschku.libquassel.syncables.serializers.IgnoreListManagerSerializer; import de.kuschku.libquassel.syncables.types.SyncableObject; -import de.kuschku.libquassel.syncables.types.impl.IgnoreListManager; import de.kuschku.libquassel.syncables.types.interfaces.QIgnoreListManager; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java index 67e1edfb239ac3baf51efc28c541c6d5a06f7e5b..4d8cda1086a89a624cfd5481cb1320bdeb65f581 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java @@ -22,7 +22,6 @@ package de.kuschku.libquassel.syncables.types.abstracts; import android.support.annotation.NonNull; -import android.util.Log; import java.util.List; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java index f4f788135c03a553d657c19d6f3c0d099670737f..ce232172cd7375e50c4c1a7b3fa0624b26cdfb04 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java @@ -157,6 +157,16 @@ public class IgnoreListManager extends AIgnoreListManager { return ignoreList; } + @Override + public void requestUpdate() { + requestUpdate(IgnoreListManagerSerializer.get().toVariantMap(this)); + } + + @Override + public List<? extends IgnoreListItem> ignoreList() { + return ignoreList; + } + public class IgnoreListItem { private final IgnoreType type; @NonNull @@ -173,6 +183,27 @@ public class IgnoreListManager extends AIgnoreListManager { this(IgnoreType.of(type), ignoreRule, isRegEx, StrictnessType.of(strictness), ScopeType.of(scope), scopeRule, isActive); } + public IgnoreListItem(IgnoreType type, @Nullable String ignoreRule, boolean isRegEx, StrictnessType strictness, ScopeType scope, @Nullable String scopeRule, boolean isActive) { + if (scopeRule == null) + scopeRule = ""; + if (ignoreRule == null) + ignoreRule = ""; + + this.type = type; + this.ignoreRule = new SmartRegEx(ignoreRule, Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD); + this.isRegEx = isRegEx; + this.strictness = strictness; + this.scope = scope; + this.isActive = isActive; + + String[] scopeRules = scopeRule.split(";"); + this.scopeRule = scopeRule; + this.scopeRules = new SmartRegEx[scopeRules.length]; + for (int i = 0; i < scopeRules.length; i++) { + this.scopeRules[i] = new SmartRegEx(scopeRules[i].trim(), Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD); + } + } + public IgnoreType getType() { return type; } @@ -203,27 +234,6 @@ public class IgnoreListManager extends AIgnoreListManager { return isActive; } - public IgnoreListItem(IgnoreType type, @Nullable String ignoreRule, boolean isRegEx, StrictnessType strictness, ScopeType scope, @Nullable String scopeRule, boolean isActive) { - if (scopeRule == null) - scopeRule = ""; - if (ignoreRule == null) - ignoreRule = ""; - - this.type = type; - this.ignoreRule = new SmartRegEx(ignoreRule, Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD); - this.isRegEx = isRegEx; - this.strictness = strictness; - this.scope = scope; - this.isActive = isActive; - - String[] scopeRules = scopeRule.split(";"); - this.scopeRule = scopeRule; - this.scopeRules = new SmartRegEx[scopeRules.length]; - for (int i = 0; i < scopeRules.length; i++) { - this.scopeRules[i] = new SmartRegEx(scopeRules[i].trim(), Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD); - } - } - public boolean matches(@NonNull String text) { return ignoreRule.matches(text, !isRegEx); } @@ -261,14 +271,4 @@ public class IgnoreListManager extends AIgnoreListManager { '}'; } } - - @Override - public void requestUpdate() { - requestUpdate(IgnoreListManagerSerializer.get().toVariantMap(this)); - } - - @Override - public List<? extends IgnoreListItem> ignoreList() { - return ignoreList; - } } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java index 7857caac4d4780a8f75ad2ab29e29f5c90524246..d7bea989c721c4035a269fe3c72d0d53341ee634 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java @@ -71,6 +71,7 @@ public interface QBufferViewConfig extends QSyncableObject<QBufferViewConfig> { int allowedBufferTypes(); boolean isBufferTypeAllowed(BufferInfo.Type type); + void setBufferTypeAllowed(BufferInfo.Type type, boolean allowed); @Synced diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java index 80a0d9e61360b3cd22210e5f0d797d0b879de61b..227c8efb8276eae793506d2837b7a7bd5e57cd73 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java @@ -55,5 +55,5 @@ public interface QBufferViewManager extends QSyncableObject<QBufferViewManager> void checkForNewBuffers(int bufferId); - Map<Integer,QBufferViewConfig> bufferViewConfigMap(); + Map<Integer, QBufferViewConfig> bufferViewConfigMap(); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java index 28b139dca242d98a6e0d1ea0a53cc13c15d9dac1..743c31c9bfae6b588eba60ae1ffb1e968fef7435 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java @@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.types.interfaces; import android.support.annotation.NonNull; -import java.util.Collection; import java.util.List; import java.util.Map; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java index 2bea8319140add7050e9d252d4c29b471305488c..dfe270e47c5a0db123dea5a45e00d62a0913c9dd 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java @@ -26,7 +26,6 @@ import android.database.DataSetObserver; import android.support.annotation.Nullable; import android.support.v7.view.ContextThemeWrapper; import android.support.v7.widget.ThemedSpinnerAdapter; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -69,7 +68,7 @@ public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, Gen @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(parent.getContext(), theme)); - TextView view = (TextView) inflater.inflate(R.layout.widget_md_spinner_item, parent, false); + TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false); QBufferViewConfig config = (QBufferViewConfig) getItem(position); view.setText(config == null ? "" : config.bufferViewName()); return view; @@ -115,7 +114,7 @@ public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, Gen @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - TextView view = (TextView) inflater.inflate(R.layout.widget_md_spinner_item, parent, false); + TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false); QBufferViewConfig viewConfig = (QBufferViewConfig) getItem(position); view.setText(viewConfig == null ? "" : viewConfig.bufferViewName()); return view; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java index 203ce96adb31699d140cfa149e38bdaac5257c1d..4a825e1259d7246a7fca1c06ec96d06373815ef6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java @@ -39,7 +39,6 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -76,7 +75,6 @@ import de.kuschku.libquassel.localtypes.buffers.QueryBuffer; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.objects.types.CoreSetupData; import de.kuschku.libquassel.objects.types.SetupData; -import de.kuschku.libquassel.primitives.QMetaType; import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager; import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; @@ -507,7 +505,8 @@ public class MainActivity extends BoundActivity { configData )))); } - } break; + } + break; } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java index 0f345f9e1c227adefad369f7c8b8c4f807360ad3..8a58e12f5d01b31bd75f4ad751c46b9689d8a2d1 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java @@ -274,27 +274,9 @@ public class ChatMessageRenderer { } } - private static class MessageStyleContainer { - public final - @ColorInt - int textColor; - public final int fontstyle; - public final - @ColorInt - int timeColor; - public final - @ColorInt - int bgColor; - - public MessageStyleContainer(int textColor, int fontstyle, int timeColor, int bgColor) { - this.textColor = textColor; - this.fontstyle = fontstyle; - this.timeColor = timeColor; - this.bgColor = bgColor; - } - } - - public @LayoutRes int getLayoutRes(Message.Type type) { + public + @LayoutRes + int getLayoutRes(Message.Type type) { switch (type) { default: case Plain: @@ -321,4 +303,24 @@ public class ChatMessageRenderer { return R.layout.widget_chatmessage_error; } } + + private static class MessageStyleContainer { + public final + @ColorInt + int textColor; + public final int fontstyle; + public final + @ColorInt + int timeColor; + public final + @ColorInt + int bgColor; + + public MessageStyleContainer(int textColor, int fontstyle, int timeColor, int bgColor) { + this.textColor = textColor; + this.fontstyle = fontstyle; + this.timeColor = timeColor; + this.bgColor = bgColor; + } + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java index fd767b28be937b68b42f6e118356f5e2f9977652..dd692cde0b7eb01751ac707cb18349db211a54f7 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java @@ -30,7 +30,6 @@ import android.view.LayoutInflater; import android.view.ViewGroup; import de.kuschku.libquassel.message.Message; -import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.observables.AutoScroller; import de.kuschku.util.observables.callbacks.UICallback; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java index d127c291d0714474d6ac57d51645b618ec73431e..e66a61dee82781048f1bb4feb9367d8e550c6bc5 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java @@ -44,6 +44,8 @@ import de.kuschku.util.observables.callbacks.ElementCallback; import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.lists.ObservableSortedList; +import static de.kuschku.util.AndroidAssert.assertNotNull; + public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkViewHolder, BufferViewHolder> implements OnBufferClickListener, OnBufferLongClickListener { private final AppContext context; private final ObservableSortedList<NetworkItem> items; @@ -138,7 +140,32 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi final ObservableSortedList<NetworkItem> networkItems = new ObservableSortedList<>(NetworkItem.class, new ObservableSortedList.ItemComparator<NetworkItem>() { @Override public int compare(NetworkItem o1, NetworkItem o2) { - return o1 == null && o2 == null ? 0 : o1 == null ? 1 : o2 == null ? -1 : o1.getNetwork().networkName().compareTo(o2.getNetwork().networkName()); + assertNotNull(o1); + assertNotNull(o2); + + QNetwork network1 = o1.getNetwork(); + QNetwork network2 = o2.getNetwork(); + + if (network1 == null && network2 == null) { + return 0; + } else if (network1 == null) { + return 1; + } else if (network2 == null) { + return -1; + } else { + String name1 = network1.networkName(); + String name2 = network2.networkName(); + + if (name1 == null && name2 == null) { + return 0; + } else if (name1 == null) { + return 1; + } else if (name2 == null) { + return -1; + } else { + return name1.compareTo(name2); + } + } } @Override diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java index 7a8bd37ce8b6994829b300cbd250004bcb8f04f8..6fcaf8ee0ba8677d2739086ce3efab515308d755 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java @@ -24,7 +24,6 @@ package de.kuschku.quasseldroid_ng.ui.coresettings.chatlist; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.CheckBox; @@ -127,7 +126,8 @@ public class ChatListCreateActivity extends BoundActivity { bufferViewManager.createBufferView(config); } finish(); - } return true; + } + return true; default: return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java index 0dc94a3993e6ce982e19800c7ad009872284dfdc..d7403d5fd833d043e9717b9da7e02a7bd3922a69 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java @@ -35,7 +35,9 @@ import butterknife.Bind; import butterknife.ButterKnife; import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; +import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.R; +import de.kuschku.quasseldroid_ng.ui.coresettings.network.NetworkSpinnerAdapter; import de.kuschku.util.backports.Objects; import de.kuschku.util.servicebound.BoundActivity; @@ -73,6 +75,7 @@ public class ChatListEditActivity extends BoundActivity { int id; private QBufferViewConfig config; + private NetworkSpinnerAdapter networkSpinnerAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -89,6 +92,9 @@ public class ChatListEditActivity extends BoundActivity { setContentView(R.layout.activity_chatlist_edit); ButterKnife.bind(this); + networkSpinnerAdapter = new NetworkSpinnerAdapter(this); + network.setAdapter(networkSpinnerAdapter); + setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @@ -108,6 +114,9 @@ public class ChatListEditActivity extends BoundActivity { if (!Objects.equals(name, config.bufferViewName())) config.setBufferViewName(name); + if (config.networkId() != (int) network.getSelectedItemId()) + config.setNetworkId((int) network.getSelectedItemId()); + int allowedBufferTypes = config.allowedBufferTypes(); config.setBufferTypeAllowed(BufferInfo.Type.CHANNEL, this.showChannels.isChecked()); config.setBufferTypeAllowed(BufferInfo.Type.QUERY, this.showQueries.isChecked()); @@ -132,7 +141,8 @@ public class ChatListEditActivity extends BoundActivity { finish(); } - } return true; + } + return true; default: return super.onOptionsItemSelected(item); } @@ -140,6 +150,7 @@ public class ChatListEditActivity extends BoundActivity { @Override protected void onConnected() { + networkSpinnerAdapter.setNetworkManager(context.client().networkManager()); setConfig(context.client().bufferViewManager().bufferViewConfig(id)); } @@ -148,7 +159,7 @@ public class ChatListEditActivity extends BoundActivity { if (config != null) { name.setText(config.bufferViewName()); - //network + network.setSelection(getSelectedNetworkIndex(config)); showChannels.setChecked(config.isBufferTypeAllowed(BufferInfo.Type.CHANNEL)); showQueries.setChecked(config.isBufferTypeAllowed(BufferInfo.Type.QUERY)); hideInactiveChats.setChecked(config.hideInactiveBuffers()); @@ -159,8 +170,20 @@ public class ChatListEditActivity extends BoundActivity { } } + private int getSelectedNetworkIndex(QBufferViewConfig config) { + QNetwork network; + if (context.client() == null) { + return 0; + } else if ((network = context.client().networkManager().network(config.networkId())) == null) { + return 0; + } else { + return context.client().networkManager().networks().indexOf(network) + 1; + } + } + @Override protected void onDisconnected() { + networkSpinnerAdapter.setNetworkManager(null); setConfig(null); } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java index d76f35b14caab7f778db5fcbffa8ae307be4d3bc..bb39606ab0d2997ec70b23f22a59e0a3451911e2 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java @@ -57,6 +57,18 @@ public class ChatListListActivity extends BoundActivity { Toolbar toolbar; ChatListAdapter adapter; + OnQBufferViewConfigClickListener clickListener = config -> { + if (config != null) { + Intent intent = new Intent(this, ChatListEditActivity.class); + intent.putExtra("id", config.bufferViewId()); + startActivity(intent); + } + }; + OnQBufferViewConfigDeleteListener deleteListener = config -> { + if (manager != null && config != null) { + manager.deleteBufferView(config.bufferViewId()); + } + }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -89,6 +101,14 @@ public class ChatListListActivity extends BoundActivity { adapter.setManager(null); } + interface OnQBufferViewConfigClickListener { + void onClick(QBufferViewConfig config); + } + + interface OnQBufferViewConfigDeleteListener { + void onDelete(QBufferViewConfig config); + } + private class ChatListAdapter extends RecyclerView.Adapter<ChatListViewHolder> { QBufferViewManager manager; AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); @@ -121,28 +141,6 @@ public class ChatListListActivity extends BoundActivity { } } - interface OnQBufferViewConfigClickListener { - void onClick(QBufferViewConfig config); - } - - interface OnQBufferViewConfigDeleteListener { - void onDelete(QBufferViewConfig config); - } - - OnQBufferViewConfigClickListener clickListener = config -> { - if (config != null) { - Intent intent = new Intent(this, ChatListEditActivity.class); - intent.putExtra("id", config.bufferViewId()); - startActivity(intent); - } - }; - - OnQBufferViewConfigDeleteListener deleteListener = config -> { - if (manager != null && config != null) { - manager.deleteBufferView(config.bufferViewId()); - } - }; - class ChatListViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.chatlist_name) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..fd65808ad0ff30a1d6e2db81ec00d007f4c4ae40 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java @@ -0,0 +1,179 @@ +/* + * QuasselDroid - Quassel client for Android + * Copyright (C) 2016 Janne Koschinski + * Copyright (C) 2016 Ken Børge Viktil + * Copyright (C) 2016 Magnus Fjell + * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid_ng.ui.coresettings.identity; + +import android.content.res.Resources; +import android.database.DataSetObserver; +import android.support.annotation.Nullable; +import android.support.v7.view.ContextThemeWrapper; +import android.support.v7.widget.ThemedSpinnerAdapter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.HashSet; +import java.util.Set; + +import de.kuschku.libquassel.client.IdentityManager; +import de.kuschku.libquassel.syncables.types.interfaces.QIdentity; +import de.kuschku.quasseldroid_ng.R; +import de.kuschku.util.observables.callbacks.GeneralCallback; +import de.kuschku.util.observables.callbacks.UICallback; +import de.kuschku.util.observables.lists.ObservableSortedList; + +public class IdentitySpinnerAdapter implements ThemedSpinnerAdapter, GeneralCallback { + private ObservableSortedList<QIdentity> identities; + @Nullable + private Resources.Theme theme; + + private Set<DataSetObserver> observers = new HashSet<>(); + + public void setIdentityManager(IdentityManager identityManager) { + this.identities = identityManager.identities(); + this.identities.addCallback(new UICallback() { + @Override + public void notifyItemInserted(int position) { + notifyChanged(null); + } + + @Override + public void notifyItemChanged(int position) { + notifyChanged(null); + } + + @Override + public void notifyItemRemoved(int position) { + notifyChanged(null); + } + + @Override + public void notifyItemMoved(int from, int to) { + notifyChanged(null); + } + + @Override + public void notifyItemRangeInserted(int position, int count) { + notifyChanged(null); + } + + @Override + public void notifyItemRangeChanged(int position, int count) { + notifyChanged(null); + } + + @Override + public void notifyItemRangeRemoved(int position, int count) { + notifyChanged(null); + } + }); + notifyChanged(null); + } + + @Nullable + @Override + public Resources.Theme getDropDownViewTheme() { + return theme; + } + + @Override + public void setDropDownViewTheme(@Nullable Resources.Theme theme) { + this.theme = theme; + } + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(parent.getContext(), theme)); + TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false); + QIdentity config = getItem(position); + view.setText(config == null ? "" : config.identityName()); + return view; + } + + @Override + public void registerDataSetObserver(DataSetObserver observer) { + observers.add(observer); + } + + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + observers.remove(observer); + } + + @Override + public int getCount() { + return identities == null ? 0 : identities.size(); + } + + @Override + public QIdentity getItem(int position) { + if (position >= 0 && identities != null && position < identities.size()) + return identities.get(position); + else + return null; + } + + @Override + public long getItemId(int position) { + QIdentity identity = getItem(position); + if (identity != null) + return identity.id(); + else + return -1; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_inline, parent, false); + QIdentity identity = getItem(position); + view.setText(identity == null ? "" : identity.identityName()); + return view; + } + + @Override + public int getItemViewType(int position) { + return 0; + } + + @Override + public int getViewTypeCount() { + return 1; + } + + @Override + public boolean isEmpty() { + return getCount() == 0; + } + + @Override + public void notifyChanged(Object o) { + for (DataSetObserver observer : observers) { + observer.onChanged(); + } + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/AllNetworksItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/AllNetworksItem.java new file mode 100644 index 0000000000000000000000000000000000000000..25c7f587ffe91524aa6b89e3dec4c9e3930d9cb9 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/AllNetworksItem.java @@ -0,0 +1,743 @@ +/* + * QuasselDroid - Quassel client for Android + * Copyright (C) 2016 Janne Koschinski + * Copyright (C) 2016 Ken Børge Viktil + * Copyright (C) 2016 Magnus Fjell + * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid_ng.ui.coresettings.network; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import java.util.List; + +import de.kuschku.libquassel.objects.types.NetworkServer; +import de.kuschku.libquassel.syncables.types.impl.IrcChannel; +import de.kuschku.libquassel.syncables.types.impl.NetworkInfo; +import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; +import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; +import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; +import de.kuschku.quasseldroid_ng.R; +import de.kuschku.util.irc.chanmodes.IrcModeProvider; +import de.kuschku.util.observables.callbacks.GeneralCallback; + +class AllNetworksItem implements QNetwork { + private final Context context; + + public AllNetworksItem(Context context) { + this.context = context; + } + + @Override + public int networkId() { + return 0; + } + + @Override + public boolean isMyNick(String nick) { + return false; + } + + @Override + public boolean isMe(QIrcUser ircuser) { + return false; + } + + @Override + public boolean isChannelName(String channelname) { + return false; + } + + @Override + public boolean isConnected() { + return false; + } + + @Override + public void setConnected(boolean isConnected) { + + } + + @Override + public ConnectionState connectionState() { + return null; + } + + @Override + public String prefixToMode(char prefix) { + return null; + } + + @Override + public String prefixToMode(String prefix) { + return null; + } + + @Override + public String modeToPrefix(char mode) { + return null; + } + + @Override + public String modeToPrefix(String mode) { + return null; + } + + @Override + public int modeToIndex(String mode) { + return 0; + } + + @NonNull + @Override + public ChannelModeType channelModeType(char mode) { + return null; + } + + @NonNull + @Override + public ChannelModeType channelModeType(String mode) { + return null; + } + + @Override + public String networkName() { + return context.getString(R.string.all_networks); + } + + @Override + public String currentServer() { + return null; + } + + @Override + public String myNick() { + return null; + } + + @Override + public int latency() { + return 0; + } + + @Override + public QIrcUser me() { + return null; + } + + @Override + public int identity() { + return 0; + } + + @NonNull + @Override + public List<String> nicks() { + return null; + } + + @NonNull + @Override + public List<String> channels() { + return null; + } + + @Override + public List<NetworkServer> serverList() { + return null; + } + + @Override + public boolean useRandomServer() { + return false; + } + + @Override + public List<String> perform() { + return null; + } + + @Override + public boolean useAutoIdentify() { + return false; + } + + @Override + public String autoIdentifyService() { + return null; + } + + @Override + public String autoIdentifyPassword() { + return null; + } + + @Override + public boolean useSasl() { + return false; + } + + @Override + public String saslAccount() { + return null; + } + + @Override + public String saslPassword() { + return null; + } + + @Override + public boolean useAutoReconnect() { + return false; + } + + @Override + public int autoReconnectInterval() { + return 0; + } + + @Override + public short autoReconnectRetries() { + return 0; + } + + @Override + public boolean unlimitedReconnectRetries() { + return false; + } + + @Override + public boolean rejoinChannels() { + return false; + } + + @Override + public NetworkInfo networkInfo() { + return null; + } + + @Override + public List<String> prefixes() { + return null; + } + + @Override + public List<String> prefixModes() { + return null; + } + + @Override + public IrcModeProvider modeProvider() { + return null; + } + + @Override + public void determinePrefixes() { + + } + + @Override + public boolean supports(String param) { + return false; + } + + @Override + public String support(String param) { + return null; + } + + @Override + public QIrcUser ircUser(String nickname) { + return null; + } + + @NonNull + @Override + public List<QIrcUser> ircUsers() { + return null; + } + + @Override + public int ircUserCount() { + return 0; + } + + @Override + public QIrcChannel newIrcChannel(String channelname) { + return null; + } + + @Nullable + @Override + public QIrcChannel ircChannel(String channelname) { + return null; + } + + @NonNull + @Override + public List<QIrcChannel> ircChannels() { + return null; + } + + @Override + public int ircChannelCount() { + return 0; + } + + @Override + public String codecForServer() { + return null; + } + + @Override + public String codecForEncoding() { + return null; + } + + @Override + public String codecForDecoding() { + return null; + } + + @Override + public String defaultCodecForServer() { + return null; + } + + @Override + public String defaultCodecForEncoding() { + return null; + } + + @Override + public String defaultCodecForDecoding() { + return null; + } + + @Override + public void setDefaultCodecForServer(String name) { + + } + + @Override + public void setDefaultCodecForEncoding(String name) { + + } + + @Override + public void setDefaultCodecForDecoding(String name) { + + } + + @Override + public boolean autoAwayActive() { + return false; + } + + @Override + public void setAutoAwayActive(boolean active) { + + } + + @Override + public void _setAutoAwayActive(boolean active) { + + } + + @Override + public void setNetworkName(String networkName) { + + } + + @Override + public void _setNetworkName(String networkName) { + + } + + @Override + public void setCurrentServer(String currentServer) { + + } + + @Override + public void _setCurrentServer(String currentServer) { + + } + + @Override + public void _setConnected(boolean isConnected) { + + } + + @Override + public void setConnectionState(int state) { + + } + + @Override + public void _setConnectionState(int state) { + + } + + @Override + public void setMyNick(String mynick) { + + } + + @Override + public void _setMyNick(String mynick) { + + } + + @Override + public void setLatency(int latency) { + + } + + @Override + public void _setLatency(int latency) { + + } + + @Override + public void setIdentity(int identityId) { + + } + + @Override + public void _setIdentity(int identityId) { + + } + + @Override + public void setServerList(List<NetworkServer> serverList) { + + } + + @Override + public void _setServerList(List<NetworkServer> serverList) { + + } + + @Override + public void setUseRandomServer(boolean useRandomServer) { + + } + + @Override + public void _setUseRandomServer(boolean useRandomServer) { + + } + + @Override + public void setPerform(List<String> performs) { + + } + + @Override + public void _setPerform(List<String> performs) { + + } + + @Override + public void setUseAutoIdentify(boolean useAutoIdentify) { + + } + + @Override + public void _setUseAutoIdentify(boolean useAutoIdentify) { + + } + + @Override + public void setAutoIdentifyService(String autoIdentifyService) { + + } + + @Override + public void _setAutoIdentifyService(String autoIdentifyService) { + + } + + @Override + public void setAutoIdentifyPassword(String autoIdentifyPassword) { + + } + + @Override + public void _setAutoIdentifyPassword(String autoIdentifyPassword) { + + } + + @Override + public void setUseSasl(boolean useSasl) { + + } + + @Override + public void _setUseSasl(boolean useSasl) { + + } + + @Override + public void setSaslAccount(String saslAccount) { + + } + + @Override + public void _setSaslAccount(String saslAccount) { + + } + + @Override + public void setSaslPassword(String saslPassword) { + + } + + @Override + public void _setSaslPassword(String saslPassword) { + + } + + @Override + public void setUseAutoReconnect(boolean useAutoReconnect) { + + } + + @Override + public void _setUseAutoReconnect(boolean useAutoReconnect) { + + } + + @Override + public void setAutoReconnectInterval(int autoReconnectInterval) { + + } + + @Override + public void _setAutoReconnectInterval(int autoReconnectInterval) { + + } + + @Override + public void setAutoReconnectRetries(short autoReconnectRetries) { + + } + + @Override + public void _setAutoReconnectRetries(short autoReconnectRetries) { + + } + + @Override + public void setUnlimitedReconnectRetries(boolean unlimitedReconnectRetries) { + + } + + @Override + public void _setUnlimitedReconnectRetries(boolean unlimitedReconnectRetries) { + + } + + @Override + public void setRejoinChannels(boolean rejoinChannels) { + + } + + @Override + public void _setRejoinChannels(boolean rejoinChannels) { + + } + + @Override + public void setCodecForServer(String codecName) { + + } + + @Override + public void _setCodecForServer(String codecName) { + + } + + @Override + public void setCodecForEncoding(String codecName) { + + } + + @Override + public void _setCodecForEncoding(String codecName) { + + } + + @Override + public void setCodecForDecoding(String codecName) { + + } + + @Override + public void _setCodecForDecoding(String codecName) { + + } + + @Override + public void addSupport(String param) { + + } + + @Override + public void _addSupport(String param) { + + } + + @Override + public void addSupport(String param, String value) { + + } + + @Override + public void _addSupport(String param, String value) { + + } + + @Override + public void removeSupport(String param) { + + } + + @Override + public void _removeSupport(String param) { + + } + + @Override + public void addIrcUser(String hostmask) { + + } + + @Override + public void _addIrcUser(String hostmask) { + + } + + @Override + public void addIrcChannel(String channel) { + + } + + @Override + public void _addIrcChannel(String channel) { + + } + + @Override + public QIrcUser updateNickFromMask(String mask) { + return null; + } + + @Override + public QIrcUser _updateNickFromMask(String mask) { + return null; + } + + @Override + public void ircUserNickChanged(String oldNick, String newnick) { + + } + + @Override + public void _ircUserNickChanged(String oldNick, String newnick) { + + } + + @Override + public void connect() { + + } + + @Override + public void _connect() { + + } + + @Override + public void disconnect() { + + } + + @Override + public void _disconnect() { + + } + + @Override + public void setNetworkInfo(NetworkInfo info) { + + } + + @Override + public void _setNetworkInfo(NetworkInfo info) { + + } + + @Override + public void removeIrcUser(QIrcUser ircuser) { + + } + + @Override + public void _removeIrcUser(QIrcUser ircuser) { + + } + + @Override + public void removeIrcChannel(QIrcChannel ircChannel) { + + } + + @Override + public void _removeIrcChannel(QIrcChannel ircChannel) { + + } + + @Override + public void removeChansAndUsers() { + + } + + @Override + public void _removeChansAndUsers() { + + } + + @Override + public void _addIrcChannel(IrcChannel ircChannel) { + + } + + @Override + public void addObserver(GeneralCallback<QNetwork> o) { + + } + + @Override + public void deleteObserver(GeneralCallback<QNetwork> o) { + + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3001c4ebfd652e5831c855cb965ebd07587421c6 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java @@ -0,0 +1,114 @@ +/* + * QuasselDroid - Quassel client for Android + * Copyright (C) 2016 Janne Koschinski + * Copyright (C) 2016 Ken Børge Viktil + * Copyright (C) 2016 Magnus Fjell + * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid_ng.ui.coresettings.network; + +import android.content.Context; +import android.database.DataSetObserver; + +import java.util.HashSet; +import java.util.Set; + +import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; +import de.kuschku.util.observables.callbacks.UICallback; +import de.kuschku.util.observables.lists.ObservableSortedList; + +public class FakeNetworksWrapper { + private ObservableSortedList<QNetwork> base; + private QNetwork fakeNetwork; + private Set<DataSetObserver> observers = new HashSet<>(); + private UICallback callback = new UICallback() { + @Override + public void notifyItemInserted(int position) { + notifyChanged(); + } + + @Override + public void notifyItemChanged(int position) { + notifyChanged(); + } + + @Override + public void notifyItemRemoved(int position) { + notifyChanged(); + } + + @Override + public void notifyItemMoved(int from, int to) { + notifyChanged(); + } + + @Override + public void notifyItemRangeInserted(int position, int count) { + notifyChanged(); + } + + @Override + public void notifyItemRangeChanged(int position, int count) { + notifyChanged(); + } + + @Override + public void notifyItemRangeRemoved(int position, int count) { + notifyChanged(); + } + }; + + public FakeNetworksWrapper(Context context) { + this.fakeNetwork = new AllNetworksItem(context); + } + + public void setBase(ObservableSortedList<QNetwork> base) { + if (this.base != null) + this.base.removeCallback(callback); + this.base = base; + if (this.base != null) + this.base.addCallback(callback); + notifyChanged(); + } + + public QNetwork get(int position) { + if (position == 0) + return fakeNetwork; + else if (position > 0 && position <= base.size() && base != null) + return base.get(position - 1); + else + return null; + } + + public int getCount() { + return base == null ? 1 : base.size() + 1; + } + + public void addObserver(DataSetObserver observer) { + observers.add(observer); + } + + public void removeObserver(DataSetObserver observer) { + observers.remove(observer); + } + + public void notifyChanged() { + for (DataSetObserver observer : observers) { + observer.onChanged(); + } + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java index 0c4f3e27ae9f692f42bc6464ff3fd679b8cefdf0..7df0ba42d81bafcb0b5987a478ecb661fb146742 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java @@ -26,7 +26,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -42,6 +41,7 @@ import butterknife.Bind; import butterknife.ButterKnife; import de.kuschku.libquassel.syncables.types.impl.NetworkInfo; import de.kuschku.quasseldroid_ng.R; +import de.kuschku.quasseldroid_ng.ui.coresettings.identity.IdentitySpinnerAdapter; import de.kuschku.util.servicebound.BoundActivity; public class NetworkCreateActivity extends BoundActivity { @@ -100,6 +100,7 @@ public class NetworkCreateActivity extends BoundActivity { CheckBox unlimitedAutoReconnectRetries; int id; + IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter(); private NetworkInfo networkInfo; public static void expand(final ViewGroup v) { @@ -109,13 +110,12 @@ public class NetworkCreateActivity extends BoundActivity { // Older versions of android (pre API 21) cancel animations for views with a height of 0. v.getLayoutParams().height = 1; v.setVisibility(View.VISIBLE); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { v.getLayoutParams().height = interpolatedTime == 1 ? ViewGroup.LayoutParams.WRAP_CONTENT - : (int)(targetHeight * interpolatedTime); + : (int) (targetHeight * interpolatedTime); v.setAlpha(interpolatedTime); v.requestLayout(); } @@ -127,21 +127,20 @@ public class NetworkCreateActivity extends BoundActivity { }; // 1dp/ms - a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density)); + a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density)); v.startAnimation(a); } public static void collapse(final ViewGroup v) { final int initialHeight = v.getMeasuredHeight(); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { - if(interpolatedTime == 1){ + if (interpolatedTime == 1) { v.setVisibility(View.GONE); - }else{ - v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); + } else { + v.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime); v.setAlpha(1 - interpolatedTime); v.requestLayout(); } @@ -153,7 +152,7 @@ public class NetworkCreateActivity extends BoundActivity { } }; - a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density)); + a.setDuration((int) (initialHeight / v.getContext().getResources().getDisplayMetrics().density)); v.startAnimation(a); } @@ -175,6 +174,8 @@ public class NetworkCreateActivity extends BoundActivity { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + identity.setAdapter(spinnerAdapter); + useCustomCodecs.setOnCheckedChangeListener(this::updateCustomCodecsVisible); updateCustomCodecsVisible(null, useCustomCodecs.isChecked()); @@ -225,13 +226,12 @@ public class NetworkCreateActivity extends BoundActivity { group.getLayoutParams().height = 1; group.setVisibility(View.VISIBLE); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { group.getLayoutParams().height = interpolatedTime == 1 ? ViewGroup.LayoutParams.WRAP_CONTENT - : (int)(targetHeight * interpolatedTime); + : (int) (targetHeight * interpolatedTime); group.requestLayout(); } @@ -241,19 +241,18 @@ public class NetworkCreateActivity extends BoundActivity { } }; - a.setDuration((int)(targetHeight / group.getContext().getResources().getDisplayMetrics().density)); + a.setDuration((int) (targetHeight / group.getContext().getResources().getDisplayMetrics().density)); group.startAnimation(a); } else { final int initialHeight = group.getMeasuredHeight(); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { - if(interpolatedTime == 1){ + if (interpolatedTime == 1) { group.setVisibility(View.GONE); - }else{ - group.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); + } else { + group.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime); group.requestLayout(); } } @@ -264,7 +263,7 @@ public class NetworkCreateActivity extends BoundActivity { } }; - a.setDuration((int)(initialHeight / group.getContext().getResources().getDisplayMetrics().density)); + a.setDuration((int) (initialHeight / group.getContext().getResources().getDisplayMetrics().density)); group.startAnimation(a); } } @@ -307,7 +306,8 @@ public class NetworkCreateActivity extends BoundActivity { finish(); } - } return true; + } + return true; default: return super.onOptionsItemSelected(item); } @@ -315,11 +315,11 @@ public class NetworkCreateActivity extends BoundActivity { @Override protected void onConnected() { - + spinnerAdapter.setIdentityManager(context.client().identityManager()); } @Override protected void onDisconnected() { - + spinnerAdapter.setIdentityManager(null); } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java index 167d65d1624639cd8110f90db2f73ea21bd3bd00..b61ea8b7f57a9fe087b79d8dfb5583bfd091feb1 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java @@ -26,7 +26,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -41,8 +40,10 @@ import android.widget.Spinner; import butterknife.Bind; import butterknife.ButterKnife; import de.kuschku.libquassel.syncables.types.impl.NetworkInfo; +import de.kuschku.libquassel.syncables.types.interfaces.QIdentity; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.R; +import de.kuschku.quasseldroid_ng.ui.coresettings.identity.IdentitySpinnerAdapter; import de.kuschku.util.backports.Objects; import de.kuschku.util.servicebound.BoundActivity; @@ -65,43 +66,44 @@ public class NetworkEditActivity extends BoundActivity { SwitchCompat useCustomCodecs; @Bind(R.id.groupCustomCodecs) ViewGroup groupCustomCodecs; - @Bind(R.id.codecForServer) - EditText codecForServer; - @Bind(R.id.codecForEncoding) - EditText codecForEncoding; - @Bind(R.id.codecForDecoding) - EditText codecForDecoding; + @Bind(R.id.codecForServer) + EditText codecForServer; + @Bind(R.id.codecForEncoding) + EditText codecForEncoding; + @Bind(R.id.codecForDecoding) + EditText codecForDecoding; @Bind(R.id.useAutoIdentify) SwitchCompat useAutoIdentify; @Bind(R.id.groupAutoIdentify) ViewGroup groupAutoIdentify; - @Bind(R.id.autoIdentifyService) - EditText autoIdentifyService; - @Bind(R.id.autoIdentifyPassword) - EditText autoIdentifyPassword; + @Bind(R.id.autoIdentifyService) + EditText autoIdentifyService; + @Bind(R.id.autoIdentifyPassword) + EditText autoIdentifyPassword; @Bind(R.id.useSasl) SwitchCompat useSasl; @Bind(R.id.groupSasl) ViewGroup groupSasl; - @Bind(R.id.saslAccount) - EditText saslAccount; - @Bind(R.id.saslPassword) - EditText saslPassword; + @Bind(R.id.saslAccount) + EditText saslAccount; + @Bind(R.id.saslPassword) + EditText saslPassword; @Bind(R.id.useAutoReconnect) SwitchCompat useAutoReconnect; @Bind(R.id.groupAutoReconnect) ViewGroup groupAutoReconnect; - @Bind(R.id.autoReconnectInterval) - EditText autoReconnectInterval; - @Bind(R.id.autoReconnectRetries) - EditText autoReconnectRetries; - @Bind(R.id.unlimitedAutoReconnectRetries) - CheckBox unlimitedAutoReconnectRetries; + @Bind(R.id.autoReconnectInterval) + EditText autoReconnectInterval; + @Bind(R.id.autoReconnectRetries) + EditText autoReconnectRetries; + @Bind(R.id.unlimitedAutoReconnectRetries) + CheckBox unlimitedAutoReconnectRetries; int id; + IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter(); private QNetwork network; public static void expand(final ViewGroup v) { @@ -111,13 +113,12 @@ public class NetworkEditActivity extends BoundActivity { // Older versions of android (pre API 21) cancel animations for views with a height of 0. v.getLayoutParams().height = 1; v.setVisibility(View.VISIBLE); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { v.getLayoutParams().height = interpolatedTime == 1 ? ViewGroup.LayoutParams.WRAP_CONTENT - : (int)(targetHeight * interpolatedTime); + : (int) (targetHeight * interpolatedTime); v.setAlpha(interpolatedTime); v.requestLayout(); } @@ -129,21 +130,20 @@ public class NetworkEditActivity extends BoundActivity { }; // 1dp/ms - a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density)); + a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density)); v.startAnimation(a); } public static void collapse(final ViewGroup v) { final int initialHeight = v.getMeasuredHeight(); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { - if(interpolatedTime == 1){ + if (interpolatedTime == 1) { v.setVisibility(View.GONE); - }else{ - v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); + } else { + v.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime); v.setAlpha(1 - interpolatedTime); v.requestLayout(); } @@ -155,7 +155,7 @@ public class NetworkEditActivity extends BoundActivity { } }; - a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density)); + a.setDuration((int) (initialHeight / v.getContext().getResources().getDisplayMetrics().density)); v.startAnimation(a); } @@ -177,6 +177,8 @@ public class NetworkEditActivity extends BoundActivity { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + identity.setAdapter(spinnerAdapter); + useCustomCodecs.setOnCheckedChangeListener(this::updateCustomCodecsVisible); updateCustomCodecsVisible(null, useCustomCodecs.isChecked()); @@ -271,7 +273,8 @@ public class NetworkEditActivity extends BoundActivity { finish(); } - } return true; + } + return true; default: return super.onOptionsItemSelected(item); } @@ -280,6 +283,7 @@ public class NetworkEditActivity extends BoundActivity { @Override protected void onConnected() { setNetwork(context.client().networkManager().network(id)); + spinnerAdapter.setIdentityManager(context.client().identityManager()); } private void setNetwork(QNetwork network) { @@ -288,6 +292,7 @@ public class NetworkEditActivity extends BoundActivity { NetworkInfo networkInfo = this.network.networkInfo(); if (networkInfo != null) { networkName.setText(networkInfo.networkName()); + identity.setSelection(getIdentityPosition(networkInfo)); useCustomCodecs.setChecked(networkInfo.codecForServer() != null || networkInfo.codecForEncoding() != null || networkInfo.codecForDecoding() != null); codecForServer.setText(networkInfo.codecForServer()); codecForEncoding.setText(networkInfo.codecForEncoding()); @@ -311,8 +316,14 @@ public class NetworkEditActivity extends BoundActivity { } } + private int getIdentityPosition(NetworkInfo networkInfo) { + QIdentity identity = context.client().identityManager().identity(networkInfo.identity()); + return context.client().identityManager().identities().indexOf(identity); + } + @Override protected void onDisconnected() { setNetwork(null); + spinnerAdapter.setIdentityManager(null); } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java index fd93e5901fc9ebf0c4576b8c2b3939f997194b98..9ce432d2122180f4bd1e2412a56ee975b2acf479 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java @@ -38,11 +38,8 @@ import android.widget.TextView; import butterknife.Bind; import butterknife.ButterKnife; import de.kuschku.libquassel.client.NetworkManager; -import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; -import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.servicebound.BoundActivity; @@ -60,6 +57,18 @@ public class NetworkListActivity extends BoundActivity { Toolbar toolbar; ChatListAdapter adapter; + OnQNetworkClickListener clickListener = network -> { + if (network != null) { + Intent intent = new Intent(this, NetworkEditActivity.class); + intent.putExtra("id", network.networkId()); + startActivity(intent); + } + }; + OnQNetworkDeleteListener deleteListener = network -> { + if (manager != null && network != null) { + context.client().removeNetwork(network.networkId()); + } + }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -92,6 +101,14 @@ public class NetworkListActivity extends BoundActivity { adapter.setManager(null); } + interface OnQNetworkClickListener { + void onClick(QNetwork network); + } + + interface OnQNetworkDeleteListener { + void onDelete(QNetwork network); + } + private class ChatListAdapter extends RecyclerView.Adapter<NetworkViewHolder> { NetworkManager manager; AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); @@ -124,28 +141,6 @@ public class NetworkListActivity extends BoundActivity { } } - interface OnQNetworkClickListener { - void onClick(QNetwork network); - } - - interface OnQNetworkDeleteListener { - void onDelete(QNetwork network); - } - - OnQNetworkClickListener clickListener = network -> { - if (network != null) { - Intent intent = new Intent(this, NetworkEditActivity.class); - intent.putExtra("id", network.networkId()); - startActivity(intent); - } - }; - - OnQNetworkDeleteListener deleteListener = network -> { - if (manager != null && network != null) { - context.client().removeNetwork(network.networkId()); - } - }; - class NetworkViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.network_name) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..591fea3904a0c2b895de6796936cd62e475e1fb3 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java @@ -0,0 +1,130 @@ +/* + * QuasselDroid - Quassel client for Android + * Copyright (C) 2016 Janne Koschinski + * Copyright (C) 2016 Ken Børge Viktil + * Copyright (C) 2016 Magnus Fjell + * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid_ng.ui.coresettings.network; + +import android.content.Context; +import android.content.res.Resources; +import android.database.DataSetObserver; +import android.support.annotation.Nullable; +import android.support.v7.view.ContextThemeWrapper; +import android.support.v7.widget.ThemedSpinnerAdapter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import de.kuschku.libquassel.client.NetworkManager; +import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; +import de.kuschku.quasseldroid_ng.R; + +public class NetworkSpinnerAdapter implements ThemedSpinnerAdapter { + @Nullable + private Resources.Theme theme; + private FakeNetworksWrapper wrapper; + + public NetworkSpinnerAdapter(Context context) { + wrapper = new FakeNetworksWrapper(context); + } + + + public void setNetworkManager(NetworkManager networkManager) { + wrapper.setBase(networkManager.networks()); + } + + @Nullable + @Override + public Resources.Theme getDropDownViewTheme() { + return theme; + } + + @Override + public void setDropDownViewTheme(@Nullable Resources.Theme theme) { + this.theme = theme; + } + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(parent.getContext(), theme)); + TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false); + QNetwork networks = getItem(position); + view.setText(networks == null ? "" : networks.networkName()); + return view; + } + + @Override + public void registerDataSetObserver(DataSetObserver observer) { + wrapper.addObserver(observer); + } + + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + wrapper.removeObserver(observer); + } + + @Override + public int getCount() { + return wrapper.getCount(); + } + + @Override + public QNetwork getItem(int position) { + return wrapper.get(position); + } + + @Override + public long getItemId(int position) { + QNetwork network = getItem(position); + if (network != null) + return network.networkId(); + else + return -1; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_inline, parent, false); + QNetwork networks = getItem(position); + view.setText(networks == null ? "" : networks.networkName()); + return view; + } + + @Override + public int getItemViewType(int position) { + return 0; + } + + @Override + public int getViewTypeCount() { + return 1; + } + + @Override + public boolean isEmpty() { + return getCount() == 0; + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java index 8bd440dd77f08bbe076f85af05295851eabf349e..6101150239eb2c426c450ab57791b0b7bcc66171 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java @@ -33,19 +33,13 @@ import android.view.View; import java.util.ArrayList; import java.util.List; -import java.util.UUID; import butterknife.Bind; import butterknife.ButterKnife; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSetupCoreSlide; -import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSetupNameSlide; -import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSetupUserSlide; import de.kuschku.quasseldroid_ng.ui.setup.slides.CoreBackendSelectSlide; import de.kuschku.quasseldroid_ng.ui.setup.slides.CoreBackendSetupSlide; import de.kuschku.quasseldroid_ng.ui.setup.slides.SlideFragment; -import de.kuschku.util.accounts.Account; -import de.kuschku.util.accounts.AccountManager; public class CoreSetupActivity extends AppCompatActivity implements ValidUpdateCallback { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java index 2ed84321415b71479419c54de9ca780aebed75ca..0bbe03c3fac400c9bc0ea9f63aa53a60871504f0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java @@ -23,9 +23,7 @@ package de.kuschku.quasseldroid_ng.ui.setup; import android.content.Context; import android.content.res.ColorStateList; -import android.os.Bundle; import android.support.annotation.ColorInt; -import android.support.v7.widget.AppCompatImageButton; import android.support.v7.widget.AppCompatRadioButton; import android.support.v7.widget.RecyclerView; import android.util.Pair; @@ -37,7 +35,6 @@ import com.mikepenz.materialdrawer.model.AbstractDrawerItem; import com.mikepenz.materialdrawer.util.DrawerUIUtils; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.util.accounts.Account; public class StorageBackendItem extends AbstractDrawerItem<StorageBackendItem, StorageBackendItem.ViewHolder> { private final String displayName; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java index fcd92767f4422fb55fb1a5b6e013bfd89b87425b..2809fac09f32b4df182a984bf0c3873343e168c4 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java @@ -25,7 +25,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.TextInputEditText; -import android.support.v7.widget.AppCompatEditText; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java index b51e1d726129d97e4d2afdc386f1f0bc39b1d3fc..4cd770a663b75f4a34da8522e22eb8e076ed38ce 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java @@ -25,7 +25,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.TextInputEditText; -import android.support.v7.widget.AppCompatEditText; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java index 75d90be878022d7d92a155da11594d23de9ea531..29305bc836c8bbfd71f8b6d2bcf93e59ce9fbab7 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java @@ -25,7 +25,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.TextInputEditText; -import android.support.v7.widget.AppCompatEditText; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java index 4f72c3c32d42c61a82414d797ea6e74ec846f938..5bc4a47d97e5ba12b15cf71a86d234b1f513ef35 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java @@ -33,18 +33,11 @@ import android.view.ViewGroup; import com.mikepenz.fastadapter.FastAdapter; import com.mikepenz.fastadapter.IItem; import com.mikepenz.fastadapter.adapters.ItemAdapter; -import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; -import java.util.Iterator; import java.util.List; -import java.util.Set; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.setup.AccountItem; import de.kuschku.quasseldroid_ng.ui.setup.StorageBackendItem; -import de.kuschku.util.accounts.AccountManager; -import de.kuschku.util.backports.Optional; -import de.kuschku.util.backports.Optionals; public class CoreBackendSelectSlide extends SlideFragment { private FastAdapter<IItem> fastAdapter; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java index 2fcfbf6a1fb0f5c67e7f1800bffb59f073289d97..68ab29647d6432b0dd0e460add3812696b1b0e10 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java @@ -23,21 +23,17 @@ package de.kuschku.quasseldroid_ng.ui.setup.slides; import android.content.Context; import android.os.Bundle; -import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.AppCompatEditText; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.EditText; import android.widget.LinearLayout; import java.util.ArrayList; @@ -49,14 +45,9 @@ import butterknife.ButterKnife; import de.kuschku.quasseldroid_ng.R; public class CoreBackendSetupSlide extends SlideFragment { - private Map<String, InputItemWrapper> items = new HashMap<>(); - @Bind(R.id.container) LinearLayout container; - - private Map<String, Bundle> storageBackends = new HashMap<>(); Bundle storageBackend; - TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -71,6 +62,8 @@ public class CoreBackendSetupSlide extends SlideFragment { public void afterTextChanged(Editable s) { } }; + private Map<String, InputItemWrapper> items = new HashMap<>(); + private Map<String, Bundle> storageBackends = new HashMap<>(); @Override public void setArguments(Bundle args) { @@ -162,44 +155,50 @@ public class CoreBackendSetupSlide extends SlideFragment { return R.string.slideAccountcoreDescription; } - private interface InputItemWrapper<T> { - String key(); - T getValue(); - boolean isValid(); - View getView(Context context, ViewGroup parent); - void onDestroy(); - void putValue(Bundle in); - } - private <T> InputItemWrapper<T> getInputItemWrapper(String key, String type, T defValue) { InputItemWrapper result; switch (type) { case "boolean": { result = new BooleanInputItem(key, (Boolean) defValue); - } break; + } + break; case "short": case "int": case "long": case "float": case "double": { result = new NumberInputItem(key, (Number) defValue, type); - } break; + } + break; default: case "string": { result = new StringInputItem(key, (String) defValue); - } break; + } + break; } return result; } + private interface InputItemWrapper<T> { + String key(); + + T getValue(); + + boolean isValid(); + + View getView(Context context, ViewGroup parent); + + void onDestroy(); + + void putValue(Bundle in); + } + class BooleanInputItem implements InputItemWrapper<Boolean> { private final String key; private final Boolean defValue; - - private View view; - @Bind(R.id.checkBox) AppCompatCheckBox checkBox; + private View view; public BooleanInputItem(String key, Boolean defValue) { this.key = key; @@ -247,15 +246,12 @@ public class CoreBackendSetupSlide extends SlideFragment { class NumberInputItem implements InputItemWrapper<Number> { private final String key; private final Number defValue; - private String type; - - private View view; - @Bind(R.id.inputLayout) TextInputLayout inputLayout; - @Bind(R.id.editText) TextInputEditText editText; + private String type; + private View view; public NumberInputItem(String key, Number defValue, String type) { this.key = key; @@ -330,19 +326,24 @@ public class CoreBackendSetupSlide extends SlideFragment { switch (type) { case "short": { in.putShort(key, (short) getValue()); - } break; + } + break; case "int": { in.putInt(key, (int) getValue()); - } break; + } + break; case "long": { in.putLong(key, (long) getValue()); - } break; + } + break; case "float": { in.putFloat(key, (float) getValue()); - } break; + } + break; case "double": { in.putDouble(key, (double) getValue()); - } break; + } + break; } } } @@ -350,14 +351,11 @@ public class CoreBackendSetupSlide extends SlideFragment { class StringInputItem implements InputItemWrapper<String> { private final String key; private final String defValue; - - private View view; - @Bind(R.id.inputLayout) TextInputLayout inputLayout; - @Bind(R.id.editText) TextInputEditText editText; + private View view; public StringInputItem(String key, String defValue) { this.key = key; diff --git a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java index af6b7effe425a5f953053d5270b9aa9d4c2821b6..e4bfdfec4df137eda30cd425d666e02812440444 100644 --- a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java +++ b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java @@ -28,7 +28,6 @@ import android.os.IBinder; import android.support.annotation.Nullable; import android.support.annotation.StyleRes; import android.support.v7.app.AppCompatActivity; -import android.util.Log; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -40,7 +39,6 @@ import de.kuschku.quasseldroid_ng.service.QuasselService; import de.kuschku.quasseldroid_ng.ui.chat.util.ServiceHelper; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.quasseldroid_ng.ui.theme.AppTheme; -import de.kuschku.util.AndroidAssert; import de.kuschku.util.accounts.Account; public abstract class BoundActivity extends AppCompatActivity { @@ -115,9 +113,11 @@ public abstract class BoundActivity extends AppCompatActivity { provider.event.register(this); } - protected void onConnected() {} + protected void onConnected() { + } - protected void onDisconnected() {} + protected void onDisconnected() { + } @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onConnectionStatusChange(ConnectionChangeEvent event) { diff --git a/app/src/main/res/layout/activity_chatlist_edit.xml b/app/src/main/res/layout/activity_chatlist_edit.xml index 2fe00f61e9ad0eabab00ac7ec15bf79d69e5cf27..877ee28bc9a1d551ca72bf0188938a216f1e700c 100644 --- a/app/src/main/res/layout/activity_chatlist_edit.xml +++ b/app/src/main/res/layout/activity_chatlist_edit.xml @@ -23,10 +23,11 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:background="?attr/colorBackground"> + android:background="?attr/colorBackground" + android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id/appBar" @@ -46,9 +47,9 @@ android:layout_height="match_parent"> <LinearLayout - android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" + android:orientation="vertical" android:padding="16dp"> <android.support.design.widget.TextInputLayout @@ -65,7 +66,7 @@ <LinearLayout android:layout_width="match_parent" - android:layout_height="72dp" + android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="16dp"> @@ -73,19 +74,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:textSize="12sp" android:paddingBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" - android:text="Network"/> + android:text="Network" + android:textSize="12sp"/> <android.support.v7.widget.AppCompatSpinner android:id="@+id/network" style="@style/Base.Widget.AppCompat.Spinner.Underlined" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="48dp" android:layout_gravity="center_vertical" - android:paddingBottom="8dp"/> + android:layout_marginBottom="8dp" + app:popupTheme="@style/AppTheme.PopupOverlay"/> </LinearLayout> @@ -127,7 +129,7 @@ <LinearLayout android:layout_width="match_parent" - android:layout_height="72dp" + android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="16dp"> @@ -135,19 +137,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:textSize="12sp" android:paddingBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" - android:text="Minimum Activity"/> + android:text="Minimum Activity" + android:textSize="12sp"/> <android.support.v7.widget.AppCompatSpinner android:id="@+id/minimumActivity" style="@style/Base.Widget.AppCompat.Spinner.Underlined" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="48dp" android:layout_gravity="center_vertical" - android:paddingBottom="8dp"/> + android:layout_marginBottom="8dp" + app:popupTheme="@style/AppTheme.PopupOverlay"/> </LinearLayout> diff --git a/app/src/main/res/layout/activity_network_edit.xml b/app/src/main/res/layout/activity_network_edit.xml index 3f46e15a9700ff231e3c92d46a59b49a39a6c4ab..f8d64bd4bf89a6b5a5d5a907f5d72f2ea3733efb 100644 --- a/app/src/main/res/layout/activity_network_edit.xml +++ b/app/src/main/res/layout/activity_network_edit.xml @@ -23,6 +23,7 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorBackground" @@ -65,7 +66,7 @@ <LinearLayout android:layout_width="match_parent" - android:layout_height="72dp" + android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="16dp"> @@ -73,7 +74,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:paddingBottom="8dp" + android:layout_marginBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" android:text="identity" @@ -83,9 +84,10 @@ android:id="@+id/identity" style="@style/Base.Widget.AppCompat.Spinner.Underlined" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="48dp" android:layout_gravity="center_vertical" - android:paddingBottom="8dp"/> + android:layout_marginBottom="8dp" + app:popupTheme="@style/AppTheme.PopupOverlay"/> </LinearLayout> diff --git a/app/src/main/res/layout/widget_md_spinner_item.xml b/app/src/main/res/layout/widget_spinner_item_inline.xml similarity index 75% rename from app/src/main/res/layout/widget_md_spinner_item.xml rename to app/src/main/res/layout/widget_spinner_item_inline.xml index 0a057aeeff8997648b3a0d42564f46b19d11b87d..8c20aa8c8f39fa7241be4a949acd912bcd15dc2a 100644 --- a/app/src/main/res/layout/widget_md_spinner_item.xml +++ b/app/src/main/res/layout/widget_spinner_item_inline.xml @@ -20,11 +20,9 @@ --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@android:id/text1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:minHeight="?attr/actionBarSize" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:textAppearance="?android:attr/textAppearanceListItemSmall" /> + android:id="@android:id/text1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:minHeight="48dp" + android:textAppearance="?android:attr/textAppearanceListItemSmall" /> diff --git a/app/src/main/res/layout/widget_spinner_item_toolbar.xml b/app/src/main/res/layout/widget_spinner_item_toolbar.xml new file mode 100644 index 0000000000000000000000000000000000000000..f7b95bc327188cf4003e40ea19cdd62ad1094341 --- /dev/null +++ b/app/src/main/res/layout/widget_spinner_item_toolbar.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ QuasselDroid - Quassel client for Android + ~ Copyright (C) 2016 Janne Koschinski + ~ Copyright (C) 2016 Ken Børge Viktil + ~ Copyright (C) 2016 Magnus Fjell + ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> + ~ + ~ This program is free software: you can redistribute it and/or modify it + ~ under the terms of the GNU General Public License as published by the Free + ~ Software Foundation, either version 3 of the License, or (at your option) + ~ any later version. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU General Public License for more details. + ~ + ~ You should have received a copy of the GNU General Public License along + ~ with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@android:id/text1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:minHeight="?attr/actionBarSize" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:textAppearance="?android:attr/textAppearanceListItemSmall"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f7778fbf8cbe5abc5c65483650beb2c608f21299..b9de9c4ae9c6e59927b92c56aab50e11ac3c71a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,4 +101,6 @@ <string name="action_unhide">Make Visible</string> <string name="action_hide_temp">Hide Temporarily</string> <string name="action_hide_perm">Hide Permanently</string> + + <string name="all_networks">All Networks</string> </resources>