improvements after code review #1

fix
This commit is contained in:
Ernir Erlingsson
2017-04-24 23:34:34 +02:00
parent 044719432a
commit 5f4e1ecdfd
5 changed files with 22 additions and 30 deletions

View File

@@ -66,31 +66,29 @@ public class ThreadItemAdapter<I extends ThreadItem>
revision++;
}
void setBottomItem(MessageId messageId) {
// Useful when the adapter has not calculated the dimension yet
void postSetItemWithIdVisible(@Nullable final MessageId messageId) {
new Handler().post(new Runnable() {
@Override
public void run() {
setItemWithIdVisible(messageId);
}
});
}
void setItemWithIdVisible(@Nullable MessageId messageId) {
if (messageId != null) {
int pos = 0;
for (I item : items) {
if (item.getId().equals(messageId)) {
scrollToPosition(pos);
layoutManager.scrollToPosition(pos);
break;
}
pos++;
}
}
}
private void scrollToPosition(final int pos) {
// Post call ensures that the list scrolls AFTER it has been propagated
// and the layout has been calculated.
handler.post(new Runnable() {
@Override
public void run() {
layoutManager.scrollToPosition(pos);
}
});
}
public void setItems(Collection<I> items) {
this.items.clear();
this.items.addAll(items);

View File

@@ -148,7 +148,8 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
}
@Override
public MessageId getBottomVisibleMessageId() {
@Nullable
public MessageId getLastVisibleMessageId() {
if (layoutManager != null && adapter != null) {
int position =
layoutManager.findLastCompletelyVisibleItemPosition();
@@ -190,7 +191,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
list.showData();
} else {
adapter.setItems(items);
adapter.setBottomItem(
adapter.postSetItemWithIdVisible(
items.getBottomVisibleItemId());
list.showData();
updateTextInput(replyId);

View File

@@ -42,7 +42,7 @@ public interface ThreadListController<G extends NamedGroup, I extends ThreadItem
void deleteNamedGroup(ExceptionHandler<DbException> handler);
interface ThreadListListener<H> extends DestroyableContext {
interface ThreadListListener<H> extends ThreadListDataSource {
@UiThread
void onHeaderReceived(H header);
@@ -53,10 +53,10 @@ public interface ThreadListController<G extends NamedGroup, I extends ThreadItem
void onInvitationAccepted(ContactId c);
}
interface ThreadListDataSource {
interface ThreadListDataSource extends DestroyableContext {
@UiThread @Nullable
MessageId getBottomVisibleMessageId();
MessageId getLastVisibleMessageId();
}
}

View File

@@ -59,7 +59,6 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
protected volatile L listener;
@Inject
MessageTracker messageTracker;
private ThreadListDataSource source;
protected ThreadListControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, IdentityManager identityManager,
@@ -83,13 +82,6 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
@Override
public void onActivityCreate(Activity activity) {
listener = (L) activity;
if (activity instanceof ThreadListDataSource) {
source = (ThreadListDataSource) activity;
} else {
throw new ClassCastException(
"Activity " + activity.getClass().getSimpleName() +
" must implement ThreadListDataSource");
}
}
@CallSuper
@@ -111,9 +103,10 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
try {
messageTracker
.storeMessageId(groupId,
source.getBottomVisibleMessageId());
listener.getLastVisibleMessageId());
} catch (DbException e) {
e.printStackTrace();
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
}
}