Advertisement
Dream0fMe

Main (where crash?)

Jun 25th, 2021
857
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.95 KB | None | 0 0
  1. package urum.geoplanner.ui;
  2.  
  3. @RequiresApi(api = Build.VERSION_CODES.M)
  4. public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener,
  5.         GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, EasyPermissions.PermissionCallbacks {
  6.  
  7.     private static final String TAG = "mytag";
  8.     private static final int LOCATION = 10;
  9.     private String PACKAGE_NAME;
  10.  
  11.     public ActivityMainBinding binding;
  12.     MaterialToolbar mToolbar;
  13.     public FragmentTransaction ft;
  14.     NavController navController;
  15.     CoordinatorLayout.LayoutParams params;
  16.     Transition transition;
  17.  
  18.     final public Fragment placesFragment = new ListPlacesFragment();
  19.     final Fragment mapFragment = new MapFragment();
  20.     final Fragment settingsFragment = new SettingsFragment();
  21.     final FragmentManager fm = getSupportFragmentManager();
  22.     public Fragment activeFragment = placesFragment;
  23.  
  24.     private ConnectorService connectorService;
  25.  
  26.     boolean activeService;
  27.     SharedPreferences sharedPreferences;
  28.     Snackbar snackbarActiveService;
  29.  
  30.     private GoogleApiClient googleApiClient;
  31.     private LocationRequest mLocationRequest;
  32.     private static final int REQUEST_CHECK_SETTINGS = 110;
  33.     Bundle bundle;
  34.  
  35.     @Override
  36.     protected void onCreate(Bundle savedInstanceState) {
  37.         super.onCreate(savedInstanceState);
  38.         binding = ActivityMainBinding.inflate(getLayoutInflater());
  39.         setContentView(binding.getRoot());
  40.         PACKAGE_NAME = this.getPackageName();
  41.         registerReceiver(CloseReceiver, new IntentFilter("closeApp"));
  42.         initToolbar();
  43.         binding.setLifecycleOwner(this);
  44.  
  45.         AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
  46.                 R.id.list_places, R.id.map, R.id.settings)
  47.                 .build();
  48.  
  49.         NavHostFragment navHostFragment =
  50.                 (NavHostFragment) getSupportFragmentManager()
  51.                         .findFragmentById(R.id.nav_host_fragment);
  52.  
  53.         navController = navHostFragment.getNavController();
  54.         NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
  55.         NavigationUI.setupWithNavController(binding.navView, navController);
  56.  
  57.         transition = new Fade();
  58.         transition.setDuration(400);
  59.         TransitionSet set = new TransitionSet();
  60.         set.addTransition(transition);
  61.  
  62.         params = (CoordinatorLayout.LayoutParams)
  63.                 binding.navHostFragment.getLayoutParams();
  64.  
  65.         Bundle extras = getIntent().getExtras();
  66.         if (extras != null) {
  67.             Log.d("bundle", "Main");
  68.             bundle = new Bundle();
  69.             bundle.putBoolean("fromActivityPlace", extras.getBoolean("fromActivityPlace"));
  70.             bundle.putDouble("lat", extras.getDouble("lat"));
  71.             bundle.putDouble("lng", extras.getDouble("lng"));
  72.             navController.navigate(R.id.map, bundle);
  73.         }
  74.  
  75.         navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
  76.             @SuppressLint("RestrictedApi")
  77.             @Override
  78.             public void onDestinationChanged(@NonNull NavController controller,
  79.                                              @NonNull NavDestination destination, @Nullable Bundle arguments) {
  80.                 switch (destination.getId()) {
  81.                     case R.id.list_places:
  82.                         changeLayoutForListPlaces();
  83.                         break;
  84.                     case R.id.map:
  85.                         changeLayoutForMap();
  86.                         break;
  87.                     case R.id.settings:
  88.                         changeLayoutForSettings();
  89.                         break;
  90.                 }
  91.             }
  92.         });
  93.  
  94.         sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
  95.         sharedPreferences.registerOnSharedPreferenceChangeListener(this);
  96.         activeService = sharedPreferences.getBoolean("switch", true);
  97.  
  98.         connectorService = new ConnectorService(this);
  99.         getLifecycle().addObserver(connectorService);
  100.  
  101.         final ComponentName onBootReceiver = new ComponentName(getApplication().getPackageName(), BootReceiver.class.getName());
  102.         if (getPackageManager().getComponentEnabledSetting(onBootReceiver) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
  103.             getPackageManager().setComponentEnabledSetting(onBootReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
  104.         }
  105.  
  106.         googleApiClient = new GoogleApiClient.Builder(this)
  107.                 .addApi(LocationServices.API)
  108.                 .addConnectionCallbacks(this)
  109.                 .addOnConnectionFailedListener(this)
  110.                 .build();
  111.  
  112.         snackbarActiveService = Snackbar.make(binding.container, R.string.service_not_active,
  113.                 Snackbar.LENGTH_LONG).setAnchorView(binding.fabButton).setAction(R.string.turn_on,
  114.                 new View.OnClickListener() {
  115.                     @Override
  116.                     public void onClick(View v) {
  117.                         SharedPreferences.Editor e = sharedPreferences.edit();
  118.                         e.putBoolean("switch", true);
  119.                         e.apply();
  120.                         startService(new Intent(MainActivity.this, LocationService.class));
  121.                     }
  122.                 });
  123.     }
  124.  
  125.  
  126.  
  127.     public void changeLayoutForListPlaces() {
  128.         TransitionManager.beginDelayedTransition(binding.navHostFragment, transition);
  129.         params.setBehavior(new AppBarLayout.ScrollingViewBehavior(binding.navHostFragment.getContext(), null));
  130.         fm.beginTransaction().detach(activeFragment).attach(placesFragment).commit();
  131.  
  132.         getSupportActionBar().show();
  133.         binding.fabButton.show();
  134.         activeFragment = placesFragment;
  135.         slideUp();
  136.     }
  137.  
  138.     public void changeLayoutForMap() {
  139.         // transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
  140.         TransitionManager.beginDelayedTransition(binding.navHostFragment, transition);
  141.         params.setBehavior(null);
  142.         fm.beginTransaction().detach(activeFragment).attach(mapFragment).commit();
  143.  
  144.         getSupportActionBar().hide();
  145.         binding.fabButton.hide();
  146.         //fm.beginTransaction().hide(activeFragment).show(mapFragment).commit();
  147.         activeFragment = mapFragment;
  148.     }
  149.  
  150.     public void changeLayoutForSettings() {
  151.         TransitionManager.beginDelayedTransition(binding.navHostFragment, transition);
  152.         params.setBehavior(new AppBarLayout.ScrollingViewBehavior(binding.navHostFragment.getContext(), null));
  153.         fm.beginTransaction().detach(activeFragment).attach(placesFragment).commit();
  154.  
  155.         getSupportActionBar().show();
  156.         binding.fabButton.hide();
  157.         activeFragment = settingsFragment;
  158.     }
  159.  
  160.     public void changeLayoutForArchive(FragmentManager fm) {
  161.         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  162.         getSupportActionBar().setDisplayShowTitleEnabled(true);
  163.         getSupportActionBar().setDisplayShowHomeEnabled(true);
  164.         getSupportActionBar().setTitle(getString(R.string.archive));
  165.  
  166.         binding.fabButton.hide();
  167.         slideDown();
  168.         ArchivePlacesFragment archivePlacesFragment = new ArchivePlacesFragment();
  169.         FragmentTransaction ft = fm.beginTransaction();
  170.         ft.replace(R.id.nav_host_fragment, archivePlacesFragment);
  171.         ft.addToBackStack(null);
  172.         ft.commit();
  173.     }
  174.  
  175.     public void slideUp() {
  176.         ViewGroup.LayoutParams layoutParams = binding.navView.getLayoutParams();
  177.         if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
  178.             CoordinatorLayout.Behavior behavior =
  179.                     ((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
  180.             if (behavior instanceof HideBottomViewOnScrollBehavior) {
  181.                 HideBottomViewOnScrollBehavior<BottomNavigationView> hideShowBehavior =
  182.                         (HideBottomViewOnScrollBehavior<BottomNavigationView>) behavior;
  183.                 hideShowBehavior.slideUp(binding.navView);
  184.             }
  185.         }
  186.     }
  187.  
  188.     public void slideDown() {
  189.         ViewGroup.LayoutParams layoutParams = binding.navView.getLayoutParams();
  190.         if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
  191.             CoordinatorLayout.Behavior behavior =
  192.                     ((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
  193.             if (behavior instanceof HideBottomViewOnScrollBehavior) {
  194.                 HideBottomViewOnScrollBehavior<BottomNavigationView> hideShowBehavior =
  195.                         (HideBottomViewOnScrollBehavior<BottomNavigationView>) behavior;
  196.                 hideShowBehavior.slideDown(binding.navView);
  197.             }
  198.         }
  199.     }
  200.  
  201.  
  202.     @Override
  203.     protected void onStart() {
  204.         super.onStart();
  205.         if (!activeService) {
  206.             snackbarActiveService.show();
  207.         }
  208.         googleApiClient.connect();
  209.         mLocationRequest = LocationRequest.create();
  210.  
  211.         LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
  212.         SettingsClient client = LocationServices.getSettingsClient(this);
  213.         Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
  214.  
  215.         task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
  216.             @Override
  217.             public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
  218.             }
  219.         });
  220.  
  221.         task.addOnFailureListener(this, new OnFailureListener() {
  222.             @Override
  223.             public void onFailure(@NonNull Exception e) {
  224.                 if (e instanceof ResolvableApiException) {
  225.                     try {
  226.                         ResolvableApiException resolvable = (ResolvableApiException) e;
  227.                         resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
  228.                     } catch (IntentSender.SendIntentException sendEx) {
  229.                     }
  230.                 }
  231.             }
  232.         });
  233.         requiresLocationPermission();
  234.     }
  235.  
  236.     @Override
  237.     public void onDestroy() {
  238.         super.onDestroy();
  239.         googleApiClient.disconnect();
  240.         unregisterReceiver(CloseReceiver);
  241.     }
  242.  
  243.  
  244.     private void initToolbar() {
  245.         mToolbar = findViewById(R.id.toolbar_actionbar);
  246.         setSupportActionBar(mToolbar);
  247.         if (getSupportActionBar() != null) {
  248.             getSupportActionBar().setDisplayHomeAsUpEnabled(false);
  249.             getSupportActionBar().setDisplayShowTitleEnabled(false);
  250.             getSupportActionBar().setDisplayShowHomeEnabled(true);
  251.         }
  252.         mToolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
  253.     }
  254.  
  255.     @Override
  256.     public boolean onOptionsItemSelected(MenuItem item) {
  257.         switch (item.getItemId()) {
  258.             case android.R.id.home: {
  259.                 if (fm.getBackStackEntryCount() > 0) {
  260.                     fm.popBackStackImmediate();
  261.                 } else {
  262.                     this.onBackPressed();
  263.                 }
  264.             }
  265.         }
  266.         return super.onOptionsItemSelected(item);
  267.     }
  268.  
  269.  
  270.     public void add(View view) {
  271.         Intent intent = new Intent(this, PlaceActivity.class);
  272.         startActivity(intent);
  273.     }
  274.  
  275.     @Override
  276.     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
  277.         switch (s) {
  278.             case "switch":
  279.                 Log.d("mytag", "change status service");
  280.                 activeService = sharedPreferences.getBoolean(s, true);
  281.                 break;
  282.         }
  283.     }
  284.  
  285.     private BroadcastReceiver CloseReceiver = new BroadcastReceiver() {
  286.  
  287.         @Override
  288.         public void onReceive(Context context, Intent intent) {
  289.             Log.i(TAG, "MainActivity закрыт");
  290.             finish();
  291.         }
  292.     };
  293.  
  294.  
  295.     private static void enableLayout(ViewGroup layout, boolean enable) {
  296.         layout.setEnabled(enable);
  297.         for (int i = 0; i < layout.getChildCount(); i++) {
  298.             View child = layout.getChildAt(i);
  299.             if (child instanceof ViewGroup) {
  300.                 enableLayout((ViewGroup) child, enable);
  301.             } else {
  302.                 child.setEnabled(enable);
  303.             }
  304.         }
  305.     }
  306.  
  307.     @Override
  308.     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  309.         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  310.         EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
  311.  
  312.         /*
  313.         if (grantResults.length > 0) {
  314.             boolean locationPermission = grantResults[0] == PackageManager.PERMISSION_GRANTED;
  315.             boolean backGround;
  316.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
  317.                 backGround = grantResults[1] == PackageManager.PERMISSION_GRANTED;
  318.             } else {
  319.                 backGround = true;
  320.             }
  321.  
  322.             if (!locationPermission && !backGround) {
  323.                 for (int i = 0, len = permissions.length; i < len; i++) {
  324.                     String permission = permissions[i];
  325.                     if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
  326.                         boolean showRationale = shouldShowRequestPermissionRationale(permission);
  327.                         Log.d(TAG, permission + " : " + showRationale);
  328.                         if (!showRationale) {
  329.                             Snackbar.make(binding.container,
  330.                                     R.string.manual_access_for_geo,
  331.                                     Snackbar.LENGTH_INDEFINITE).setAnchorView(binding.fabButton).
  332.                                     setAction(R.string.settings,
  333.                                     new View.OnClickListener() {
  334.                                         @Override
  335.                                         public void onClick(View v) {
  336.                                             startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + PACKAGE_NAME)));
  337.                                         }
  338.                                     }).show();
  339.                         } else {
  340.                             Snackbar.make(binding.container,
  341.                                     R.string.geo_access_all_time,
  342.                                     Snackbar.LENGTH_INDEFINITE).setAnchorView(binding.fabButton).
  343.                                     setAction(R.string.turn_on,
  344.                                     new View.OnClickListener() {
  345.                                         @Override
  346.                                         public void onClick(View v) {
  347.                                             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
  348.                                                 ActivityCompat.requestPermissions(MainActivity.this,
  349.                                                         new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
  350.                                                                 Manifest.permission.ACCESS_BACKGROUND_LOCATION},
  351.                                                         LOCATION);
  352.                                             } else {
  353.                                                 ActivityCompat.requestPermissions(MainActivity.this,
  354.                                                         new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
  355.                                                         LOCATION);
  356.                                             }
  357.                                         }
  358.                                     }).show();
  359.                         }
  360.                     }
  361.                 }
  362.             }
  363.         }*/
  364.     }
  365.  
  366.     @AfterPermissionGranted(LOCATION)
  367.     private void requiresLocationPermission() {
  368.         List<String> permsList = new ArrayList<String>() {{
  369.             add(Manifest.permission.ACCESS_FINE_LOCATION);
  370.         }};
  371.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
  372.             permsList.add(0, Manifest.permission.ACCESS_BACKGROUND_LOCATION);
  373.         }
  374.  
  375.         String[] perms = permsList.toArray(new String[0]);
  376.  
  377.         if (EasyPermissions.hasPermissions(this, perms)) {
  378.             enableLayout(binding.container, true);
  379.         } else {
  380.             EasyPermissions.requestPermissions(
  381.                     new PermissionRequest.Builder(this, LOCATION, perms)
  382.                             .setRationale(R.string.permission_rationale)
  383.                             .setPositiveButtonText(R.string.start)
  384.                             .build());
  385.             enableLayout(binding.container, false);
  386.         }
  387.     }
  388.  
  389.     @Override
  390.     public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
  391.         enableLayout(binding.container, true);
  392.     }
  393.  
  394.     @Override
  395.     public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
  396.         enableLayout(binding.container, false);
  397.         for (String perm : perms) {
  398.  
  399.             if (EasyPermissions.permissionPermanentlyDenied(this, perm)) {
  400.                 Snackbar.make(binding.container,
  401.                         R.string.manual_access_for_geo,
  402.                         Snackbar.LENGTH_INDEFINITE).setAction(R.string.settings,
  403.                         new View.OnClickListener() {
  404.                             @Override
  405.                             public void onClick(View v) {
  406.                                 startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + PACKAGE_NAME)));
  407.                             }
  408.                         }).setAnchorView(binding.fabButton)
  409.                         .show();
  410.             } else {
  411.                 Snackbar.make(binding.container,
  412.                         R.string.geo_access_all_time,
  413.                         Snackbar.LENGTH_INDEFINITE).setAction(R.string.turn_on,
  414.                         new View.OnClickListener() {
  415.                             @Override
  416.                             public void onClick(View v) {
  417.                                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
  418.                                     ActivityCompat.requestPermissions(MainActivity.this,
  419.                                             new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
  420.                                                     Manifest.permission.ACCESS_BACKGROUND_LOCATION},
  421.                                             LOCATION);
  422.                                 } else {
  423.                                     ActivityCompat.requestPermissions(MainActivity.this,
  424.                                             new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
  425.                                             LOCATION);
  426.                                 }
  427.                             }
  428.                         }).setAnchorView(binding.fabButton)
  429.                         .show();
  430.             }
  431.         }
  432.     }
  433. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement