Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package urum.geoplanner.ui;
- @RequiresApi(api = Build.VERSION_CODES.M)
- public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener,
- GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, EasyPermissions.PermissionCallbacks {
- private static final String TAG = "mytag";
- private static final int LOCATION = 10;
- private String PACKAGE_NAME;
- public ActivityMainBinding binding;
- MaterialToolbar mToolbar;
- public FragmentTransaction ft;
- NavController navController;
- CoordinatorLayout.LayoutParams params;
- Transition transition;
- final public Fragment placesFragment = new ListPlacesFragment();
- final Fragment mapFragment = new MapFragment();
- final Fragment settingsFragment = new SettingsFragment();
- final FragmentManager fm = getSupportFragmentManager();
- public Fragment activeFragment = placesFragment;
- private ConnectorService connectorService;
- boolean activeService;
- SharedPreferences sharedPreferences;
- Snackbar snackbarActiveService;
- private GoogleApiClient googleApiClient;
- private LocationRequest mLocationRequest;
- private static final int REQUEST_CHECK_SETTINGS = 110;
- Bundle bundle;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- binding = ActivityMainBinding.inflate(getLayoutInflater());
- setContentView(binding.getRoot());
- PACKAGE_NAME = this.getPackageName();
- registerReceiver(CloseReceiver, new IntentFilter("closeApp"));
- initToolbar();
- binding.setLifecycleOwner(this);
- AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
- R.id.list_places, R.id.map, R.id.settings)
- .build();
- NavHostFragment navHostFragment =
- (NavHostFragment) getSupportFragmentManager()
- .findFragmentById(R.id.nav_host_fragment);
- navController = navHostFragment.getNavController();
- NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
- NavigationUI.setupWithNavController(binding.navView, navController);
- transition = new Fade();
- transition.setDuration(400);
- TransitionSet set = new TransitionSet();
- set.addTransition(transition);
- params = (CoordinatorLayout.LayoutParams)
- binding.navHostFragment.getLayoutParams();
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- Log.d("bundle", "Main");
- bundle = new Bundle();
- bundle.putBoolean("fromActivityPlace", extras.getBoolean("fromActivityPlace"));
- bundle.putDouble("lat", extras.getDouble("lat"));
- bundle.putDouble("lng", extras.getDouble("lng"));
- navController.navigate(R.id.map, bundle);
- }
- navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
- @SuppressLint("RestrictedApi")
- @Override
- public void onDestinationChanged(@NonNull NavController controller,
- @NonNull NavDestination destination, @Nullable Bundle arguments) {
- switch (destination.getId()) {
- case R.id.list_places:
- changeLayoutForListPlaces();
- break;
- case R.id.map:
- changeLayoutForMap();
- break;
- case R.id.settings:
- changeLayoutForSettings();
- break;
- }
- }
- });
- sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- sharedPreferences.registerOnSharedPreferenceChangeListener(this);
- activeService = sharedPreferences.getBoolean("switch", true);
- connectorService = new ConnectorService(this);
- getLifecycle().addObserver(connectorService);
- final ComponentName onBootReceiver = new ComponentName(getApplication().getPackageName(), BootReceiver.class.getName());
- if (getPackageManager().getComponentEnabledSetting(onBootReceiver) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
- getPackageManager().setComponentEnabledSetting(onBootReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
- }
- googleApiClient = new GoogleApiClient.Builder(this)
- .addApi(LocationServices.API)
- .addConnectionCallbacks(this)
- .addOnConnectionFailedListener(this)
- .build();
- snackbarActiveService = Snackbar.make(binding.container, R.string.service_not_active,
- Snackbar.LENGTH_LONG).setAnchorView(binding.fabButton).setAction(R.string.turn_on,
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- SharedPreferences.Editor e = sharedPreferences.edit();
- e.putBoolean("switch", true);
- e.apply();
- startService(new Intent(MainActivity.this, LocationService.class));
- }
- });
- }
- public void changeLayoutForListPlaces() {
- TransitionManager.beginDelayedTransition(binding.navHostFragment, transition);
- params.setBehavior(new AppBarLayout.ScrollingViewBehavior(binding.navHostFragment.getContext(), null));
- fm.beginTransaction().detach(activeFragment).attach(placesFragment).commit();
- getSupportActionBar().show();
- binding.fabButton.show();
- activeFragment = placesFragment;
- slideUp();
- }
- public void changeLayoutForMap() {
- // transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
- TransitionManager.beginDelayedTransition(binding.navHostFragment, transition);
- params.setBehavior(null);
- fm.beginTransaction().detach(activeFragment).attach(mapFragment).commit();
- getSupportActionBar().hide();
- binding.fabButton.hide();
- //fm.beginTransaction().hide(activeFragment).show(mapFragment).commit();
- activeFragment = mapFragment;
- }
- public void changeLayoutForSettings() {
- TransitionManager.beginDelayedTransition(binding.navHostFragment, transition);
- params.setBehavior(new AppBarLayout.ScrollingViewBehavior(binding.navHostFragment.getContext(), null));
- fm.beginTransaction().detach(activeFragment).attach(placesFragment).commit();
- getSupportActionBar().show();
- binding.fabButton.hide();
- activeFragment = settingsFragment;
- }
- public void changeLayoutForArchive(FragmentManager fm) {
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setDisplayShowTitleEnabled(true);
- getSupportActionBar().setDisplayShowHomeEnabled(true);
- getSupportActionBar().setTitle(getString(R.string.archive));
- binding.fabButton.hide();
- slideDown();
- ArchivePlacesFragment archivePlacesFragment = new ArchivePlacesFragment();
- FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.nav_host_fragment, archivePlacesFragment);
- ft.addToBackStack(null);
- ft.commit();
- }
- public void slideUp() {
- ViewGroup.LayoutParams layoutParams = binding.navView.getLayoutParams();
- if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
- CoordinatorLayout.Behavior behavior =
- ((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
- if (behavior instanceof HideBottomViewOnScrollBehavior) {
- HideBottomViewOnScrollBehavior<BottomNavigationView> hideShowBehavior =
- (HideBottomViewOnScrollBehavior<BottomNavigationView>) behavior;
- hideShowBehavior.slideUp(binding.navView);
- }
- }
- }
- public void slideDown() {
- ViewGroup.LayoutParams layoutParams = binding.navView.getLayoutParams();
- if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
- CoordinatorLayout.Behavior behavior =
- ((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
- if (behavior instanceof HideBottomViewOnScrollBehavior) {
- HideBottomViewOnScrollBehavior<BottomNavigationView> hideShowBehavior =
- (HideBottomViewOnScrollBehavior<BottomNavigationView>) behavior;
- hideShowBehavior.slideDown(binding.navView);
- }
- }
- }
- @Override
- protected void onStart() {
- super.onStart();
- if (!activeService) {
- snackbarActiveService.show();
- }
- googleApiClient.connect();
- mLocationRequest = LocationRequest.create();
- LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
- SettingsClient client = LocationServices.getSettingsClient(this);
- Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
- task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
- @Override
- public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
- }
- });
- task.addOnFailureListener(this, new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- if (e instanceof ResolvableApiException) {
- try {
- ResolvableApiException resolvable = (ResolvableApiException) e;
- resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
- } catch (IntentSender.SendIntentException sendEx) {
- }
- }
- }
- });
- requiresLocationPermission();
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- googleApiClient.disconnect();
- unregisterReceiver(CloseReceiver);
- }
- private void initToolbar() {
- mToolbar = findViewById(R.id.toolbar_actionbar);
- setSupportActionBar(mToolbar);
- if (getSupportActionBar() != null) {
- getSupportActionBar().setDisplayHomeAsUpEnabled(false);
- getSupportActionBar().setDisplayShowTitleEnabled(false);
- getSupportActionBar().setDisplayShowHomeEnabled(true);
- }
- mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home: {
- if (fm.getBackStackEntryCount() > 0) {
- fm.popBackStackImmediate();
- } else {
- this.onBackPressed();
- }
- }
- }
- return super.onOptionsItemSelected(item);
- }
- public void add(View view) {
- Intent intent = new Intent(this, PlaceActivity.class);
- startActivity(intent);
- }
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
- switch (s) {
- case "switch":
- Log.d("mytag", "change status service");
- activeService = sharedPreferences.getBoolean(s, true);
- break;
- }
- }
- private BroadcastReceiver CloseReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.i(TAG, "MainActivity закрыт");
- finish();
- }
- };
- private static void enableLayout(ViewGroup layout, boolean enable) {
- layout.setEnabled(enable);
- for (int i = 0; i < layout.getChildCount(); i++) {
- View child = layout.getChildAt(i);
- if (child instanceof ViewGroup) {
- enableLayout((ViewGroup) child, enable);
- } else {
- child.setEnabled(enable);
- }
- }
- }
- @Override
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
- /*
- if (grantResults.length > 0) {
- boolean locationPermission = grantResults[0] == PackageManager.PERMISSION_GRANTED;
- boolean backGround;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- backGround = grantResults[1] == PackageManager.PERMISSION_GRANTED;
- } else {
- backGround = true;
- }
- if (!locationPermission && !backGround) {
- for (int i = 0, len = permissions.length; i < len; i++) {
- String permission = permissions[i];
- if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
- boolean showRationale = shouldShowRequestPermissionRationale(permission);
- Log.d(TAG, permission + " : " + showRationale);
- if (!showRationale) {
- Snackbar.make(binding.container,
- R.string.manual_access_for_geo,
- Snackbar.LENGTH_INDEFINITE).setAnchorView(binding.fabButton).
- setAction(R.string.settings,
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + PACKAGE_NAME)));
- }
- }).show();
- } else {
- Snackbar.make(binding.container,
- R.string.geo_access_all_time,
- Snackbar.LENGTH_INDEFINITE).setAnchorView(binding.fabButton).
- setAction(R.string.turn_on,
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- ActivityCompat.requestPermissions(MainActivity.this,
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_BACKGROUND_LOCATION},
- LOCATION);
- } else {
- ActivityCompat.requestPermissions(MainActivity.this,
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
- LOCATION);
- }
- }
- }).show();
- }
- }
- }
- }
- }*/
- }
- @AfterPermissionGranted(LOCATION)
- private void requiresLocationPermission() {
- List<String> permsList = new ArrayList<String>() {{
- add(Manifest.permission.ACCESS_FINE_LOCATION);
- }};
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- permsList.add(0, Manifest.permission.ACCESS_BACKGROUND_LOCATION);
- }
- String[] perms = permsList.toArray(new String[0]);
- if (EasyPermissions.hasPermissions(this, perms)) {
- enableLayout(binding.container, true);
- } else {
- EasyPermissions.requestPermissions(
- new PermissionRequest.Builder(this, LOCATION, perms)
- .setRationale(R.string.permission_rationale)
- .setPositiveButtonText(R.string.start)
- .build());
- enableLayout(binding.container, false);
- }
- }
- @Override
- public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
- enableLayout(binding.container, true);
- }
- @Override
- public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
- enableLayout(binding.container, false);
- for (String perm : perms) {
- if (EasyPermissions.permissionPermanentlyDenied(this, perm)) {
- Snackbar.make(binding.container,
- R.string.manual_access_for_geo,
- Snackbar.LENGTH_INDEFINITE).setAction(R.string.settings,
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + PACKAGE_NAME)));
- }
- }).setAnchorView(binding.fabButton)
- .show();
- } else {
- Snackbar.make(binding.container,
- R.string.geo_access_all_time,
- Snackbar.LENGTH_INDEFINITE).setAction(R.string.turn_on,
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- ActivityCompat.requestPermissions(MainActivity.this,
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_BACKGROUND_LOCATION},
- LOCATION);
- } else {
- ActivityCompat.requestPermissions(MainActivity.this,
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
- LOCATION);
- }
- }
- }).setAnchorView(binding.fabButton)
- .show();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement