From 60a2ebe9fa860a3508e6278e0e6d1911b3c00f23 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 15 Mar 2017 08:37:51 +1100 Subject: [PATCH] Make back behaviour work better for manage repos/installed apps/search. --- app/src/main/AndroidManifest.xml | 5 ++- .../fdroid/views/main/MainActivity.java | 34 +++++++++++++++---- app/src/main/res/layout/activity_main.xml | 2 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f599f19d4..a9d100ba0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -301,7 +301,10 @@ android:name=".AppUpdateStatusService" android:exported="false" /> - + diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java index 3e2a78ede..d5f6fd996 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.design.widget.BottomNavigationView; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.text.TextUtils; @@ -14,6 +14,8 @@ import android.view.MenuItem; import android.widget.Toast; import android.support.v7.widget.RecyclerView; +import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx; + import org.fdroid.fdroid.AppDetails; import org.fdroid.fdroid.AppDetails2; import org.fdroid.fdroid.FDroidApp; @@ -42,7 +44,7 @@ import org.fdroid.fdroid.views.swap.SwapWorkflowActivity; * When switching from one screen to the next, we stay within this activity. The new screen will * get inflated (if required) */ -public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener { +public class MainActivity extends AppCompatActivity implements BottomNavigationViewEx.OnNavigationItemSelectedListener { private static final String TAG = "MainActivity"; @@ -52,14 +54,17 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationV private static final String ACTION_ADD_REPO = "org.fdroid.fdroid.MainActivity.ACTION_ADD_REPO"; + private static final String STATE_SELECTED_MENU_ID = "selectedMenuId"; + private static final int REQUEST_SWAP = 3; private RecyclerView pager; private MainViewAdapter adapter; - private BottomNavigationView bottomNavigation; + private BottomNavigationViewEx bottomNavigation; + private int selectedMenuId = R.id.whats_new; @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -71,15 +76,30 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationV pager.setLayoutManager(new NonScrollingHorizontalLayoutManager(this)); pager.setAdapter(adapter); - bottomNavigation = (BottomNavigationView) findViewById(R.id.bottom_navigation); + bottomNavigation = (BottomNavigationViewEx) findViewById(R.id.bottom_navigation); bottomNavigation.setOnNavigationItemSelectedListener(this); + if (savedInstanceState != null) { + selectedMenuId = savedInstanceState.getInt(STATE_SELECTED_MENU_ID, R.id.whats_new); + } + setSelectedMenuInNav(); + initialRepoUpdateIfRequired(); Intent intent = getIntent(); handleSearchOrAppViewIntent(intent); } + @Override + protected void onSaveInstanceState(Bundle outState) { + outState.putInt(STATE_SELECTED_MENU_ID, selectedMenuId); + super.onSaveInstanceState(outState); + } + + private void setSelectedMenuInNav() { + bottomNavigation.setCurrentItem(adapter.adapterPositionFromItemId(selectedMenuId)); + } + /** * The first time the app is run, we will have an empty app list. To deal with this, we will * attempt to update with the default repo. However, if we have tried this at least once, then @@ -103,7 +123,8 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationV if (getIntent().hasExtra(EXTRA_VIEW_UPDATES)) { getIntent().removeExtra(EXTRA_VIEW_UPDATES); pager.scrollToPosition(adapter.adapterPositionFromItemId(R.id.updates)); - bottomNavigation.findViewById(R.id.updates).performClick(); + selectedMenuId = R.id.updates; + setSelectedMenuInNav(); } // AppDetails 2 and RepoDetailsActivity set different NFC actions, so reset here @@ -131,6 +152,7 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationV @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { pager.scrollToPosition(((MainViewAdapter) pager.getAdapter()).adapterPositionFromItemId(item.getItemId())); + selectedMenuId = item.getItemId(); return true; } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 60c98a6a3..011b57258 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> -