From 2480824d69e9f8c5e8ce14b7a7ed13d98ce65b50 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 22 Feb 2021 17:47:58 -0300 Subject: [PATCH] Fix toolbar buttons not showing up after sign-in on lower API levels --- briar-android/build.gradle | 1 + .../android/contact/ContactListFragment.java | 4 +- .../briar/android/fragment/BaseFragment.java | 14 +++--- .../android/navdrawer/NavDrawerActivity.java | 49 ++++--------------- .../main/res/layout/activity_nav_drawer.xml | 5 +- .../src/main/res/menu/navigation_drawer.xml | 13 ++--- briar-android/witness.gradle | 18 +++---- 7 files changed, 37 insertions(+), 67 deletions(-) diff --git a/briar-android/build.gradle b/briar-android/build.gradle index 3fddc9284..829629a4a 100644 --- a/briar-android/build.gradle +++ b/briar-android/build.gradle @@ -95,6 +95,7 @@ dependencies { implementation project(path: ':bramble-core', configuration: 'default') implementation project(':bramble-android') + implementation 'androidx.fragment:fragment:1.3.0' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.exifinterface:exifinterface:1.3.1' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index 1a803c9a6..b8b743935 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -34,7 +34,6 @@ import io.github.kobakei.materialfabspeeddial.FabSpeedDial; import io.github.kobakei.materialfabspeeddial.FabSpeedDial.OnMenuItemClickListener; import static com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_INDEFINITE; -import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID; @MethodsNotNullByDefault @@ -102,7 +101,8 @@ public class ContactListFragment extends BaseFragment .observe(getViewLifecycleOwner(), result -> { result.onError(this::handleException).onSuccess(items -> { adapter.submitList(items); - if (requireNonNull(items).size() == 0) list.showData(); + // TODO remove when BriarRecyclerView was adapted + list.showData(); }); }); viewModel.getHasPendingContacts() diff --git a/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java index 0988e6147..22f1be68d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java @@ -10,9 +10,8 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.android.DestroyableContext; import org.briarproject.briar.android.activity.ActivityComponent; -import javax.annotation.Nullable; - import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; import androidx.annotation.UiThread; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -47,13 +46,11 @@ public abstract class BaseFragment extends Fragment @Override public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - listener.onBackPressed(); - return true; - default: - return super.onOptionsItemSelected(item); + if (item.getItemId() == android.R.id.home) { + requireActivity().onBackPressed(); + return true; } + return super.onOptionsItemSelected(item); } @UiThread @@ -79,6 +76,7 @@ public abstract class BaseFragment extends Fragment void handleException(Exception e); } + @Deprecated @CallSuper @Override public void runOnUiThreadUnlessDestroyed(Runnable r) { 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 ced01d62e..c16fcd4e1 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 @@ -49,14 +49,12 @@ import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; -import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProviders; @@ -67,9 +65,7 @@ import static android.view.View.GONE; import static android.view.View.VISIBLE; import static androidx.core.view.GravityCompat.START; import static androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED; -import static androidx.fragment.app.FragmentManager.POP_BACK_STACK_INCLUSIVE; import static androidx.lifecycle.Lifecycle.State.STARTED; -import static java.util.Objects.requireNonNull; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.RUNNING; import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; @@ -146,7 +142,7 @@ public class NavDrawerActivity extends BriarActivity implements if (ask) showDozeDialog(getString(R.string.setup_doze_intro)); }); - Toolbar toolbar = findViewById(R.id.toolbar); + Toolbar toolbar = setUpCustomToolbar(false); drawerLayout = findViewById(R.id.drawer_layout); navigation = findViewById(R.id.navigation); GridView transportsView = findViewById(R.id.transportsView); @@ -156,11 +152,6 @@ public class NavDrawerActivity extends BriarActivity implements startActivity(new Intent(this, TransportsActivity.class)); }); - setSupportActionBar(toolbar); - ActionBar actionBar = requireNonNull(getSupportActionBar()); - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setHomeButtonEnabled(true); - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.nav_drawer_open_description, R.string.nav_drawer_close_description) { @@ -184,9 +175,6 @@ public class NavDrawerActivity extends BriarActivity implements if (lifecycleManager.getLifecycleState().isAfter(RUNNING)) { showSignOutFragment(); - } else if (state == null) { - startFragment(ContactListFragment.newInstance(), - R.id.nav_btn_contacts); } if (state == null) { // do not call this again when there's existing state @@ -276,7 +264,6 @@ public class NavDrawerActivity extends BriarActivity implements @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { drawerLayout.closeDrawer(START); - clearBackStack(); if (item.getItemId() == R.id.nav_btn_lock) { lockManager.setLocked(true); ActivityCompat.finishAfterTransition(this); @@ -296,8 +283,8 @@ public class NavDrawerActivity extends BriarActivity implements FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentByTag(SignOutFragment.TAG) != null) { finish(); - } else if (fm.getBackStackEntryCount() == 0 - && fm.findFragmentByTag(ContactListFragment.TAG) == null) { + } else if (fm.getBackStackEntryCount() == 0 && + fm.findFragmentByTag(ContactListFragment.TAG) == null) { // don't start fragments in the wrong part of lifecycle (#1904) if (!getLifecycle().getCurrentState().isAtLeast(STARTED)) { LOG.warning("Tried to start contacts fragment in state " + @@ -346,30 +333,12 @@ public class NavDrawerActivity extends BriarActivity implements startFragment(fragment); } - private void startFragment(BaseFragment fragment) { - if (getSupportFragmentManager().getBackStackEntryCount() == 0) - startFragment(fragment, false); - else startFragment(fragment, true); - } - - private void startFragment(BaseFragment fragment, - boolean isAddedToBackStack) { - FragmentTransaction trans = - getSupportFragmentManager().beginTransaction() - .setCustomAnimations(R.anim.fade_in, - R.anim.fade_out, R.anim.fade_in, - R.anim.fade_out) - .replace(R.id.fragmentContainer, fragment, - fragment.getUniqueTag()); - if (isAddedToBackStack) { - trans.addToBackStack(fragment.getUniqueTag()); - } - trans.commit(); - } - - private void clearBackStack() { - getSupportFragmentManager().popBackStackImmediate(null, - POP_BACK_STACK_INCLUSIVE); + private void startFragment(BaseFragment f) { + getSupportFragmentManager().beginTransaction() + .setCustomAnimations(R.anim.fade_in, R.anim.fade_out, + R.anim.fade_in, R.anim.fade_out) + .replace(R.id.fragmentContainer, f, f.getUniqueTag()) + .commit(); } @Override diff --git a/briar-android/src/main/res/layout/activity_nav_drawer.xml b/briar-android/src/main/res/layout/activity_nav_drawer.xml index 44830d9c5..c9e1f38ca 100644 --- a/briar-android/src/main/res/layout/activity_nav_drawer.xml +++ b/briar-android/src/main/res/layout/activity_nav_drawer.xml @@ -52,16 +52,17 @@ android:layout_height="0dp" android:contentDescription="@string/close" android:scaleType="center" - app:srcCompat="@drawable/ic_close" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@drawable/ic_close" app:tint="@color/briar_text_tertiary_inverse" /> - + android:title="@string/contact_list_button" /> + android:title="@string/groups_button" /> + android:title="@string/forums_button" /> + android:title="@string/blogs_button" /> + android:title="@string/settings_button" /> + android:title="@string/sign_out_button" /> \ No newline at end of file diff --git a/briar-android/witness.gradle b/briar-android/witness.gradle index 668b51e64..e3be69cbc 100644 --- a/briar-android/witness.gradle +++ b/briar-android/witness.gradle @@ -1,7 +1,7 @@ dependencyVerification { verify = [ 'androidx.activity:activity-ktx:1.1.0:activity-ktx-1.1.0.aar:1996c36d3d2d62db5020b8ec634b5f854b1a698960c3552e1a00c69221baeabe', - 'androidx.activity:activity:1.1.0:activity-1.1.0.aar:4f2b35916768032f7d0c20e250e28b29037ed4ce9ebf3da4fcd51bcb0c6067ef', + 'androidx.activity:activity:1.2.0:activity-1.2.0.aar:ac27a810554e47b2122bce1f338934e77b173a5a9267eb35f134b6d34f931bae', 'androidx.annotation:annotation-experimental:1.0.0:annotation-experimental-1.0.0.aar:b219d2b568e7e4ba534e09f8c2fd242343df6ccbdfbbe938846f5d740e6b0b11', 'androidx.annotation:annotation:1.1.0:annotation-1.1.0.jar:d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692', 'androidx.appcompat:appcompat-resources:1.2.0:appcompat-resources-1.2.0.aar:c470297c03ff3de1c3d15dacf0be0cae63abc10b52f021dd07ae28daa3100fe5', @@ -24,29 +24,28 @@ dependencyVerification { 'androidx.exifinterface:exifinterface:1.3.1:exifinterface-1.3.1.aar:ef168daa6eb744c8395c22b49afa5235e6099868a0377175b6d5e3cdff8d7ffc', 'androidx.fragment:fragment-ktx:1.2.5:fragment-ktx-1.2.5.aar:50f0f3b734f93829eeac7456b7cb13e5430741e555c535911a958ee4a8242bca', 'androidx.fragment:fragment-testing:1.2.5:fragment-testing-1.2.5.aar:ef3cc3387115f9187665b283e313b13a2bb8826673380317057e2972351df09c', - 'androidx.fragment:fragment:1.2.4:fragment-1.2.4.aar:1dc194942574302bf35dae7b81b82273505ec2d38f81d9258ad5c0448daddd82', - 'androidx.fragment:fragment:1.2.5:fragment-1.2.5.aar:d19e82d142def6c4e136da70bf92f194c0ecc61d14ab4e84567b2ced0920fa93', + 'androidx.fragment:fragment:1.3.0:fragment-1.3.0.aar:66db3ed2b11bb5e572a079b87cd3fae9bc5c33c373c71b25f1e3eac7607ab526', 'androidx.interpolator:interpolator:1.0.0:interpolator-1.0.0.aar:33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a', 'androidx.legacy:legacy-support-core-utils:1.0.0:legacy-support-core-utils-1.0.0.aar:a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7', - 'androidx.lifecycle:lifecycle-common:2.2.0:lifecycle-common-2.2.0.jar:63898dabf7cfe5ec5d7ed8b8c2564c1427be876e1496ead95c2703cf59d3734b', + 'androidx.lifecycle:lifecycle-common:2.3.0:lifecycle-common-2.3.0.jar:15848fb56db32f4c7cdc72b324003183d52a4884d6bf09be708ac7f587d139b5', 'androidx.lifecycle:lifecycle-extensions:2.2.0:lifecycle-extensions-2.2.0.aar:648c8de1d10b025d524a2e46ac994fc3f6bf186826c09ec1a62d250bf1b877ae', 'androidx.lifecycle:lifecycle-livedata-core-ktx:2.2.0:lifecycle-livedata-core-ktx-2.2.0.aar:5951f882e95b7e05ceb9adfca0fa2ebd511d63ea5a00da4eae6c6d0c1903da18', - 'androidx.lifecycle:lifecycle-livedata-core:2.2.0:lifecycle-livedata-core-2.2.0.aar:556c1f3af90aa9d7d0d330565adbf6da71b2429148bac91e07c485f4f9abf614', + 'androidx.lifecycle:lifecycle-livedata-core:2.3.0:lifecycle-livedata-core-2.3.0.aar:89f480888f2bb8eb62d9b7b1eb34be69b59ec84b24a1b0bdbeb49973478c6da3', 'androidx.lifecycle:lifecycle-livedata:2.2.0:lifecycle-livedata-2.2.0.aar:d83af94860aa9f64cbdc51f40796a7cf55b116f0e6efd752e845c0104c8b16f6', 'androidx.lifecycle:lifecycle-process:2.2.0:lifecycle-process-2.2.0.aar:3a977e7778fc8418742d388409daaba7ea8fea8823d21ffb96e4c4236f715070', 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0:lifecycle-runtime-ktx-2.2.0.aar:c29fc87694e6ce116b61207221e53ed285862a6628055790b0bcf9ce45d8cc68', - 'androidx.lifecycle:lifecycle-runtime:2.2.0:lifecycle-runtime-2.2.0.aar:2f866c07a1f33a8c9bb69a9545d4f20b4f0628cd0a155432386d7cb081e1e0bc', + 'androidx.lifecycle:lifecycle-runtime:2.3.0:lifecycle-runtime-2.3.0.aar:94f528fd5fb123f75b6e65d07a6ef5cd6c0e69ac604d106aaa12705282456234', 'androidx.lifecycle:lifecycle-service:2.2.0:lifecycle-service-2.2.0.aar:ca2801ffc069555afed8eddd2292130f436956452bc8bbad30fb56f8e4e382a0', 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0:lifecycle-viewmodel-ktx-2.2.0.aar:f791001f2211947e56ad3d96d12c9ae93fc5589b88f08603f69a2265c9a7d702', - 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0:lifecycle-viewmodel-savedstate-2.2.0.aar:3ce866fb822b20fe2f188f974992869a0a6233fe40acbefcff090d6def5e7f33', - 'androidx.lifecycle:lifecycle-viewmodel:2.2.0:lifecycle-viewmodel-2.2.0.aar:967efab24d6c49dd414a8c0ac4a1cd09b018f0b8bb43b739ad360c4158ebde27', + 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.0:lifecycle-viewmodel-savedstate-2.3.0.aar:49f9532b5104cc1ee64900ed4f696d031d807fba726e0d5d6a52459e8fba4a1d', + 'androidx.lifecycle:lifecycle-viewmodel:2.3.0:lifecycle-viewmodel-2.3.0.aar:cea8f26fa232037922b69af9cd1bde2df1211acc8b75253e425b7150a5fca59d', 'androidx.loader:loader:1.0.0:loader-1.0.0.aar:11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025', 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0:localbroadcastmanager-1.0.0.aar:e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8', 'androidx.preference:preference:1.1.1:preference-1.1.1.aar:317dcbc38242aea2f6262c06d51b8a22827e98959967edd40f82600a15cb4bff', 'androidx.print:print:1.0.0:print-1.0.0.aar:1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd', 'androidx.recyclerview:recyclerview-selection:1.1.0-rc03:recyclerview-selection-1.1.0-rc03.aar:a548a0771c2c8ca8cf98f1f755b0eef4fac73d1697e6eeb1a6383f557e0eba13', 'androidx.recyclerview:recyclerview:1.1.0:recyclerview-1.1.0.aar:f0d2b5a67d0a91ee1b1c73ef2b636a81f3563925ddd15a1d4e1c41ec28de7a4f', - 'androidx.savedstate:savedstate:1.0.0:savedstate-1.0.0.aar:2510a5619c37579c9ce1a04574faaf323cd0ffe2fc4e20fa8f8f01e5bb402e83', + 'androidx.savedstate:savedstate:1.1.0:savedstate-1.1.0.aar:d60bbe44c2c08083a17c5dc678a6d6b4d0a2d664858016ab5c049cbea90a63b7', 'androidx.test.espresso:espresso-contrib:3.3.0:espresso-contrib-3.3.0.aar:f400cabdc181356acf6b210e4509dcb9649d9e2b6b6e218c60fcfc15e8a756d1', 'androidx.test.espresso:espresso-core:3.3.0:espresso-core-3.3.0.aar:23ebf6014645e0c60aec7d1ed924d4d4c848ae8c3673b7d8d06b2ec6a56cafee', 'androidx.test.espresso:espresso-idling-resource:3.3.0:espresso-idling-resource-3.3.0.aar:29519b112731f289cc6e2f9b2eccc5ea72c754b04272bb93370f45d7e170a7c6', @@ -57,6 +56,7 @@ dependencyVerification { 'androidx.test:monitor:1.3.0:monitor-1.3.0.aar:f73a31306a783e63150c60c49e140dc38da39a1b7947690f4b73387b5ebad77e', 'androidx.test:rules:1.3.0:rules-1.3.0.aar:c1753946c498b0d5d7cf341cfed661f66915c4c9deb4ed10462a08ae33b2429a', 'androidx.test:runner:1.3.0:runner-1.3.0.aar:61d13f5a9fcbbd73ba18fa84e1d6a0111c6e1c665a89b418126966e61fffd93b', + 'androidx.tracing:tracing:1.0.0:tracing-1.0.0.aar:07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612', 'androidx.transition:transition:1.2.0:transition-1.2.0.aar:a1e059b3bc0b43a58dec0efecdcaa89c82d2bca552ea5bacf6656c46e853157e', 'androidx.vectordrawable:vectordrawable-animated:1.1.0:vectordrawable-animated-1.1.0.aar:76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8', 'androidx.vectordrawable:vectordrawable:1.1.0:vectordrawable-1.1.0.aar:46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26',