Setup wizard for new users
This commit is contained in:
@@ -34,6 +34,14 @@
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="i2p.bote.android.EmailListActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".intro.SetupActivity"
|
||||
android:label="@string/title_activity_setup"
|
||||
android:parentActivityName=".EmailListActivity" >
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="i2p.bote.android.EmailListActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ViewEmailActivity"
|
||||
android:parentActivityName=".EmailListActivity" />
|
||||
|
||||
@@ -36,6 +36,7 @@ import i2p.bote.I2PBote;
|
||||
import i2p.bote.android.addressbook.AddressBookActivity;
|
||||
import i2p.bote.android.config.SettingsActivity;
|
||||
import i2p.bote.android.intro.IntroActivity;
|
||||
import i2p.bote.android.intro.SetupActivity;
|
||||
import i2p.bote.android.service.BoteService;
|
||||
import i2p.bote.android.service.Init;
|
||||
import i2p.bote.android.service.Init.RouterChoice;
|
||||
@@ -66,8 +67,9 @@ public class EmailListActivity extends ActionBarActivity implements
|
||||
private static final String PREF_FIRST_START = "firstStart";
|
||||
private static final String ACTIVE_FOLDER = "activeFolder";
|
||||
|
||||
private static final int RUN_SETUP_WIZARD = 1;
|
||||
private static final int REQUEST_START_I2P = 2;
|
||||
private static final int SHOW_INTRODUCTION = 1;
|
||||
private static final int RUN_SETUP = 2;
|
||||
private static final int REQUEST_START_I2P = 3;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -217,7 +219,7 @@ public class EmailListActivity extends ActionBarActivity implements
|
||||
if (true || mSharedPrefs.getBoolean(PREF_FIRST_START, true)) {
|
||||
mSharedPrefs.edit().putBoolean(PREF_FIRST_START, false).apply();
|
||||
Intent i = new Intent(EmailListActivity.this, IntroActivity.class);
|
||||
startActivityForResult(i, RUN_SETUP_WIZARD);
|
||||
startActivityForResult(i, SHOW_INTRODUCTION);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,10 +368,15 @@ public class EmailListActivity extends ActionBarActivity implements
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == RUN_SETUP_WIZARD) {
|
||||
if (requestCode == SHOW_INTRODUCTION) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
// TODO remove (and implement a UI tutorial?)
|
||||
Toast.makeText(this, "Setup wizard not yet implemented.", Toast.LENGTH_SHORT).show();
|
||||
Intent i = new Intent(EmailListActivity.this, SetupActivity.class);
|
||||
startActivityForResult(i, RUN_SETUP);
|
||||
}
|
||||
} else if (requestCode == RUN_SETUP) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
// TODO implement a UI tutorial?
|
||||
Toast.makeText(this, "Setup complete.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
} else if (requestCode == REQUEST_START_I2P) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
|
||||
@@ -31,6 +31,7 @@ public class EditIdentityActivity extends ActionBarActivity implements
|
||||
public void onTaskFinished() {
|
||||
Toast.makeText(this, R.string.identity_saved,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
setResult(RESULT_OK);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ public class SetPasswordActivity extends ActionBarActivity implements
|
||||
public void onTaskFinished() {
|
||||
Toast.makeText(this, R.string.password_changed,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
setResult(RESULT_OK);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
123
app/src/main/java/i2p/bote/android/intro/SetupActivity.java
Normal file
123
app/src/main/java/i2p/bote/android/intro/SetupActivity.java
Normal file
@@ -0,0 +1,123 @@
|
||||
package i2p.bote.android.intro;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
|
||||
import i2p.bote.android.R;
|
||||
import i2p.bote.android.config.EditIdentityActivity;
|
||||
import i2p.bote.android.config.SetPasswordActivity;
|
||||
|
||||
public class SetupActivity extends ActionBarActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_setup);
|
||||
if (savedInstanceState == null) {
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.add(R.id.container, new SetPasswordFragment())
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set password.
|
||||
*/
|
||||
public static class SetPasswordFragment extends Fragment {
|
||||
private static final int SET_PASSWORD = 1;
|
||||
|
||||
public SetPasswordFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_setup_set_password, container, false);
|
||||
((Button)rootView.findViewById(R.id.button_set_password)).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent i = new Intent(getActivity(), SetPasswordActivity.class);
|
||||
startActivityForResult(i, SET_PASSWORD);
|
||||
}
|
||||
});
|
||||
((Button)rootView.findViewById(R.id.button_skip)).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
nextPage();
|
||||
}
|
||||
});
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == SET_PASSWORD) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
nextPage();
|
||||
}
|
||||
} else {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
getFragmentManager().beginTransaction()
|
||||
.replace(R.id.container, new CreateIdentityFragment())
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create identity.
|
||||
*/
|
||||
public static class CreateIdentityFragment extends Fragment {
|
||||
private static final int CREATE_IDENTITY = 1;
|
||||
|
||||
public CreateIdentityFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_setup_create_identity, container, false);
|
||||
((Button)rootView.findViewById(R.id.button_set_password)).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent i = new Intent(getActivity(), EditIdentityActivity.class);
|
||||
startActivityForResult(i, CREATE_IDENTITY);
|
||||
}
|
||||
});
|
||||
((Button)rootView.findViewById(R.id.button_skip)).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
nextPage();
|
||||
}
|
||||
});
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == CREATE_IDENTITY) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
nextPage();
|
||||
}
|
||||
} else {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
// TODO have a "finished" page?
|
||||
getActivity().setResult(RESULT_OK);
|
||||
getActivity().finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
7
app/src/main/res/layout/activity_setup.xml
Normal file
7
app/src/main/res/layout/activity_setup.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="i2p.bote.android.intro.SetupActivity"
|
||||
tools:ignore="MergeRootFrame" />
|
||||
72
app/src/main/res/layout/fragment_setup_create_identity.xml
Normal file
72
app/src/main/res/layout/fragment_setup_create_identity.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
tools:context="i2p.bote.android.intro.SetupActivity.SetPasswordFragment">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:id="@+id/textView"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:text="@string/create_identity" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:id="@+id/textView2"
|
||||
android:layout_below="@+id/textView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin"
|
||||
android:text="@string/setup_create_identity_1" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/setup_create_identity_2"
|
||||
android:id="@+id/textView3"
|
||||
android:layout_below="@+id/textView2"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/setup_create_identity_3"
|
||||
android:id="@+id/textView4"
|
||||
android:layout_below="@+id/textView3"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/create_identity"
|
||||
android:id="@+id/button_set_password"
|
||||
android:layout_below="@+id/textView4"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/skip"
|
||||
android:id="@+id/button_skip"
|
||||
android:layout_alignTop="@+id/button_set_password"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true" />
|
||||
</RelativeLayout>
|
||||
72
app/src/main/res/layout/fragment_setup_set_password.xml
Normal file
72
app/src/main/res/layout/fragment_setup_set_password.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
tools:context="i2p.bote.android.intro.SetupActivity.SetPasswordFragment">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:id="@+id/textView"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:text="@string/set_password" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/setup_set_password_1"
|
||||
android:id="@+id/textView2"
|
||||
android:layout_below="@+id/textView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/setup_set_password_2"
|
||||
android:id="@+id/textView3"
|
||||
android:layout_below="@+id/textView2"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/setup_set_password_3"
|
||||
android:id="@+id/textView4"
|
||||
android:layout_below="@+id/textView3"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/set_password"
|
||||
android:id="@+id/button_set_password"
|
||||
android:layout_below="@+id/textView4"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/skip"
|
||||
android:id="@+id/button_skip"
|
||||
android:layout_alignTop="@+id/button_set_password"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true" />
|
||||
</RelativeLayout>
|
||||
@@ -16,6 +16,16 @@
|
||||
<string name="intro_4_1">Because Bote is a little different to traditional email, there are a few things to set up before you can start using it.</string>
|
||||
<string name="intro_4_2">The setup wizard will take a couple of minutes, and then everything will be ready.</string>
|
||||
<string name="lets_get_started">Let\'s Get Started</string>
|
||||
<string name="title_activity_setup">Setup</string>
|
||||
<string name="skip">Skip</string>
|
||||
<string name="set_password">Set password</string>
|
||||
<string name="setup_set_password_1">You can set a password for Bote. This will prevent other users from reading your emails, and will encrypt all files on-disk.</string>
|
||||
<string name="setup_set_password_2">If you set a password, automatic email checking will be disabled. You can manually check for emails once you have authenticated by pulling down on the Inbox.</string>
|
||||
<string name="setup_set_password_3">If you do not set a password now, you can do so later from the Settings menu.</string>
|
||||
<string name="create_identity">Create identity</string>
|
||||
<string name="setup_create_identity_1">To receive emails, you need an Identity. This is a set of cryptographic keys that enables you to encrypt and decrypt emails.</string>
|
||||
<string name="setup_create_identity_2">A Destination is the public part of an Identity. This is the address that you will give to your contacts so they can send emails to you. When you send emails using an Identity, its Destination is included in the From field so the recipient can reply.</string>
|
||||
<string name="setup_create_identity_3">If you do not create an Identity now, you can do so later from the Settings menu. If you only want to send emails, you do not need an Identity, because Bote emails can be sent anonymously. However the recipient will be unable to reply to you.</string>
|
||||
<string name="action_new_email">New email</string>
|
||||
<string name="action_send_email">Send email</string>
|
||||
<string name="action_start_bote">Connect to network</string>
|
||||
|
||||
Reference in New Issue
Block a user