Add onboarding dialog for revealing contacts screen

This commit is contained in:
Torsten Grote
2016-11-11 15:35:24 -02:00
parent efbce95399
commit ed728e816e
6 changed files with 139 additions and 1 deletions

View File

@@ -1,9 +1,13 @@
package org.briarproject.android.privategroup.reveal;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
@@ -13,6 +17,7 @@ import org.briarproject.R;
import org.briarproject.android.ActivityComponent;
import org.briarproject.android.contactselection.ContactSelectorActivity;
import org.briarproject.android.controller.handler.UiExceptionHandler;
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.db.DbException;
import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
@@ -67,17 +72,75 @@ public class RevealContactsActivity extends ContactSelectorActivity
return R.layout.activity_reveal_contacts;
}
@Override
public void onStart() {
super.onStart();
controller.isOnboardingNeeded(
new UiResultExceptionHandler<Boolean, DbException>(this) {
@Override
public void onResultUi(Boolean show) {
if (show) showOnboardingDialog();
}
@Override
public void onExceptionUi(DbException exception) {
// TODO proper error handling
finish();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.group_reveal_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
case R.id.action_group_reveal_onboarding:
showOnboardingDialog();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void showOnboardingDialog() {
new AlertDialog.Builder(this, R.style.BriarDialogTheme)
.setMessage(getString(R.string.groups_reveal_dialog_message))
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
onboardingShown();
}
})
.show();
}
private void onboardingShown() {
controller.onboardingShown(
new UiExceptionHandler<DbException>(this) {
@Override
public void onExceptionUi(DbException exception) {
// TODO proper error handling
}
});
}
@Override
public void contactsSelected(Collection<ContactId> contacts) {
super.contactsSelected(contacts);

View File

@@ -2,6 +2,7 @@ package org.briarproject.android.privategroup.reveal;
import org.briarproject.android.contactselection.ContactSelectorController;
import org.briarproject.android.controller.handler.ExceptionHandler;
import org.briarproject.android.controller.handler.ResultExceptionHandler;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.db.DbException;
import org.briarproject.api.nullsafety.NotNullByDefault;
@@ -13,6 +14,11 @@ import java.util.Collection;
public interface RevealContactsController
extends ContactSelectorController<RevealableContactItem> {
void isOnboardingNeeded(
ResultExceptionHandler<Boolean, DbException> handler);
void onboardingShown(ExceptionHandler<DbException> handler);
void reveal(GroupId g, Collection<ContactId> contacts,
ExceptionHandler<DbException> handler);

View File

@@ -14,6 +14,8 @@ import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.privategroup.GroupMember;
import org.briarproject.api.privategroup.PrivateGroupManager;
import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
import org.briarproject.api.settings.Settings;
import org.briarproject.api.settings.SettingsManager;
import org.briarproject.api.sync.GroupId;
import java.util.ArrayList;
@@ -26,6 +28,7 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import static org.briarproject.android.fragment.SettingsFragment.SETTINGS_NAMESPACE;
import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
@Immutable
@@ -35,20 +38,24 @@ public class RevealContactsControllerImpl extends DbControllerImpl
private static final Logger LOG =
Logger.getLogger(RevealContactsControllerImpl.class.getName());
private static final String SHOW_ONBOARDING_REVEAL_CONTACTS =
"showOnboardingRevealContacts";
private final PrivateGroupManager groupManager;
private final GroupInvitationManager groupInvitationManager;
private final ContactManager contactManager;
private final SettingsManager settingsManager;
@Inject
public RevealContactsControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, PrivateGroupManager groupManager,
GroupInvitationManager groupInvitationManager,
ContactManager contactManager) {
ContactManager contactManager, SettingsManager settingsManager) {
super(dbExecutor, lifecycleManager);
this.groupManager = groupManager;
this.groupInvitationManager = groupInvitationManager;
this.contactManager = contactManager;
this.settingsManager = settingsManager;
}
@Override
@@ -95,6 +102,45 @@ public class RevealContactsControllerImpl extends DbControllerImpl
return items;
}
@Override
public void isOnboardingNeeded(
final ResultExceptionHandler<Boolean, DbException> handler) {
runOnDbThread(new Runnable() {
@Override
public void run() {
try {
Settings settings =
settingsManager.getSettings(SETTINGS_NAMESPACE);
handler.onResult(
settings.getBoolean(SHOW_ONBOARDING_REVEAL_CONTACTS,
true));
} catch (DbException e) {
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
handler.onException(e);
}
}
});
}
@Override
public void onboardingShown(ExceptionHandler<DbException> handler) {
runOnDbThread(new Runnable() {
@Override
public void run() {
try {
Settings settings = new Settings();
settings.putBoolean(SHOW_ONBOARDING_REVEAL_CONTACTS, false);
settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE);
} catch (DbException e) {
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
}
}
});
}
@Override
public void reveal(final GroupId g, final Collection<ContactId> contacts,
final ExceptionHandler<DbException> handler) {