diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java index 7a71cc3..bf4045d 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java @@ -33,13 +33,18 @@ import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; import android.widget.PopupMenu; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; -import androidx.appcompat.widget.Toolbar; import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentTransaction; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; +import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.snackbar.Snackbar; import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationListAdapter; @@ -68,6 +73,17 @@ public class MainActivity extends AppCompatActivity { private MainBinding binding; private ApplicationListAdapter.OnAppClickListener onAppClickListener; private String previousQuery = ""; + private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener + = item -> { + int itemId = item.getItemId(); + if (itemId == R.id.navigation_apps) { + binding.viewpager.setCurrentItem(0); + } else if (itemId == R.id.navigation_analytics) { + binding.viewpager.setCurrentItem(1); + } + return true; + }; + private HomeFragment home; @Override protected void onCreate(Bundle savedInstanceState) { @@ -103,7 +119,7 @@ public class MainActivity extends AppCompatActivity { for (Updatable updatable : fragments) { updatable.onUpdateComplete(); } - Snackbar bar = Snackbar.make(mainBinding.fragmentContainer, error, Snackbar.LENGTH_LONG); + Snackbar bar = Snackbar.make(mainBinding.viewpager, error, Snackbar.LENGTH_LONG); bar.show(); }); } @@ -114,8 +130,31 @@ public class MainActivity extends AppCompatActivity { } }; - Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); + setSupportActionBar(binding.toolbar); + binding.navView.inflateMenu(R.menu.bottom_nav_menu); + binding.navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); + + + binding.viewpager.setOffscreenPageLimit(2); + + + binding.viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + MenuItem item = binding.navView.getMenu().getItem(position); + binding.navView.setSelectedItemId(item.getItemId()); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); TrackerListAdapter.OnTrackerClickListener onTrackerClickListener = id -> { TrackerFragment tracker = TrackerFragment.newInstance(id); @@ -131,6 +170,7 @@ public class MainActivity extends AppCompatActivity { onAppClickListener = (vm) -> { try { + PackageManager pm = getPackageManager(); PackageInfo packageInfo = pm.getPackageInfo(vm.packageName, PackageManager.GET_PERMISSIONS); ReportFragment report = ReportFragment.newInstance(pm, vm, packageInfo, onTrackerClickListener); @@ -141,7 +181,7 @@ public class MainActivity extends AppCompatActivity { .replace(R.id.fragment_container, report) .addToBackStack(null) .commit(); - + binding.fragmentContainer.setVisibility(View.VISIBLE); packageName = packageInfo.packageName; searchView.clearFocus(); @@ -149,22 +189,18 @@ public class MainActivity extends AppCompatActivity { (toolbarMenu.findItem(R.id.action_filter)).collapseActionView(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); assert imm != null; - imm.hideSoftInputFromWindow(mainBinding.fragmentContainer.getWindowToken(), 0); + imm.hideSoftInputFromWindow(mainBinding.viewpager.getWindowToken(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } }; - HomeFragment home = new HomeFragment(); + home = new HomeFragment(); fragments.add(home); home.setNetworkListener(networkListener); home.setOnAppClickListener(onAppClickListener); - - - FragmentManager manager = getSupportFragmentManager(); - FragmentTransaction transaction = manager.beginTransaction(); - transaction.replace(R.id.fragment_container, home) - .commit(); + PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); + binding.viewpager.setAdapter(mPagerAdapter); home.startRefresh(); } @@ -224,7 +260,6 @@ public class MainActivity extends AppCompatActivity { return true; } - @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_settings) { @@ -233,13 +268,13 @@ public class MainActivity extends AppCompatActivity { try { startActivity(intent); } catch (android.content.ActivityNotFoundException e) { - Snackbar bar = Snackbar.make(binding.fragmentContainer, R.string.no_settings, Snackbar.LENGTH_LONG); + Snackbar bar = Snackbar.make(binding.viewpager, R.string.no_settings, Snackbar.LENGTH_LONG); bar.show(); } return true; } else if (item.getItemId() == R.id.action_filter_options) { View menuItemView = findViewById(R.id.action_filter_options); - PopupMenu popup = new PopupMenu(binding.fragmentContainer.getContext(), menuItemView); + PopupMenu popup = new PopupMenu(binding.viewpager.getContext(), menuItemView); popup.getMenuInflater() .inflate(R.menu.popup_menu_filter, popup.getMenu()); MenuItem filterByNameMI = popup.getMenu().findItem(R.id.filter_by_name); @@ -286,4 +321,27 @@ public class MainActivity extends AppCompatActivity { return false; } + private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { + + ScreenSlidePagerAdapter(FragmentManager fm) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @NonNull + @Override + public Fragment getItem(final int position) { + switch (position) { + case 1: + return new HomeFragment(); + default: + return home; + } + } + + @Override + public int getCount() { + return 2; + } + } + } diff --git a/app/src/main/res/drawable/ic_baseline_analytics_24.xml b/app/src/main/res/drawable/ic_baseline_analytics_24.xml new file mode 100644 index 0000000..daff6bb --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_analytics_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_apps_24.xml b/app/src/main/res/drawable/ic_baseline_apps_24.xml new file mode 100644 index 0000000..2d903a9 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_apps_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml index e4abc60..4da0059 100644 --- a/app/src/main/res/layout/main.xml +++ b/app/src/main/res/layout/main.xml @@ -35,18 +35,26 @@ app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" /> + + + android:visibility="gone" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml new file mode 100644 index 0000000..46b1da6 --- /dev/null +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aeeaea3..16d609e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -62,6 +62,8 @@ Submit Would you like to analyze the app?\n\nThe app id will be automatically copied in your clipboard, you will only have to past it in website form. This app has not been analyzed! + My apps + Trackers