mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-14 03:39:05 +01:00
Show which contacts subscribe to each forum. Dev task #79.
This commit is contained in:
@@ -1,17 +1,21 @@
|
||||
package org.briarproject.android.groups;
|
||||
|
||||
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
||||
import static android.view.Gravity.CENTER;
|
||||
import static android.view.Gravity.CENTER_HORIZONTAL;
|
||||
import static android.view.View.GONE;
|
||||
import static android.view.View.VISIBLE;
|
||||
import static android.widget.LinearLayout.HORIZONTAL;
|
||||
import static android.widget.LinearLayout.VERTICAL;
|
||||
import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
|
||||
import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -25,22 +29,29 @@ import org.briarproject.api.Contact;
|
||||
import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.db.DatabaseComponent;
|
||||
import org.briarproject.api.db.DbException;
|
||||
import org.briarproject.api.event.Event;
|
||||
import org.briarproject.api.event.EventListener;
|
||||
import org.briarproject.api.event.LocalSubscriptionsUpdatedEvent;
|
||||
import org.briarproject.api.event.RemoteSubscriptionsUpdatedEvent;
|
||||
import org.briarproject.api.messaging.Group;
|
||||
import org.briarproject.api.messaging.GroupId;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class ConfigureGroupActivity extends BriarActivity
|
||||
implements OnClickListener, NoContactsDialog.Listener,
|
||||
implements OnClickListener, EventListener, NoContactsDialog.Listener,
|
||||
SelectContactsDialog.Listener {
|
||||
|
||||
private static final Logger LOG =
|
||||
@@ -51,6 +62,8 @@ SelectContactsDialog.Listener {
|
||||
private RadioGroup radioGroup = null;
|
||||
private RadioButton visibleToAll = null, visibleToSome = null;
|
||||
private Button doneButton = null;
|
||||
private TextView subscribers = null;
|
||||
private TextView subscriberNames = null;
|
||||
private ProgressBar progress = null;
|
||||
private boolean changed = false;
|
||||
|
||||
@@ -86,6 +99,32 @@ SelectContactsDialog.Listener {
|
||||
int pad = LayoutUtils.getPadding(this);
|
||||
layout.setPadding(pad, pad, pad, pad);
|
||||
|
||||
subscribers = new TextView(this);
|
||||
subscribers.setGravity(CENTER);
|
||||
subscribers.setTextSize(18);
|
||||
subscribers.setText("\u2026");
|
||||
layout.addView(subscribers);
|
||||
|
||||
subscriberNames = new TextView(this);
|
||||
subscriberNames.setGravity(CENTER);
|
||||
subscriberNames.setTextSize(18);
|
||||
subscriberNames.setVisibility(GONE);
|
||||
layout.addView(subscriberNames);
|
||||
|
||||
LinearLayout warning = new LinearLayout(this);
|
||||
warning.setOrientation(HORIZONTAL);
|
||||
warning.setPadding(pad, pad, pad, pad);
|
||||
|
||||
ImageView icon = new ImageView(this);
|
||||
icon.setImageResource(R.drawable.action_about);
|
||||
warning.addView(icon);
|
||||
|
||||
TextView publicSpace = new TextView(this);
|
||||
publicSpace.setPadding(pad, 0, 0, 0);
|
||||
publicSpace.setText(R.string.public_space_warning);
|
||||
warning.addView(publicSpace);
|
||||
layout.addView(warning);
|
||||
|
||||
subscribeCheckBox = new CheckBox(this);
|
||||
subscribeCheckBox.setId(1);
|
||||
subscribeCheckBox.setText(R.string.subscribe_to_this_forum);
|
||||
@@ -129,6 +168,65 @@ SelectContactsDialog.Listener {
|
||||
setContentView(layout);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
db.addListener(this);
|
||||
loadSubscribers();
|
||||
}
|
||||
|
||||
private void loadSubscribers() {
|
||||
runOnDbThread(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
long now = System.currentTimeMillis();
|
||||
Collection<Contact> contacts = db.getSubscribers(groupId);
|
||||
long duration = System.currentTimeMillis() - now;
|
||||
if(LOG.isLoggable(INFO))
|
||||
LOG.info("Load took " + duration + " ms");
|
||||
displaySubscribers(contacts);
|
||||
} catch(DbException e) {
|
||||
if(LOG.isLoggable(WARNING))
|
||||
LOG.log(WARNING, e.toString(), e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void displaySubscribers(final Collection<Contact> contacts) {
|
||||
runOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
if(contacts.isEmpty()) {
|
||||
subscribers.setText(R.string.no_subscribers);
|
||||
subscriberNames.setVisibility(GONE);
|
||||
} else {
|
||||
int count = contacts.size();
|
||||
Resources res = getResources();
|
||||
String title = res.getQuantityString(R.plurals.subscribers,
|
||||
count, count);
|
||||
subscribers.setText(title);
|
||||
List<String> names = new ArrayList<String>();
|
||||
for(Contact c : contacts)
|
||||
names.add(c.getAuthor().getName());
|
||||
Collections.sort(names, String.CASE_INSENSITIVE_ORDER);
|
||||
StringBuilder s = new StringBuilder();
|
||||
for(int i = 0; i < count; i++) {
|
||||
s.append(names.get(i));
|
||||
if(i + 1 < count) s.append(", ");
|
||||
}
|
||||
subscriberNames.setText(s.toString());
|
||||
subscriberNames.setVisibility(VISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
db.removeListener(this);
|
||||
}
|
||||
|
||||
public void onClick(View view) {
|
||||
if(view == subscribeCheckBox) {
|
||||
changed = true;
|
||||
@@ -139,24 +237,24 @@ SelectContactsDialog.Listener {
|
||||
changed = true;
|
||||
} else if(view == visibleToSome) {
|
||||
changed = true;
|
||||
if(contacts == null) loadContacts();
|
||||
else displayContacts();
|
||||
if(contacts == null) loadVisibleContacts();
|
||||
else displayVisibleContacts();
|
||||
} else if(view == doneButton) {
|
||||
if(changed) {
|
||||
boolean subscribe = subscribeCheckBox.isChecked();
|
||||
boolean all = visibleToAll.isChecked();
|
||||
// Replace the button with a progress bar
|
||||
doneButton.setVisibility(GONE);
|
||||
progress.setVisibility(VISIBLE);
|
||||
// Update the blog in a background thread
|
||||
if(subscribe || subscribed) updateGroup(subscribe, all);
|
||||
// Update the group in a background thread
|
||||
boolean subscribe = subscribeCheckBox.isChecked();
|
||||
boolean all = visibleToAll.isChecked();
|
||||
updateGroup(subscribe, all);
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadContacts() {
|
||||
private void loadVisibleContacts() {
|
||||
runOnDbThread(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
@@ -166,7 +264,7 @@ SelectContactsDialog.Listener {
|
||||
long duration = System.currentTimeMillis() - now;
|
||||
if(LOG.isLoggable(INFO))
|
||||
LOG.info("Load took " + duration + " ms");
|
||||
displayContacts();
|
||||
displayVisibleContacts();
|
||||
} catch(DbException e) {
|
||||
if(LOG.isLoggable(WARNING))
|
||||
LOG.log(WARNING, e.toString(), e);
|
||||
@@ -175,7 +273,7 @@ SelectContactsDialog.Listener {
|
||||
});
|
||||
}
|
||||
|
||||
private void displayContacts() {
|
||||
private void displayVisibleContacts() {
|
||||
runOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
if(contacts.isEmpty()) {
|
||||
@@ -232,6 +330,16 @@ SelectContactsDialog.Listener {
|
||||
});
|
||||
}
|
||||
|
||||
public void eventOccurred(Event e) {
|
||||
if(e instanceof LocalSubscriptionsUpdatedEvent) {
|
||||
LOG.info("Local subscriptions updated, reloading");
|
||||
loadSubscribers();
|
||||
} else if(e instanceof RemoteSubscriptionsUpdatedEvent) {
|
||||
LOG.info("Remote subscriptions updated, reloading");
|
||||
loadSubscribers();
|
||||
}
|
||||
}
|
||||
|
||||
public void contactCreationSelected() {
|
||||
startActivity(new Intent(this, AddContactActivity.class));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user