Merge branch '1582-fix-climbing-snackbar' into 'master'

Fix climbing snackbar

Closes #1582

See merge request briar/briar!1223
This commit is contained in:
akwizgran
2020-03-03 14:42:20 +00:00

View File

@@ -61,7 +61,7 @@ import io.github.kobakei.materialfabspeeddial.FabSpeedDial.OnMenuItemClickListen
import static android.os.Build.VERSION.SDK_INT;
import static androidx.core.app.ActivityOptionsCompat.makeSceneTransitionAnimation;
import static androidx.core.view.ViewCompat.getTransitionName;
import static com.google.android.material.snackbar.Snackbar.LENGTH_INDEFINITE;
import static com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_INDEFINITE;
import static java.util.Objects.requireNonNull;
import static java.util.logging.Level.WARNING;
import static org.briarproject.bramble.util.LogUtils.logDuration;
@@ -87,7 +87,12 @@ public class ContactListFragment extends BaseFragment implements EventListener,
private ContactListAdapter adapter;
private BriarRecyclerView list;
private Snackbar snackbar;
/**
* The Snackbar is non-null when shown and null otherwise.
* Use {@link #showSnackBar()} and {@link #dismissSnackBar()} to interact.
*/
@Nullable
private Snackbar snackbar = null;
// Fields that are accessed from background threads must be volatile
@Inject
@@ -163,13 +168,6 @@ public class ContactListFragment extends BaseFragment implements EventListener,
list.setEmptyText(getString(R.string.no_contacts));
list.setEmptyAction(getString(R.string.no_contacts_action));
snackbar = new BriarSnackbarBuilder()
.setAction(R.string.show, v ->
startActivity(new Intent(getContext(),
PendingContactListActivity.class)))
.make(contentView, R.string.pending_contact_requests_snackbar,
LENGTH_INDEFINITE);
return contentView;
}
@@ -203,9 +201,9 @@ public class ContactListFragment extends BaseFragment implements EventListener,
listener.runOnDbThread(() -> {
try {
if (contactManager.getPendingContacts().isEmpty()) {
runOnUiThreadUnlessDestroyed(() -> snackbar.dismiss());
runOnUiThreadUnlessDestroyed(this::dismissSnackBar);
} else {
runOnUiThreadUnlessDestroyed(() -> snackbar.show());
runOnUiThreadUnlessDestroyed(this::showSnackBar);
}
} catch (DbException e) {
logException(LOG, WARNING, e);
@@ -220,6 +218,7 @@ public class ContactListFragment extends BaseFragment implements EventListener,
adapter.clear();
list.showProgressBar();
list.stopPeriodicUpdate();
dismissSnackBar();
}
private void loadContacts() {
@@ -315,4 +314,27 @@ public class ContactListFragment extends BaseFragment implements EventListener,
}
}
@UiThread
private void showSnackBar() {
if (snackbar != null) return;
View v = requireNonNull(getView());
int stringRes = R.string.pending_contact_requests_snackbar;
snackbar = new BriarSnackbarBuilder()
.setAction(R.string.show, view -> showPendingContactList())
.make(v, stringRes, LENGTH_INDEFINITE);
snackbar.show();
}
@UiThread
private void dismissSnackBar() {
if (snackbar == null) return;
snackbar.dismiss();
snackbar = null;
}
private void showPendingContactList() {
Intent i = new Intent(getContext(), PendingContactListActivity.class);
startActivity(i);
}
}