Wait for layout before showing onboarding tap target.

This commit is contained in:
akwizgran
2021-04-19 10:01:48 +01:00
parent 2ddb7b5b64
commit 2d4e7a9fb0

View File

@@ -9,6 +9,7 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
@@ -166,13 +167,21 @@ public class NavDrawerActivity extends BriarActivity implements
drawerLayout.addDrawerListener(drawerToggle);
navigation.setNavigationItemSelectedListener(this);
// Wait for the drawer to be laid out before trying to position the
// onboarding tap target
drawerLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
drawerLayout.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
observeTransportsOnboarding();
}
});
initializeTransports();
transportsView.setAdapter(transportsAdapter);
observeOnce(navDrawerViewModel.showTransportsOnboarding(), this, show ->
observeOnce(torIcon, this, imageView ->
showTransportsOnboarding(show, imageView)));
lockManager.isLockable().observe(this, this::setLockVisible);
if (lifecycleManager.getLifecycleState().isAfter(RUNNING)) {
@@ -184,6 +193,16 @@ public class NavDrawerActivity extends BriarActivity implements
}
}
private void observeTransportsOnboarding() {
observeOnce(navDrawerViewModel.showTransportsOnboarding(), this,
show -> {
if (show) {
observeOnce(torIcon, this,
this::showTransportsOnboarding);
}
});
}
@Override
public void onStart() {
super.onStart();
@@ -452,22 +471,20 @@ public class NavDrawerActivity extends BriarActivity implements
return transport;
}
private void showTransportsOnboarding(boolean show, ImageView imageView) {
if (show) {
int color = resolveColorAttribute(this, R.attr.colorControlNormal);
Drawable drawable = VectorDrawableCompat
.create(getResources(), R.drawable.transport_tor, null);
new MaterialTapTargetPrompt.Builder(NavDrawerActivity.this,
R.style.OnboardingDialogTheme).setTarget(imageView)
.setPrimaryText(R.string.network_settings_title)
.setSecondaryText(R.string.transports_onboarding_text)
.setIconDrawable(drawable)
.setIconDrawableColourFilter(color)
.setBackgroundColour(
ContextCompat.getColor(this, R.color.briar_primary))
.show();
navDrawerViewModel.transportsOnboardingShown();
}
private void showTransportsOnboarding(ImageView imageView) {
int color = resolveColorAttribute(this, R.attr.colorControlNormal);
Drawable drawable = VectorDrawableCompat
.create(getResources(), R.drawable.transport_tor, null);
new MaterialTapTargetPrompt.Builder(NavDrawerActivity.this,
R.style.OnboardingDialogTheme).setTarget(imageView)
.setPrimaryText(R.string.network_settings_title)
.setSecondaryText(R.string.transports_onboarding_text)
.setIconDrawable(drawable)
.setIconDrawableColourFilter(color)
.setBackgroundColour(
ContextCompat.getColor(this, R.color.briar_primary))
.show();
navDrawerViewModel.transportsOnboardingShown();
}
private static class Transport {