diff --git a/briar-android/res/layout-land/fragment_keyagreement_id.xml b/briar-android/res/layout-land/fragment_keyagreement_id.xml index 7234c7cef4dcad928dc1261506b55a7000ccd76a..155721bb4aa1f0fc0e73f47c13f3fb948c176abd 100644 --- a/briar-android/res/layout-land/fragment_keyagreement_id.xml +++ b/briar-android/res/layout-land/fragment_keyagreement_id.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="horizontal"> @@ -22,6 +23,7 @@ android:src="@drawable/qr_code_intro"/> <ScrollView + android:id="@+id/scrollView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"> @@ -37,22 +39,6 @@ android:paddingStart="@dimen/margin_activity_horizontal" android:paddingTop="@dimen/margin_activity_vertical"> - <TextView - style="@style/BriarTextBody" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/your_nickname" - android:visibility="gone"/> - - <Spinner - android:id="@+id/spinner" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/margin_medium" - android:background="@drawable/border_spinner" - android:spinnerMode="dropdown" - android:visibility="gone"/> - <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" @@ -65,7 +51,8 @@ android:layout_height="wrap_content" android:adjustViewBounds="true" android:padding="@dimen/margin_medium" - android:src="@drawable/qr_code_explanation"/> + android:src="@drawable/qr_code_explanation" + tools:ignore="ContentDescription"/> <TextView style="@style/BriarTextBody" diff --git a/briar-android/res/layout/fragment_keyagreement_id.xml b/briar-android/res/layout/fragment_keyagreement_id.xml index 31daffdd4f8bfa1d1b6d86356eb356cf334e77e2..73364e5c08585dae94e1635420df4f87c5f60093 100644 --- a/briar-android/res/layout/fragment_keyagreement_id.xml +++ b/briar-android/res/layout/fragment_keyagreement_id.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <ScrollView + android:id="@+id/scrollView" 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"> @@ -15,22 +17,6 @@ android:paddingStart="@dimen/margin_activity_horizontal" android:paddingTop="@dimen/margin_activity_vertical"> - <TextView - style="@style/BriarTextBody" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/your_nickname" - android:visibility="gone"/> - - <Spinner - android:id="@+id/spinner" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/margin_medium" - android:background="@drawable/border_spinner" - android:spinnerMode="dropdown" - android:visibility="gone"/> - <ImageView android:id="@+id/imageView" android:layout_width="match_parent" @@ -38,7 +24,8 @@ android:layout_marginTop="@dimen/margin_xlarge" android:adjustViewBounds="true" android:scaleType="fitCenter" - android:src="@drawable/qr_code_intro"/> + android:src="@drawable/qr_code_intro" + tools:ignore="ContentDescription"/> <LinearLayout android:layout_width="match_parent" diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java index 74fcd472ce33e524c97802f54260487040ace218..3e491d25b1682cab98db282b947efc34925183c6 100644 --- a/briar-android/src/org/briarproject/android/ActivityComponent.java +++ b/briar-android/src/org/briarproject/android/ActivityComponent.java @@ -23,7 +23,7 @@ import org.briarproject.android.introduction.ContactChooserFragment; import org.briarproject.android.introduction.IntroductionActivity; import org.briarproject.android.introduction.IntroductionMessageFragment; import org.briarproject.android.invitation.AddContactActivity; -import org.briarproject.android.keyagreement.ChooseIdentityFragment; +import org.briarproject.android.keyagreement.IntroFragment; import org.briarproject.android.keyagreement.KeyAgreementActivity; import org.briarproject.android.keyagreement.ShowQrCodeFragment; import org.briarproject.android.panic.PanicPreferencesActivity; @@ -110,7 +110,7 @@ public interface ActivityComponent { void inject(BlogListFragment fragment); void inject(FeedFragment fragment); void inject(MyBlogsFragment fragment); - void inject(ChooseIdentityFragment fragment); + void inject(IntroFragment fragment); void inject(ShowQrCodeFragment fragment); void inject(ContactChooserFragment fragment); void inject(ContactSelectorFragment fragment); diff --git a/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java b/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java deleted file mode 100644 index 3f2bc9f451bc82c4849a8cb0cc778b2bd5e0a58b..0000000000000000000000000000000000000000 --- a/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.briarproject.android.identity; - -import android.content.Context; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.SpinnerAdapter; -import android.widget.TextView; - -import org.briarproject.R; -import org.briarproject.api.crypto.CryptoComponent; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import im.delight.android.identicons.IdenticonDrawable; - -import static org.briarproject.android.identity.LocalAuthorItem.ANONYMOUS; -import static org.briarproject.android.identity.LocalAuthorItem.NEW; - -public class LocalAuthorSpinnerAdapter extends BaseAdapter - implements SpinnerAdapter { - - private final Context ctx; - private final boolean includeAnonymous; - private final List<LocalAuthorItem> list = new ArrayList<LocalAuthorItem>(); - - public LocalAuthorSpinnerAdapter(Context ctx, boolean includeAnonymous) { - this.ctx = ctx; - this.includeAnonymous = includeAnonymous; - } - - public void add(LocalAuthorItem item) { - list.add(item); - notifyDataSetChanged(); - } - - public void clear() { - list.clear(); - notifyDataSetChanged(); - } - - public int getCount() { - if (list.isEmpty()) return 0; - return includeAnonymous ? list.size() + 2 : list.size() + 1; - } - - @Override - public View getDropDownView(int position, View convertView, - ViewGroup parent) { - View view; - if (convertView == null) { - LayoutInflater inflater = - (LayoutInflater) ctx - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = inflater.inflate(R.layout.dropdown_author, parent, false); - } else - view = convertView; - - TextView name = (TextView) view.findViewById(R.id.nameView); - ImageView avatar = - (ImageView) view.findViewById(R.id.avatarView); - - LocalAuthorItem item = getItem(position); - if (item == ANONYMOUS) { - name.setText(R.string.anonymous); - avatar.setVisibility(View.INVISIBLE); - } else if (item == NEW) { - name.setText(R.string.new_identity_item); - avatar.setVisibility(View.INVISIBLE); - } else { - name.setText(item.getLocalAuthor().getName()); - avatar.setVisibility(View.VISIBLE); - avatar.setImageDrawable(new IdenticonDrawable( - item.getLocalAuthor().getId().getBytes())); - } - return view; - } - - public LocalAuthorItem getItem(int position) { - if (includeAnonymous) { - if (position == list.size()) return ANONYMOUS; - if (position == list.size() + 1) return NEW; - return list.get(position); - } else { - if (position == list.size()) return NEW; - return list.get(position); - } - } - - public long getItemId(int position) { - return android.R.layout.simple_spinner_item; - } - - public View getView(int position, View convertView, ViewGroup parent) { - View view = getDropDownView(position, convertView, parent); - Drawable d = ctx.getResources() - .getDrawable(R.drawable.ic_expand_more_black_24dp); - if (d != null) { - d.setColorFilter( - ctx.getResources().getColor(R.color.spinner_arrow), - PorterDuff.Mode.SRC_IN); - } - ((TextView) view.findViewById(R.id.nameView)) - .setCompoundDrawablesWithIntrinsicBounds(null, null, d, null); - return view; - } - - @Override - public boolean isEmpty() { - return list.isEmpty(); - } - - public void sort(Comparator<LocalAuthorItem> comparator) { - Collections.sort(list, comparator); - notifyDataSetChanged(); - } -} diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java index 5e070ba890159a888ebc499b119f6e44a9e507af..55bdf8fd9ddf4dc4d41a0fbfcb7dc6ffcc1e1fad 100644 --- a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java +++ b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java @@ -18,7 +18,6 @@ import org.briarproject.api.invitation.InvitationState; import org.briarproject.api.invitation.InvitationTask; import org.briarproject.api.invitation.InvitationTaskFactory; -import java.util.Collection; import java.util.logging.Logger; import javax.inject.Inject; @@ -31,10 +30,9 @@ import static org.briarproject.android.invitation.ConfirmationCodeView.Confirmat import static org.briarproject.android.invitation.ConfirmationCodeView.ConfirmationState.WAIT_FOR_CONTACT; public class AddContactActivity extends BriarActivity -implements InvitationListener { + implements InvitationListener { static final int REQUEST_BLUETOOTH = 1; - static final int REQUEST_CREATE_IDENTITY = 2; private static final Logger LOG = Logger.getLogger(AddContactActivity.class.getName()); @@ -181,11 +179,6 @@ implements InvitationListener { public void onActivityResult(int request, int result, Intent data) { if (request == REQUEST_BLUETOOTH) { if (result != RESULT_CANCELED) reset(new InvitationCodeView(this)); - } else if (request == REQUEST_CREATE_IDENTITY && result == RESULT_OK) { - byte[] b = data.getByteArrayExtra("briar.LOCAL_AUTHOR_ID"); - if (b == null) throw new IllegalStateException(); - localAuthorId = new AuthorId(b); - setView(new ChooseIdentityView(this)); } } @@ -210,17 +203,16 @@ implements InvitationListener { setView(view); } - void loadLocalAuthors() { + void loadLocalAuthor() { runOnDbThread(new Runnable() { public void run() { try { long now = System.currentTimeMillis(); - Collection<LocalAuthor> authors = - identityManager.getLocalAuthors(); + LocalAuthor author = identityManager.getLocalAuthor(); long duration = System.currentTimeMillis() - now; if (LOG.isLoggable(INFO)) - LOG.info("Loading authors took " + duration + " ms"); - displayLocalAuthors(authors); + LOG.info("Loading author took " + duration + " ms"); + setLocalAuthorId(author.getId()); } catch (DbException e) { if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); @@ -229,25 +221,15 @@ implements InvitationListener { }); } - // FIXME: The interaction between views and the container is horrible - private void displayLocalAuthors(final Collection<LocalAuthor> authors) { + void setLocalAuthorId(final AuthorId localAuthorId) { runOnUiThread(new Runnable() { + @Override public void run() { - AddContactView view = AddContactActivity.this.view; - if (view instanceof ChooseIdentityView) - ((ChooseIdentityView) view).displayLocalAuthors(authors); + AddContactActivity.this.localAuthorId = localAuthorId; } }); } - void setLocalAuthorId(AuthorId localAuthorId) { - this.localAuthorId = localAuthorId; - } - - AuthorId getLocalAuthorId() { - return localAuthorId; - } - int getLocalInvitationCode() { if (localInvitationCode == -1) localInvitationCode = crypto.generateBTInvitationCode(); diff --git a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java index 4dafd5645260dae7cbcf4f3a3e45a4014646c265..8527a67a70d7c796b0f4ae334e4948196403aef9 100644 --- a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java +++ b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java @@ -5,32 +5,15 @@ import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Button; -import android.widget.Spinner; import org.briarproject.R; -import org.briarproject.android.identity.CreateIdentityActivity; -import org.briarproject.android.identity.LocalAuthorItem; -import org.briarproject.android.identity.LocalAuthorItemComparator; -import org.briarproject.android.identity.LocalAuthorSpinnerAdapter; -import org.briarproject.api.identity.AuthorId; -import org.briarproject.api.identity.LocalAuthor; - -import java.util.Collection; import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE; import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION; -import static org.briarproject.android.identity.LocalAuthorItem.NEW; import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH; -import static org.briarproject.android.invitation.AddContactActivity.REQUEST_CREATE_IDENTITY; - -class ChooseIdentityView extends AddContactView -implements OnItemSelectedListener, OnClickListener { - private LocalAuthorSpinnerAdapter adapter = null; - private Spinner spinner = null; +class ChooseIdentityView extends AddContactView implements OnClickListener { ChooseIdentityView(Context ctx) { super(ctx); @@ -44,50 +27,10 @@ implements OnItemSelectedListener, OnClickListener { (Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.invitation_bluetooth_start, this); - adapter = new LocalAuthorSpinnerAdapter(ctx, false); - spinner = (Spinner) view.findViewById(R.id.spinner); - spinner.setAdapter(adapter); - spinner.setOnItemSelectedListener(this); - Button continueButton = (Button) view.findViewById(R.id.continueButton); continueButton.setOnClickListener(this); - container.loadLocalAuthors(); - } - - // FIXME: The interaction between views and the container is horrible - void displayLocalAuthors(Collection<LocalAuthor> authors) { - adapter.clear(); - for (LocalAuthor a : authors) adapter.add(new LocalAuthorItem(a)); - adapter.sort(LocalAuthorItemComparator.INSTANCE); - // If a local author has been selected, select it again - AuthorId localAuthorId = container.getLocalAuthorId(); - if (localAuthorId == null) return; - int count = adapter.getCount(); - for (int i = 0; i < count; i++) { - LocalAuthorItem item = adapter.getItem(i); - if (item == NEW) continue; - if (item.getLocalAuthor().getId().equals(localAuthorId)) { - spinner.setSelection(i); - return; - } - } - } - - public void onItemSelected(AdapterView<?> parent, View view, int position, - long id) { - LocalAuthorItem item = adapter.getItem(position); - if (item == NEW) { - container.setLocalAuthorId(null); - Intent i = new Intent(container, CreateIdentityActivity.class); - container.startActivityForResult(i, REQUEST_CREATE_IDENTITY); - } else { - container.setLocalAuthorId(item.getLocalAuthor().getId()); - } - } - - public void onNothingSelected(AdapterView<?> parent) { - container.setLocalAuthorId(null); + container.loadLocalAuthor(); } public void onClick(View view) { diff --git a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java deleted file mode 100644 index 3b3598a74ba62160fe09533e7cbf5dbee88c0f00..0000000000000000000000000000000000000000 --- a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java +++ /dev/null @@ -1,210 +0,0 @@ -package org.briarproject.android.keyagreement; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; -import android.widget.ScrollView; -import android.widget.Spinner; - -import org.briarproject.R; -import org.briarproject.android.ActivityComponent; -import org.briarproject.android.fragment.BaseFragment; -import org.briarproject.android.identity.CreateIdentityActivity; -import org.briarproject.android.identity.LocalAuthorItem; -import org.briarproject.android.identity.LocalAuthorSpinnerAdapter; -import org.briarproject.api.db.DbException; -import org.briarproject.api.identity.AuthorId; -import org.briarproject.api.identity.IdentityManager; -import org.briarproject.api.identity.LocalAuthor; - -import java.util.logging.Logger; - -import javax.inject.Inject; - -import static android.app.Activity.RESULT_OK; -import static java.util.logging.Level.INFO; -import static java.util.logging.Level.WARNING; -import static org.briarproject.android.identity.LocalAuthorItem.NEW; - -public class ChooseIdentityFragment extends BaseFragment - implements OnItemSelectedListener { - - interface IdentitySelectedListener { - void identitySelected(AuthorId localAuthorId); - } - - public static final String TAG = "ChooseIdentityFragment"; - - private static final Logger LOG = - Logger.getLogger(ChooseIdentityFragment.class.getName()); - - private static final int REQUEST_CREATE_IDENTITY = 1; - - private IdentitySelectedListener lsnr; - private LocalAuthorSpinnerAdapter adapter; - private ScrollView scrollView; - private Spinner spinner; - private View button; - private AuthorId localAuthorId; - - // Fields that are accessed from background threads must be volatile - @Inject - protected volatile IdentityManager identityManager; - - public static ChooseIdentityFragment newInstance() { - - Bundle args = new Bundle(); - - ChooseIdentityFragment fragment = new ChooseIdentityFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void injectFragment(ActivityComponent component) { - component.inject(this); - } - - @Override - public void onAttach(Context context) { - super.onAttach(context); - try { - lsnr = (IdentitySelectedListener) context; - } catch (ClassCastException e) { - throw new ClassCastException( - "Using class must implement IdentitySelectedListener"); - } - } - - @Override - public String getUniqueTag() { - return TAG; - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_keyagreement_id, container, - false); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - scrollView = (ScrollView) view; - - adapter = new LocalAuthorSpinnerAdapter(getActivity(), false); - spinner = (Spinner) view.findViewById(R.id.spinner); - spinner.setAdapter(adapter); - spinner.setOnItemSelectedListener(this); - - button = view.findViewById(R.id.continueButton); - button.setEnabled(false); - button.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - lsnr.identitySelected(localAuthorId); - } - }); - - } - - @Override - public void onStart() { - super.onStart(); - loadLocalAuthors(); - } - - private void loadLocalAuthors() { - listener.runOnDbThread(new Runnable() { - @Override - public void run() { - try { - long now = System.currentTimeMillis(); - LocalAuthor author = identityManager.getLocalAuthor(); - long duration = System.currentTimeMillis() - now; - if (LOG.isLoggable(INFO)) - LOG.info("Loading author took " + duration + " ms"); - displayLocalAuthor(author); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) - LOG.log(WARNING, e.toString(), e); - } - } - }); - } - - private void displayLocalAuthor(final LocalAuthor author) { - listener.runOnUiThread(new Runnable() { - @Override - public void run() { - setLocalAuthorId(author.getId()); - // TODO remove comment below when supporting multiple identities -/* adapter.clear(); - for (LocalAuthor a : authors) - adapter.add(new LocalAuthorItem(a)); - adapter.sort(LocalAuthorItemComparator.INSTANCE); - // If a local author has been selected, select it again - if (localAuthorId == null) return; - int count = adapter.getCount(); - for (int i = 0; i < count; i++) { - LocalAuthorItem item = adapter.getItem(i); - if (item == NEW) continue; - if (item.getLocalAuthor().getId().equals(localAuthorId)) { - spinner.setSelection(i); - return; - } - } -*/ } - }); - } - - private void setLocalAuthorId(final AuthorId authorId) { - listener.runOnUiThread(new Runnable() { - @Override - public void run() { - localAuthorId = authorId; - scrollView.fullScroll(View.FOCUS_DOWN); - button.setEnabled(localAuthorId != null); - } - }); - } - - @Override - public void onItemSelected(AdapterView<?> parent, View view, int position, - long id) { - LocalAuthorItem item = adapter.getItem(position); - if (item == NEW) { - setLocalAuthorId(null); - Intent i = new Intent(getActivity(), CreateIdentityActivity.class); - startActivityForResult(i, REQUEST_CREATE_IDENTITY); - } else { - setLocalAuthorId(item.getLocalAuthor().getId()); - } - } - - @Override - public void onNothingSelected(AdapterView<?> parent) { - setLocalAuthorId(null); - } - - @Override - public void onActivityResult(int request, int result, Intent data) { - if (request == REQUEST_CREATE_IDENTITY && result == RESULT_OK) { - byte[] b = data.getByteArrayExtra("briar.LOCAL_AUTHOR_ID"); - if (b == null) throw new IllegalStateException(); - setLocalAuthorId(new AuthorId(b)); - loadLocalAuthors(); - } else - super.onActivityResult(request, result, data); - } -} diff --git a/briar-android/src/org/briarproject/android/keyagreement/IntroFragment.java b/briar-android/src/org/briarproject/android/keyagreement/IntroFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..2a1c2365ede8ce650a0cf332a5c5f544dc83fca8 --- /dev/null +++ b/briar-android/src/org/briarproject/android/keyagreement/IntroFragment.java @@ -0,0 +1,88 @@ +package org.briarproject.android.keyagreement; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ScrollView; + +import org.briarproject.R; +import org.briarproject.android.ActivityComponent; +import org.briarproject.android.fragment.BaseFragment; + +import static android.view.View.FOCUS_DOWN; + +public class IntroFragment extends BaseFragment { + + interface IntroScreenSeenListener { + void showNextScreen(); + } + + public static final String TAG = IntroFragment.class.getName(); + + private IntroScreenSeenListener screenSeenListener; + private ScrollView scrollView; + + public static IntroFragment newInstance() { + + Bundle args = new Bundle(); + + IntroFragment fragment = new IntroFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + try { + screenSeenListener = (IntroScreenSeenListener) context; + } catch (ClassCastException e) { + throw new ClassCastException( + "Using class must implement IntroScreenSeenListener"); + } + } + + @Override + public String getUniqueTag() { + return TAG; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View v = inflater.inflate(R.layout.fragment_keyagreement_id, container, + false); + scrollView = (ScrollView) v.findViewById(R.id.scrollView); + View button = v.findViewById(R.id.continueButton); + button.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + screenSeenListener.showNextScreen(); + } + }); + return v; + } + + @Override + public void onStart() { + super.onStart(); + scrollView.post(new Runnable() { + @Override + public void run() { + scrollView.fullScroll(FOCUS_DOWN); + } + }); + } + +} diff --git a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java b/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java index 3eb7f7bba94d3eeaef3b8fbd75aa65fa41246c3a..ea6c9d4e8cf6782b6162dc15871af13e556e87ae 100644 --- a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java +++ b/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java @@ -11,7 +11,7 @@ import org.briarproject.R; import org.briarproject.android.ActivityComponent; import org.briarproject.android.BriarFragmentActivity; import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener; -import org.briarproject.android.keyagreement.ChooseIdentityFragment.IdentitySelectedListener; +import org.briarproject.android.keyagreement.IntroFragment.IntroScreenSeenListener; import org.briarproject.android.util.CustomAnimations; import org.briarproject.api.contact.ContactExchangeListener; import org.briarproject.api.contact.ContactExchangeTask; @@ -21,7 +21,6 @@ import org.briarproject.api.event.EventBus; import org.briarproject.api.event.EventListener; import org.briarproject.api.event.KeyAgreementFinishedEvent; import org.briarproject.api.identity.Author; -import org.briarproject.api.identity.AuthorId; import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.identity.LocalAuthor; import org.briarproject.api.keyagreement.KeyAgreementResult; @@ -34,15 +33,13 @@ import static android.widget.Toast.LENGTH_LONG; import static java.util.logging.Level.WARNING; public class KeyAgreementActivity extends BriarFragmentActivity implements - BaseFragmentListener, IdentitySelectedListener, EventListener, + BaseFragmentListener, IntroScreenSeenListener, EventListener, ContactExchangeListener { private static final Logger LOG = Logger.getLogger(KeyAgreementActivity.class.getName()); - private static final String LOCAL_AUTHOR_ID = "briar.LOCAL_AUTHOR_ID"; - - private static final int STEP_ID = 1; + private static final int STEP_INTRO = 1; private static final int STEP_QR = 2; @Inject @@ -52,8 +49,6 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements private View progressContainer; private TextView progressTitle; - private AuthorId localAuthorId; - // Fields that are accessed from background threads must be volatile @Inject protected volatile ContactExchangeTask contactExchangeTask; @@ -78,13 +73,8 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - if (state != null) { - byte[] b = state.getByteArray(LOCAL_AUTHOR_ID); - if (b != null) - localAuthorId = new AuthorId(b); - } getSupportActionBar().setTitle(R.string.add_contact_title); - showStep(localAuthorId == null ? STEP_ID : STEP_QR); + if (state == null) showStep(STEP_INTRO); } private void showStep(int step) { @@ -92,9 +82,9 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements case STEP_QR: startFragment(ShowQrCodeFragment.newInstance(), true); break; - case STEP_ID: + case STEP_INTRO: default: - startFragment(ChooseIdentityFragment.newInstance(), true); + startFragment(IntroFragment.newInstance(), true); break; } } @@ -111,15 +101,6 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements eventBus.removeListener(this); } - @Override - public void onSaveInstanceState(Bundle state) { - super.onSaveInstanceState(state); - if (localAuthorId != null) { - byte[] b = localAuthorId.getBytes(); - state.putByteArray(LOCAL_AUTHOR_ID, b); - } - } - @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { @@ -156,8 +137,7 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements } @Override - public void identitySelected(AuthorId localAuthorId) { - this.localAuthorId = localAuthorId; + public void showNextScreen() { showStep(STEP_QR); } @@ -186,7 +166,7 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements LocalAuthor localAuthor; // Load the local pseudonym try { - localAuthor = identityManager.getLocalAuthor(localAuthorId); + localAuthor = identityManager.getLocalAuthor(); } catch (DbException e) { if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);