Changeset View
Changeset View
Standalone View
Standalone View
src/it/reyboz/bustorino/fragments/MainScreenFragment.java
package it.reyboz.bustorino.fragments; | package it.reyboz.bustorino.fragments; | ||||
import android.Manifest; | import android.Manifest; | ||||
import android.content.Context; | import android.content.Context; | ||||
import android.content.Intent; | |||||
import android.content.pm.PackageManager; | import android.content.pm.PackageManager; | ||||
import android.location.Criteria; | import android.location.Criteria; | ||||
import android.location.Location; | import android.location.Location; | ||||
import android.net.Uri; | |||||
import android.os.Build; | import android.os.Build; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import androidx.activity.result.ActivityResultCallback; | import androidx.activity.result.ActivityResultCallback; | ||||
import androidx.activity.result.ActivityResultLauncher; | import androidx.activity.result.ActivityResultLauncher; | ||||
import androidx.activity.result.contract.ActivityResultContracts; | import androidx.activity.result.contract.ActivityResultContracts; | ||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
Show All 16 Lines | |||||
import android.widget.Button; | import android.widget.Button; | ||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.ImageButton; | import android.widget.ImageButton; | ||||
import android.widget.ProgressBar; | import android.widget.ProgressBar; | ||||
import android.widget.TextView; | import android.widget.TextView; | ||||
import android.widget.Toast; | import android.widget.Toast; | ||||
import com.google.android.material.floatingactionbutton.FloatingActionButton; | import com.google.android.material.floatingactionbutton.FloatingActionButton; | ||||
import com.google.zxing.integration.android.IntentIntegrator; | |||||
import java.util.Map; | import java.util.Map; | ||||
import it.reyboz.bustorino.R; | import it.reyboz.bustorino.R; | ||||
import it.reyboz.bustorino.backend.*; | import it.reyboz.bustorino.backend.*; | ||||
import it.reyboz.bustorino.middleware.AppLocationManager; | import it.reyboz.bustorino.middleware.AppLocationManager; | ||||
import it.reyboz.bustorino.middleware.AsyncArrivalsSearcher; | import it.reyboz.bustorino.middleware.AsyncArrivalsSearcher; | ||||
import it.reyboz.bustorino.middleware.AsyncStopsSearcher; | import it.reyboz.bustorino.middleware.AsyncStopsSearcher; | ||||
import it.reyboz.bustorino.middleware.BarcodeScanContract; | |||||
import it.reyboz.bustorino.middleware.BarcodeScanOptions; | |||||
import it.reyboz.bustorino.middleware.BarcodeScanUtils; | |||||
import it.reyboz.bustorino.util.LocationCriteria; | import it.reyboz.bustorino.util.LocationCriteria; | ||||
import it.reyboz.bustorino.util.Permissions; | import it.reyboz.bustorino.util.Permissions; | ||||
import static it.reyboz.bustorino.backend.utils.getBusStopIDFromUri; | |||||
import static it.reyboz.bustorino.util.Permissions.LOCATION_PERMISSIONS; | import static it.reyboz.bustorino.util.Permissions.LOCATION_PERMISSIONS; | ||||
import static it.reyboz.bustorino.util.Permissions.LOCATION_PERMISSION_GIVEN; | import static it.reyboz.bustorino.util.Permissions.LOCATION_PERMISSION_GIVEN; | ||||
/** | /** | ||||
* A simple {@link Fragment} subclass. | * A simple {@link Fragment} subclass. | ||||
* Use the {@link MainScreenFragment#newInstance} factory method to | * Use the {@link MainScreenFragment#newInstance} factory method to | ||||
* create an instance of this fragment. | * create an instance of this fragment. | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | private final Runnable refreshStop = new Runnable() { | ||||
String stopName = fragment.getStopID(); | String stopName = fragment.getStopID(); | ||||
new AsyncArrivalsSearcher(fragmentHelper, fragment.getCurrentFetchersAsArray(), getContext()).execute(stopName); | new AsyncArrivalsSearcher(fragmentHelper, fragment.getCurrentFetchersAsArray(), getContext()).execute(stopName); | ||||
} | } | ||||
} else //we create a new fragment, which is WRONG | } else //we create a new fragment, which is WRONG | ||||
new AsyncArrivalsSearcher(fragmentHelper, arrivalsFetchers, getContext()).execute(); | new AsyncArrivalsSearcher(fragmentHelper, arrivalsFetchers, getContext()).execute(); | ||||
} | } | ||||
}; | }; | ||||
// | |||||
private final ActivityResultLauncher<BarcodeScanOptions> barcodeLauncher = registerForActivityResult(new BarcodeScanContract(), | |||||
result -> { | |||||
if(result!=null && result.getContents()!=null) { | |||||
//Toast.makeText(MyActivity.this, "Cancelled", Toast.LENGTH_LONG).show(); | |||||
Uri uri; | |||||
try { | |||||
uri = Uri.parse(result.getContents()); // this apparently prevents NullPointerException. Somehow. | |||||
} catch (NullPointerException e) { | |||||
if (getContext()!=null) | |||||
Toast.makeText(getContext().getApplicationContext(), | |||||
R.string.no_qrcode, Toast.LENGTH_SHORT).show(); | |||||
return; | |||||
} | |||||
String busStopID = getBusStopIDFromUri(uri); | |||||
busStopSearchByIDEditText.setText(busStopID); | |||||
requestArrivalsForStopID(busStopID); | |||||
} else { | |||||
//Toast.makeText(MyActivity.this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); | |||||
if (getContext()!=null) | |||||
Toast.makeText(getContext().getApplicationContext(), | |||||
R.string.no_qrcode, Toast.LENGTH_SHORT).show(); | |||||
} | |||||
}); | |||||
/// LOCATION STUFF /// | /// LOCATION STUFF /// | ||||
boolean pendingNearbyStopsRequest = false; | boolean pendingNearbyStopsRequest = false; | ||||
boolean locationPermissionGranted, locationPermissionAsked = false; | boolean locationPermissionGranted, locationPermissionAsked = false; | ||||
AppLocationManager locationManager; | AppLocationManager locationManager; | ||||
private final LocationCriteria cr = new LocationCriteria(2000, 10000); | private final LocationCriteria cr = new LocationCriteria(2000, 10000); | ||||
▲ Show 20 Lines • Show All 321 Lines • ▼ Show 20 Lines | public class MainScreenFragment extends ScreenBaseFragment implements FragmentListenerMain{ | ||||
GUI METHODS | GUI METHODS | ||||
*/ | */ | ||||
/** | /** | ||||
* QR scan button clicked | * QR scan button clicked | ||||
* | * | ||||
* @param v View QRButton clicked | * @param v View QRButton clicked | ||||
*/ | */ | ||||
public void onQRButtonClick(View v) { | public void onQRButtonClick(View v) { | ||||
IntentIntegrator integrator = new IntentIntegrator(getActivity()); | |||||
integrator.initiateScan(); | BarcodeScanOptions scanOptions = new BarcodeScanOptions(); | ||||
Intent intent = scanOptions.createScanIntent(); | |||||
if(!BarcodeScanUtils.checkTargetPackageExists(getContext(), intent)){ | |||||
BarcodeScanUtils.showDownloadDialog(null, this); | |||||
}else { | |||||
barcodeLauncher.launch(scanOptions); | |||||
} | |||||
} | } | ||||
public void onHideHint(View v) { | public void onHideHint(View v) { | ||||
hideHints(); | hideHints(); | ||||
setOption(OPTION_SHOW_LEGEND, false); | setOption(OPTION_SHOW_LEGEND, false); | ||||
} | } | ||||
/** | /** | ||||
* OK this is pure shit | * OK this is pure shit | ||||
▲ Show 20 Lines • Show All 290 Lines • ▼ Show 20 Lines | class NearbyStopsRequester implements Runnable { | ||||
} else if(!haveProviders){ | } else if(!haveProviders){ | ||||
Log.e(DEBUG_TAG, "NO PROVIDERS FOR POSITION"); | Log.e(DEBUG_TAG, "NO PROVIDERS FOR POSITION"); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
No newline at end of file | No newline at end of file |
Public contents are in Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA) or GNU Free Documentation License (at your option) unless otherwise noted. · Contact / Register