Menu + transitions
This commit is contained in:
parent
2a091043c6
commit
7e6e1fcff6
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM9,17L7,17v-5h2v5zM13,17h-2v-3h2v3zM13,12h-2v-2h2v2zM17,17h-2L15,7h2v10z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z" />
|
||||
</vector>
|
|
@ -35,18 +35,26 @@
|
|||
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" />
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
android:id="@+id/viewpager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginBottom="?attr/actionBarSize"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginBottom="?attr/actionBarSize"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
android:visibility="gone"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/nav_view"
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
type="org.eu.exodus_privacy.exodusprivacy.ReportViewModel" />
|
||||
</data>
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:background="?android:attr/windowBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:id="@+id/navigation_apps"
|
||||
android:icon="@drawable/ic_baseline_apps_24"
|
||||
android:title="@string/title_apps" />
|
||||
|
||||
<item
|
||||
android:id="@+id/navigation_analytics"
|
||||
android:icon="@drawable/ic_baseline_analytics_24"
|
||||
android:title="@string/title_trackers" />
|
||||
|
||||
</menu>
|
|
@ -62,6 +62,8 @@
|
|||
<string name="submit">Submit</string>
|
||||
<string name="app_not_analyzed">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.</string>
|
||||
<string name="app_not_analyzed_title">This app has not been analyzed!</string>
|
||||
<string name="title_apps">My apps</string>
|
||||
<string name="title_trackers">Trackers</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue