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
Branches
Tags
No related merge requests found
......@@ -138,6 +138,7 @@ public class BacklogFilter implements UICallback {
public void onEventMainThread(@NonNull MessageInsertEvent event) {
filtered.add(event.msg);
client.bufferSyncer().addActivity(event.msg);
}
public void onEventMainThread(@NonNull MessageRemoveEvent event) {
......
......@@ -21,8 +21,10 @@
package de.kuschku.libquassel.syncables.types.impl;
import android.databinding.ObservableInt;
import android.support.annotation.NonNull;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseIntArray;
import java.util.Map;
......@@ -42,7 +44,7 @@ import static de.kuschku.util.AndroidAssert.assertNotNull;
public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
@NonNull
private final SparseIntArray activities = new SparseIntArray();
private final SparseArray<ObservableInt> activities = new SparseArray<>();
@NonNull
private SparseIntArray lastSeenMsgs = new SparseIntArray();
@NonNull
......@@ -199,25 +201,34 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
_update();
}
public int activity(int bufferid) {
public ObservableInt activity(int bufferid) {
assertNotNull(activities);
ensureExistingActivity(bufferid);
return activities.get(bufferid, 0);
return activities.get(bufferid);
}
public void setActivity(int bufferid, int activity) {
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) {
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) {
ensureExistingActivity(bufferid);
addActivity(bufferid, type.value);
}
......
......@@ -21,6 +21,8 @@
package de.kuschku.libquassel.syncables.types.interfaces;
import android.databinding.ObservableInt;
import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.syncables.Synced;
......@@ -95,7 +97,7 @@ public interface QBufferSyncer extends QObservable {
void _markBufferAsRead(int buffer);
int activity(int bufferid);
ObservableInt activity(int bufferid);
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;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.StateListDrawable;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ImageView;
......@@ -33,6 +34,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.bignerdranch.expandablerecyclerview.ViewHolder.ChildViewHolder;
import com.google.common.base.Function;
import com.mikepenz.materialize.util.UIUtils;
import java.util.Locale;
......@@ -43,10 +45,12 @@ import de.kuschku.libquassel.events.BufferChangeEvent;
import de.kuschku.libquassel.localtypes.buffers.Buffer;
import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
import de.kuschku.quasseldroid_ng.R;
import de.kuschku.quasseldroid_ng.ui.ViewIntBinder;
import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
public class BufferViewHolder extends ChildViewHolder {
......@@ -65,6 +69,7 @@ public class BufferViewHolder extends ChildViewHolder {
private ObservableField<BufferInfo.BufferStatus> status;
private Observable.OnPropertyChangedCallback callback;
private AppContext context;
private ViewIntBinder viewIntBinder;
private StateListDrawable background;
......@@ -89,6 +94,9 @@ public class BufferViewHolder extends ChildViewHolder {
status.removeOnPropertyChangedCallback(callback);
status = buffer.getStatus();
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)));
setBadge(0);
itemView.setOnClickListener(v -> listener.onClick(buffer));
......@@ -110,6 +118,20 @@ public class BufferViewHolder extends ChildViewHolder {
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() {
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