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

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
</vector>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_group_reveal_onboarding"
android:icon="@drawable/ic_info_white"
android:title="@string/show_onboarding"
app:showAsAction="always"/>
</menu>

View File

@@ -80,6 +80,7 @@
<string name="no_data">No data</string>
<string name="ellipsis"></string>
<string name="text_too_long">The entered text is too long</string>
<string name="show_onboarding">Show Help Dialog</string>
<!-- Contacts and Private Conversations-->
<string name="no_contacts">It seems that you are new here and have no contacts yet.\n\nTap the + icon at the top and follow the instructions to add some friends to your list.\n\nPlease remember: You can only add new contacts face-to-face to prevent anyone from impersonating you or reading your messages in the future.</string>
@@ -196,6 +197,7 @@
<!-- Private Groups Revealing Contacts -->
<string name="groups_reveal_contacts">Reveal Contacts</string>
<string name="groups_reveal_dialog_message">You can choose whether to reveal contacts to all current and future members of this group.\n\nRevealing contacts makes your connection to the group faster and more reliable, because you can communicate with revealed contacts even when the creator of the group is offline.</string>
<string name="groups_reveal_visible">Your relationship is visible to the group</string>
<string name="groups_reveal_visible_revealed_by_us">Your relationship is visible to the group (revealed by you)</string>
<string name="groups_reveal_visible_revealed_by_contact">Your relationship is visible to the group (revealed by contact)</string>

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) {