diff --git a/briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java index 8c014237a2055cd6fbeefd59e2ff3a58ce46c057..6d122c6df6a5b79a096cd3ec6ccb7f336ac3f650 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java @@ -12,7 +12,7 @@ import javax.annotation.Nullable; public class SignOutFragment extends BaseFragment { - private static final String TAG = SignOutFragment.class.getName(); + public static final String TAG = SignOutFragment.class.getName(); @Override public View onCreateView(LayoutInflater inflater, @@ -30,5 +30,4 @@ public class SignOutFragment extends BaseFragment { public void injectFragment(ActivityComponent component) { // no need to inject } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java index dcc42f6c33cdb6ca8e795b023f5644d5594ed4e6..a42a1071c71586647d34691cf9c8c70004bdca39 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.design.widget.NavigationView.OnNavigationItemSelectedListener; +import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.content.ContextCompat; import android.support.v4.widget.DrawerLayout; @@ -22,6 +23,7 @@ import android.widget.ImageView; import android.widget.TextView; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.plugin.BluetoothConstants; import org.briarproject.bramble.api.plugin.LanTcpConstants; import org.briarproject.bramble.api.plugin.TorConstants; @@ -51,6 +53,7 @@ import static android.support.v4.view.GravityCompat.START; import static android.support.v4.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED; import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.RUNNING; import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD; import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.NO; @@ -73,6 +76,8 @@ public class NavDrawerActivity extends BriarActivity implements @Inject NavDrawerController controller; + @Inject + LifecycleManager lifecycleManager; private DrawerLayout drawerLayout; private NavigationView navigation; @@ -128,7 +133,9 @@ public class NavDrawerActivity extends BriarActivity implements initializeTransports(getLayoutInflater()); transportsView.setAdapter(transportsAdapter); - if (state == null) { + if (lifecycleManager.getLifecycleState().isAfter(RUNNING)) { + showSignOutFragment(); + } else if (state == null) { startFragment(ContactListFragment.newInstance(), R.id.nav_btn_contacts); } @@ -212,19 +219,23 @@ public class NavDrawerActivity extends BriarActivity implements public void onBackPressed() { if (drawerLayout.isDrawerOpen(START)) { drawerLayout.closeDrawer(START); - } else if (getSupportFragmentManager().getBackStackEntryCount() == 0 && - getSupportFragmentManager() - .findFragmentByTag(ContactListFragment.TAG) == null) { + } else { + FragmentManager fm = getSupportFragmentManager(); + if (fm.findFragmentByTag(SignOutFragment.TAG) != null) { + finish(); + } else if (fm.getBackStackEntryCount() == 0 + && fm.findFragmentByTag(ContactListFragment.TAG) == null) { /* * This makes sure that the first fragment (ContactListFragment) the * user sees is the same as the last fragment the user sees before * exiting. This models the typical Google navigation behaviour such * as in Gmail/Inbox. */ - startFragment(ContactListFragment.newInstance(), - R.id.nav_btn_contacts); - } else { - super.onBackPressed(); + startFragment(ContactListFragment.newInstance(), + R.id.nav_btn_contacts); + } else { + super.onBackPressed(); + } } } @@ -240,10 +251,15 @@ public class NavDrawerActivity extends BriarActivity implements drawerToggle.onConfigurationChanged(newConfig); } - private void signOut() { + private void showSignOutFragment() { drawerLayout.setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED); startFragment(new SignOutFragment()); + } + + private void signOut() { + drawerLayout.setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED); signOut(false); + finish(); } private void startFragment(BaseFragment fragment, int itemId) { diff --git a/briar-android/src/main/res/layout/fragment_sign_out.xml b/briar-android/src/main/res/layout/fragment_sign_out.xml index aafc7be5412bfdc5b81b940ad326d83b0ed93beb..73fd8f4e535d5dbef40998790205cd2659703a30 100644 --- a/briar-android/src/main/res/layout/fragment_sign_out.xml +++ b/briar-android/src/main/res/layout/fragment_sign_out.xml @@ -1,23 +1,46 @@ <?xml version="1.0" encoding="utf-8"?> -<RelativeLayout +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> + <ImageView + android:id="@+id/imageView" + android:layout_width="128dp" + android:layout_height="128dp" + android:scaleType="center" + android:src="@drawable/startup_lock" + android:tint="@color/briar_primary" + app:layout_constraintBottom_toTopOf="@+id/textView" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.5" + app:layout_constraintVertical_chainStyle="packed" + tools:ignore="ContentDescription"/> + <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerInParent="true"/> + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintBottom_toBottomOf="@+id/imageView" + app:layout_constraintEnd_toEndOf="@+id/imageView" + app:layout_constraintStart_toStartOf="@+id/imageView" + app:layout_constraintTop_toTopOf="@+id/imageView"/> <TextView - android:id="@+id/title_progress_bar" + android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@+id/progressBar" - android:layout_centerHorizontal="true" - android:paddingTop="@dimen/margin_large" - android:text="@string/progress_title_logout"/> + android:layout_margin="8dp" + android:text="@string/progress_title_logout" + android:textSize="@dimen/text_size_large" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/imageView"/> -</RelativeLayout> \ No newline at end of file +</android.support.constraint.ConstraintLayout> \ No newline at end of file