From e48c49ce0c1f904e5bf5c1e2bb547010a2f0d27b Mon Sep 17 00:00:00 2001 From: proletarius101 Date: Tue, 18 May 2021 12:39:58 +0000 Subject: [PATCH] Change the bottom navigation bar to the material component one --- app/build.gradle | 1 - .../{main => full}/res/drawable/ic_nearby.xml | 0 .../full/res/menu/main_activity_screens.xml | 46 +++++-- .../fdroid/views/main/MainActivity.java | 128 ++++-------------- app/src/main/res/color/bottom_nav_items.xml | 6 - app/src/main/res/layout/activity_main.xml | 7 +- .../main/res/menu/main_activity_screens.xml | 28 ++++ app/src/main/res/values/colors.xml | 3 - app/src/main/res/values/styles.xml | 4 - app/src/main/res/values/themes.xml | 1 + gradle/verification-metadata.xml | 5 + 11 files changed, 100 insertions(+), 129 deletions(-) rename app/src/{main => full}/res/drawable/ic_nearby.xml (100%) delete mode 100644 app/src/main/res/color/bottom_nav_items.xml create mode 100644 app/src/main/res/menu/main_activity_screens.xml diff --git a/app/build.gradle b/app/build.gradle index f2f0677c1..81e8e1162 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -164,7 +164,6 @@ dependencies { implementation 'ch.acra:acra:4.9.1' implementation 'io.reactivex:rxjava:1.1.0' implementation 'com.hannesdorfmann:adapterdelegates3:3.0.1' - implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.5' implementation 'com.fasterxml.jackson.core:jackson-core:2.11.1' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.11.1' diff --git a/app/src/main/res/drawable/ic_nearby.xml b/app/src/full/res/drawable/ic_nearby.xml similarity index 100% rename from app/src/main/res/drawable/ic_nearby.xml rename to app/src/full/res/drawable/ic_nearby.xml diff --git a/app/src/full/res/menu/main_activity_screens.xml b/app/src/full/res/menu/main_activity_screens.xml index 69e32f23b..1669f8ab0 100644 --- a/app/src/full/res/menu/main_activity_screens.xml +++ b/app/src/full/res/menu/main_activity_screens.xml @@ -1,22 +1,42 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:ignore="MenuTitle"> + android:id="@+id/latest" + android:enabled="true" + android:icon="@drawable/ic_latest" + android:orderInCategory="0" + android:title="@string/main_menu__latest_apps" + app:showAsAction="ifRoom|withText" /> + android:id="@+id/categories" + android:enabled="true" + android:icon="@drawable/ic_categories" + android:orderInCategory="1" + android:title="@string/main_menu__categories" + app:showAsAction="ifRoom|withText" /> + android:id="@+id/nearby" + android:enabled="true" + android:icon="@drawable/ic_nearby" + android:orderInCategory="2" + android:title="@string/main_menu__swap_nearby" + app:showAsAction="ifRoom|withText" /> + android:id="@+id/updates" + android:enabled="true" + android:icon="@drawable/ic_updates" + android:orderInCategory="3" + android:title="@string/main_menu__updates" + app:showAsAction="ifRoom|withText" /> + android:id="@+id/settings" + android:enabled="true" + android:icon="@drawable/ic_settings" + android:orderInCategory="4" + android:title="@string/menu_settings" + app:showAsAction="ifRoom|withText" /> \ No newline at end of file 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 d7b9d6dd4..c8993092a 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 @@ -31,20 +31,22 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; -import android.util.TypedValue; -import android.view.View; import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; import android.widget.Toast; -import com.ashokvarma.bottomnavigation.BottomNavigationBar; -import com.ashokvarma.bottomnavigation.BottomNavigationItem; -import com.ashokvarma.bottomnavigation.TextBadgeItem; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.badge.BadgeDrawable; +import com.google.android.material.bottomnavigation.BottomNavigationView; import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.AppUpdateStatusManager.AppUpdateStatus; -import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.NfcHelper; import org.fdroid.fdroid.Preferences; @@ -61,17 +63,6 @@ import org.fdroid.fdroid.views.AppDetailsActivity; import org.fdroid.fdroid.views.ManageReposActivity; import org.fdroid.fdroid.views.apps.AppListActivity; -import java.lang.reflect.Field; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - /** * Main view shown to users upon starting F-Droid. *

@@ -86,7 +77,7 @@ import androidx.recyclerview.widget.RecyclerView; * 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 BottomNavigationBar.OnTabSelectedListener { +public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @@ -107,9 +98,9 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB private RecyclerView pager; private MainViewAdapter adapter; - private BottomNavigationBar bottomNavigation; + private BottomNavigationView bottomNavigation; private int selectedMenuId; - private TextBadgeItem updatesBadge; + private BadgeDrawable updatesBadge; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -134,61 +125,20 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB pager.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); } - updatesBadge = new TextBadgeItem().hide(false); + bottomNavigation = (BottomNavigationView) findViewById(R.id.bottom_navigation); + bottomNavigation.setOnNavigationItemSelectedListener(item -> { + pager.scrollToPosition(item.getOrder()); + selectedMenuId = (int) adapter.getItemId(item.getItemId()); - bottomNavigation = (BottomNavigationBar) findViewById(R.id.bottom_navigation); - bottomNavigation - .addItem(new BottomNavigationItem(R.drawable.ic_latest, R.string.main_menu__latest_apps)); - if (BuildConfig.FLAVOR.startsWith("full")) { - bottomNavigation - .addItem(new BottomNavigationItem(R.drawable.ic_categories, R.string.main_menu__categories)) - .addItem(new BottomNavigationItem(R.drawable.ic_nearby, R.string.main_menu__swap_nearby)); - - bottomNavigation.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (bottomNavigation.getCurrentSelectedPosition() == 2) { - NearbyViewBinder.updateUsbOtg(MainActivity.this); - } - } - }); - } - bottomNavigation.setTabSelectedListener(this) - .setBarBackgroundColor(getBottomNavigationBackgroundColorResId()) - .setInActiveColor(R.color.bottom_nav_items) - .setActiveColor(R.color.bottom_nav_active) - .setMode(BottomNavigationBar.MODE_FIXED) - .addItem(new BottomNavigationItem(R.drawable.ic_updates, R.string.main_menu__updates) - .setBadgeItem(updatesBadge)) - .addItem(new BottomNavigationItem(R.drawable.ic_settings, R.string.menu_settings)) - .setAnimationDuration(0) - .initialise(); - - // turn off animation, scaling, and truncate labels in the middle - final LinearLayout linearLayout = bottomNavigation.findViewById(R.id.bottom_navigation_bar_item_container); - final int childCount = linearLayout.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View fixedBottomNavigationTab = linearLayout.getChildAt(i); - try { - Field labelScale = fixedBottomNavigationTab.getClass().getDeclaredField("labelScale"); - labelScale.setAccessible(true); - labelScale.set(fixedBottomNavigationTab, 1.0f); - } catch (IllegalAccessException | NoSuchFieldException | IllegalArgumentException e) { - e.printStackTrace(); + if (item.getItemId() == 2) { + NearbyViewBinder.updateUsbOtg(MainActivity.this); } - final View container = fixedBottomNavigationTab.findViewById(R.id.fixed_bottom_navigation_container); - container.setPadding( - 2, - container.getPaddingTop(), - 2, - container.getPaddingBottom() - ); + return true; - final TextView title = fixedBottomNavigationTab.findViewById(R.id.fixed_bottom_navigation_title); - title.setEllipsize(TextUtils.TruncateAt.MIDDLE); - title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13); - } + }); + updatesBadge = bottomNavigation.getOrCreateBadge(R.id.updates); + updatesBadge.setVisible(false); IntentFilter updateableAppsFilter = new IntentFilter(AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED); updateableAppsFilter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_CHANGED); @@ -215,7 +165,7 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB } private void setSelectedMenuInNav() { - bottomNavigation.selectTab(adapter.adapterPositionFromItemId(selectedMenuId)); + bottomNavigation.setSelectedItemId(adapter.adapterPositionFromItemId(selectedMenuId)); } private void initialRepoUpdateIfRequired() { @@ -292,22 +242,6 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB } } - @Override - public void onTabSelected(int position) { - pager.scrollToPosition(position); - selectedMenuId = (int) adapter.getItemId(position); - } - - @Override - public void onTabUnselected(int position) { - - } - - @Override - public void onTabReselected(int position) { - - } - /** * Since any app could send this {@link Intent}, and the search terms are * fed into a SQL query, the data must be strictly sanitized to avoid @@ -455,20 +389,14 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB private void refreshUpdatesBadge(int canUpdateCount) { if (canUpdateCount == 0) { - updatesBadge.hide(true); + updatesBadge.setVisible(false); + updatesBadge.clearNumber(); } else { - updatesBadge.setText(Integer.toString(canUpdateCount)); - updatesBadge.show(true); + updatesBadge.setNumber(canUpdateCount); + updatesBadge.setVisible(true); } } - private int getBottomNavigationBackgroundColorResId() { - if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) { - return R.color.fdroid_night; - } - return R.color.fdroid_blue; - } - private static class NonScrollingHorizontalLayoutManager extends LinearLayoutManager { NonScrollingHorizontalLayoutManager(Context context) { super(context, LinearLayoutManager.HORIZONTAL, false); diff --git a/app/src/main/res/color/bottom_nav_items.xml b/app/src/main/res/color/bottom_nav_items.xml deleted file mode 100644 index e785610df..000000000 --- a/app/src/main/res/color/bottom_nav_items.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ec40d1eaf..de453aedb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,16 +1,19 @@ - + android:layout_height="wrap_content" + app:menu="@menu/main_activity_screens" + app:labelVisibilityMode="labeled"/> +

+ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a43461d23..c95694497 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -29,12 +29,9 @@ #ff004ba0 #ffbee247 #ff8ab000 - - #ff121212 #cc222222 #fff4511e - @android:color/white diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a386ac46e..af66f9ee4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -35,10 +35,6 @@ - diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index fdffd4493..c09689f64 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1061,6 +1061,11 @@ + + + + +