Skip to content
Snippets Groups Projects
Commit 0eb72a68 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Added Buffer Status to the drawer

parent 0e5a895f
No related branches found
No related tags found
No related merge requests found
...@@ -138,6 +138,7 @@ public class BacklogFilter implements UICallback { ...@@ -138,6 +138,7 @@ public class BacklogFilter implements UICallback {
public void onEventMainThread(@NonNull MessageInsertEvent event) { public void onEventMainThread(@NonNull MessageInsertEvent event) {
filtered.add(event.msg); filtered.add(event.msg);
client.bufferSyncer().addActivity(event.msg);
} }
public void onEventMainThread(@NonNull MessageRemoveEvent event) { public void onEventMainThread(@NonNull MessageRemoveEvent event) {
......
...@@ -21,8 +21,10 @@ ...@@ -21,8 +21,10 @@
package de.kuschku.libquassel.syncables.types.impl; package de.kuschku.libquassel.syncables.types.impl;
import android.databinding.ObservableInt;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log; import android.util.Log;
import android.util.SparseArray;
import android.util.SparseIntArray; import android.util.SparseIntArray;
import java.util.Map; import java.util.Map;
...@@ -42,7 +44,7 @@ import static de.kuschku.util.AndroidAssert.assertNotNull; ...@@ -42,7 +44,7 @@ import static de.kuschku.util.AndroidAssert.assertNotNull;
public class BufferSyncer extends ABufferSyncer<BufferSyncer> { public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
@NonNull @NonNull
private final SparseIntArray activities = new SparseIntArray(); private final SparseArray<ObservableInt> activities = new SparseArray<>();
@NonNull @NonNull
private SparseIntArray lastSeenMsgs = new SparseIntArray(); private SparseIntArray lastSeenMsgs = new SparseIntArray();
@NonNull @NonNull
...@@ -199,25 +201,34 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> { ...@@ -199,25 +201,34 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
_update(); _update();
} }
public int activity(int bufferid) { public ObservableInt activity(int bufferid) {
assertNotNull(activities); assertNotNull(activities);
ensureExistingActivity(bufferid);
return activities.get(bufferid, 0); return activities.get(bufferid);
} }
public void setActivity(int bufferid, int activity) { public void setActivity(int bufferid, int activity) {
assertNotNull(activities); assertNotNull(activities);
ensureExistingActivity(bufferid);
activities.put(bufferid, activity); activities.get(bufferid).set(activity);
}
private void ensureExistingActivity(int bufferid) {
if (activities.get(bufferid) == null)
activities.put(bufferid, new ObservableInt());
} }
public void addActivity(int bufferid, int activity) { public void addActivity(int bufferid, int activity) {
assertNotNull(activities); assertNotNull(activities);
ensureExistingActivity(bufferid);
activities.put(bufferid, activities.get(bufferid) | activity); activities.get(bufferid).set(activities.get(bufferid).get() | activity);
} }
public void addActivity(int bufferid, @NonNull Message.Type type) { public void addActivity(int bufferid, @NonNull Message.Type type) {
ensureExistingActivity(bufferid);
addActivity(bufferid, type.value); addActivity(bufferid, type.value);
} }
......
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
package de.kuschku.libquassel.syncables.types.interfaces; package de.kuschku.libquassel.syncables.types.interfaces;
import android.databinding.ObservableInt;
import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.syncables.Synced; import de.kuschku.libquassel.syncables.Synced;
...@@ -95,7 +97,7 @@ public interface QBufferSyncer extends QObservable { ...@@ -95,7 +97,7 @@ public interface QBufferSyncer extends QObservable {
void _markBufferAsRead(int buffer); void _markBufferAsRead(int buffer);
int activity(int bufferid); ObservableInt activity(int bufferid);
void setActivity(int bufferid, int activity); void setActivity(int bufferid, int activity);
......
/*
* 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;
import android.databinding.Observable;
import android.databinding.ObservableInt;
import android.view.View;
import android.widget.TextView;
import com.google.common.base.Function;
import java.util.HashSet;
import java.util.Set;
public class ViewIntBinder {
private final ObservableInt field;
private Set<Observable.OnPropertyChangedCallback> callbacks = new HashSet<>();
public ViewIntBinder(ObservableInt field) {
this.field = field;
}
public void bindBackgroundColor(View v, Function<Integer, Integer> mapper) {
v.setBackgroundColor(mapper.apply(field.get()));
Observable.OnPropertyChangedCallback callback = new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
v.setBackgroundColor(mapper.apply(field.get()));
}
};
callbacks.add(callback);
field.addOnPropertyChangedCallback(callback);
}
public void bindTextColor(TextView v, Function<Integer, Integer> mapper) {
v.setTextColor(mapper.apply(field.get()));
Observable.OnPropertyChangedCallback callback = new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
v.setTextColor(mapper.apply(field.get()));
}
};
callbacks.add(callback);
field.addOnPropertyChangedCallback(callback);
}
public void unbind() {
for (Observable.OnPropertyChangedCallback callback : callbacks) {
field.removeOnPropertyChangedCallback(callback);
}
}
}
...@@ -26,6 +26,7 @@ import android.databinding.ObservableField; ...@@ -26,6 +26,7 @@ import android.databinding.ObservableField;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable;
import android.support.annotation.LayoutRes; import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
...@@ -33,6 +34,7 @@ import android.widget.LinearLayout; ...@@ -33,6 +34,7 @@ import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.bignerdranch.expandablerecyclerview.ViewHolder.ChildViewHolder; import com.bignerdranch.expandablerecyclerview.ViewHolder.ChildViewHolder;
import com.google.common.base.Function;
import com.mikepenz.materialize.util.UIUtils; import com.mikepenz.materialize.util.UIUtils;
import java.util.Locale; import java.util.Locale;
...@@ -43,10 +45,12 @@ import de.kuschku.libquassel.events.BufferChangeEvent; ...@@ -43,10 +45,12 @@ import de.kuschku.libquassel.events.BufferChangeEvent;
import de.kuschku.libquassel.localtypes.buffers.Buffer; import de.kuschku.libquassel.localtypes.buffers.Buffer;
import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer; import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
import de.kuschku.libquassel.localtypes.buffers.QueryBuffer; import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.R;
import de.kuschku.quasseldroid_ng.ui.ViewIntBinder;
import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
public class BufferViewHolder extends ChildViewHolder { public class BufferViewHolder extends ChildViewHolder {
...@@ -65,6 +69,7 @@ public class BufferViewHolder extends ChildViewHolder { ...@@ -65,6 +69,7 @@ public class BufferViewHolder extends ChildViewHolder {
private ObservableField<BufferInfo.BufferStatus> status; private ObservableField<BufferInfo.BufferStatus> status;
private Observable.OnPropertyChangedCallback callback; private Observable.OnPropertyChangedCallback callback;
private AppContext context; private AppContext context;
private ViewIntBinder viewIntBinder;
private StateListDrawable background; private StateListDrawable background;
...@@ -89,6 +94,9 @@ public class BufferViewHolder extends ChildViewHolder { ...@@ -89,6 +94,9 @@ public class BufferViewHolder extends ChildViewHolder {
status.removeOnPropertyChangedCallback(callback); status.removeOnPropertyChangedCallback(callback);
status = buffer.getStatus(); status = buffer.getStatus();
name.setText(buffer.getName()); name.setText(buffer.getName());
if (viewIntBinder != null) viewIntBinder.unbind();
viewIntBinder = new ViewIntBinder(context.client().bufferSyncer().activity(buffer.getInfo().id()));
viewIntBinder.bindTextColor(name, colorFromActivityStatus(buffer));
setDescription(context.deserializer().formatString(getDescription(buffer))); setDescription(context.deserializer().formatString(getDescription(buffer)));
setBadge(0); setBadge(0);
itemView.setOnClickListener(v -> listener.onClick(buffer)); itemView.setOnClickListener(v -> listener.onClick(buffer));
...@@ -110,6 +118,20 @@ public class BufferViewHolder extends ChildViewHolder { ...@@ -110,6 +118,20 @@ public class BufferViewHolder extends ChildViewHolder {
setSelected(); setSelected();
} }
@NonNull
private Function<Integer, Integer> colorFromActivityStatus(Buffer buffer) {
return activities -> {
int filters = context.client().backlogManager().filter(buffer.getInfo().id()).getFilters();
activities = activities & ~filters;
if (0 != ((activities & Message.Type.Plain.value) | (activities & Message.Type.Notice.value) | (activities & Message.Type.Action.value)))
return context.themeUtil().res.colorTintMessage;
if (0 != activities)
return context.themeUtil().res.colorTintActivity;
else
return context.themeUtil().res.colorForeground;
};
}
private void setSelected() { private void setSelected() {
setSelected(context.client().backlogManager().open() == id); setSelected(context.client().backlogManager().open() == id);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment