mirror of
https://gitlab.com/oeffi/oeffi.git
synced 2025-07-06 17:38:48 +00:00
NetworkPickerActivity, StationsActivity, DirectionsActivity, DirectionsShortcutActivity, PlansPickerActivity, NearestFavoriteStationsWidgetPermissionActivity: use activity result API for requesting permissions
This commit is contained in:
parent
1e265a61da
commit
72c772f334
6 changed files with 80 additions and 97 deletions
|
@ -58,9 +58,10 @@ import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.app.ActivityCompat;
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
@ -132,8 +133,8 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class DirectionsActivity extends OeffiMainActivity implements ActivityCompat.OnRequestPermissionsResultCallback,
|
public class DirectionsActivity extends OeffiMainActivity implements QueryHistoryClickListener,
|
||||||
QueryHistoryClickListener, QueryHistoryContextMenuItemListener {
|
QueryHistoryContextMenuItemListener {
|
||||||
private ConnectivityManager connectivityManager;
|
private ConnectivityManager connectivityManager;
|
||||||
private LocationManager locationManager;
|
private LocationManager locationManager;
|
||||||
|
|
||||||
|
@ -167,9 +168,6 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
|
|
||||||
private static final int DIALOG_CLEAR_HISTORY = 1;
|
private static final int DIALOG_CLEAR_HISTORY = 1;
|
||||||
|
|
||||||
private static final int REQUEST_CODE_LOCATION_PERMISSION_FROM = 4;
|
|
||||||
private static final int REQUEST_CODE_LOCATION_PERMISSION_VIA = 5;
|
|
||||||
private static final int REQUEST_CODE_LOCATION_PERMISSION_TO = 6;
|
|
||||||
private static final int REQUEST_CODE_PICK_CONTACT_FROM = 7;
|
private static final int REQUEST_CODE_PICK_CONTACT_FROM = 7;
|
||||||
private static final int REQUEST_CODE_PICK_CONTACT_VIA = 8;
|
private static final int REQUEST_CODE_PICK_CONTACT_VIA = 8;
|
||||||
private static final int REQUEST_CODE_PICK_CONTACT_TO = 9;
|
private static final int REQUEST_CODE_PICK_CONTACT_TO = 9;
|
||||||
|
@ -184,6 +182,22 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
private static final String INTENT_EXTRA_TIME_SPEC = DirectionsActivity.class.getName() + ".time_spec";
|
private static final String INTENT_EXTRA_TIME_SPEC = DirectionsActivity.class.getName() + ".time_spec";
|
||||||
private static final Intent INTENT_PICK_CONTACTS = new Intent(Intent.ACTION_PICK, CommonDataKinds.StructuredPostal.CONTENT_URI);
|
private static final Intent INTENT_PICK_CONTACTS = new Intent(Intent.ACTION_PICK, CommonDataKinds.StructuredPostal.CONTENT_URI);
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<String> requestLocationPermissionFromLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
if (granted)
|
||||||
|
viewFromLocation.acquireLocation();
|
||||||
|
});
|
||||||
|
private final ActivityResultLauncher<String> requestLocationPermissionViaLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
if (granted)
|
||||||
|
viewViaLocation.acquireLocation();
|
||||||
|
});
|
||||||
|
private final ActivityResultLauncher<String> requestLocationPermissionToLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
if (granted)
|
||||||
|
viewToLocation.acquireLocation();
|
||||||
|
});
|
||||||
|
|
||||||
public static void start(final Context context, @Nullable final Location fromLocation,
|
public static void start(final Context context, @Nullable final Location fromLocation,
|
||||||
@Nullable final Location toLocation, @Nullable final TimeSpec timeSpec, final int intentFlags) {
|
@Nullable final Location toLocation, @Nullable final TimeSpec timeSpec, final int intentFlags) {
|
||||||
final Intent intent = new Intent(context, DirectionsActivity.class).addFlags(intentFlags);
|
final Intent intent = new Intent(context, DirectionsActivity.class).addFlags(intentFlags);
|
||||||
|
@ -198,15 +212,15 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
|
|
||||||
private class LocationContextMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
|
private class LocationContextMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
|
||||||
private final LocationView locationView;
|
private final LocationView locationView;
|
||||||
private final int locationPermissionRequestCode;
|
private final ActivityResultLauncher<String> requestLocationPermissionLauncher;
|
||||||
private final int pickContactRequestCode;
|
private final int pickContactRequestCode;
|
||||||
private final int pickStationRequestCode;
|
private final int pickStationRequestCode;
|
||||||
|
|
||||||
public LocationContextMenuItemClickListener(final LocationView locationView,
|
public LocationContextMenuItemClickListener(final LocationView locationView,
|
||||||
final int locationPermissionRequestCode,
|
final ActivityResultLauncher<String> requestLocationPermissionLauncher,
|
||||||
final int pickContactRequestCode, final int pickStationRequestCode) {
|
final int pickContactRequestCode, final int pickStationRequestCode) {
|
||||||
this.locationView = locationView;
|
this.locationView = locationView;
|
||||||
this.locationPermissionRequestCode = locationPermissionRequestCode;
|
this.requestLocationPermissionLauncher = requestLocationPermissionLauncher;
|
||||||
this.pickContactRequestCode = pickContactRequestCode;
|
this.pickContactRequestCode = pickContactRequestCode;
|
||||||
this.pickStationRequestCode = pickStationRequestCode;
|
this.pickStationRequestCode = pickStationRequestCode;
|
||||||
}
|
}
|
||||||
|
@ -217,8 +231,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
|
||||||
locationView.acquireLocation();
|
locationView.acquireLocation();
|
||||||
else
|
else
|
||||||
ActivityCompat.requestPermissions(DirectionsActivity.this,
|
requestLocationPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION);
|
||||||
new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, locationPermissionRequestCode);
|
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.directions_location_contact) {
|
} else if (item.getItemId() == R.id.directions_location_contact) {
|
||||||
startActivityForResult(INTENT_PICK_CONTACTS, pickContactRequestCode);
|
startActivityForResult(INTENT_PICK_CONTACTS, pickContactRequestCode);
|
||||||
|
@ -308,15 +321,13 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
viewFromLocation.setAdapter(autoCompleteAdapter);
|
viewFromLocation.setAdapter(autoCompleteAdapter);
|
||||||
viewFromLocation.setListener(locationChangeListener);
|
viewFromLocation.setListener(locationChangeListener);
|
||||||
viewFromLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewFromLocation,
|
viewFromLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewFromLocation,
|
||||||
REQUEST_CODE_LOCATION_PERMISSION_FROM,
|
requestLocationPermissionFromLauncher, REQUEST_CODE_PICK_CONTACT_FROM, REQUEST_CODE_PICK_STATION_FROM));
|
||||||
REQUEST_CODE_PICK_CONTACT_FROM, REQUEST_CODE_PICK_STATION_FROM));
|
|
||||||
|
|
||||||
viewViaLocation = findViewById(R.id.directions_via);
|
viewViaLocation = findViewById(R.id.directions_via);
|
||||||
viewViaLocation.setAdapter(autoCompleteAdapter);
|
viewViaLocation.setAdapter(autoCompleteAdapter);
|
||||||
viewViaLocation.setListener(locationChangeListener);
|
viewViaLocation.setListener(locationChangeListener);
|
||||||
viewViaLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewViaLocation,
|
viewViaLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewViaLocation,
|
||||||
REQUEST_CODE_LOCATION_PERMISSION_VIA,
|
requestLocationPermissionViaLauncher, REQUEST_CODE_PICK_CONTACT_VIA, REQUEST_CODE_PICK_STATION_VIA));
|
||||||
REQUEST_CODE_PICK_CONTACT_VIA, REQUEST_CODE_PICK_STATION_VIA));
|
|
||||||
|
|
||||||
viewToLocation = findViewById(R.id.directions_to);
|
viewToLocation = findViewById(R.id.directions_to);
|
||||||
viewToLocation.setAdapter(autoCompleteAdapter);
|
viewToLocation.setAdapter(autoCompleteAdapter);
|
||||||
|
@ -333,8 +344,7 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
viewToLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewToLocation,
|
viewToLocation.setContextMenuItemClickListener(new LocationContextMenuItemClickListener(viewToLocation,
|
||||||
REQUEST_CODE_LOCATION_PERMISSION_TO,
|
requestLocationPermissionToLauncher, REQUEST_CODE_PICK_CONTACT_TO, REQUEST_CODE_PICK_STATION_TO));
|
||||||
REQUEST_CODE_PICK_CONTACT_TO, REQUEST_CODE_PICK_STATION_TO));
|
|
||||||
|
|
||||||
viewProducts = findViewById(R.id.directions_products);
|
viewProducts = findViewById(R.id.directions_products);
|
||||||
viewProductToggles.add(findViewById(R.id.directions_products_i));
|
viewProductToggles.add(findViewById(R.id.directions_products_i));
|
||||||
|
@ -1147,17 +1157,6 @@ public class DirectionsActivity extends OeffiMainActivity implements ActivityCom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions,
|
|
||||||
final int[] grantResults) {
|
|
||||||
if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_FROM)
|
|
||||||
viewFromLocation.acquireLocation();
|
|
||||||
else if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_VIA)
|
|
||||||
viewViaLocation.acquireLocation();
|
|
||||||
else if (requestCode == REQUEST_CODE_LOCATION_PERMISSION_TO)
|
|
||||||
viewToLocation.acquireLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resultPickContact(final Intent result, final LocationView targetLocationView) {
|
private void resultPickContact(final Intent result, final LocationView targetLocationView) {
|
||||||
final Cursor c = managedQuery(result.getData(), null, null, null, null);
|
final Cursor c = managedQuery(result.getData(), null, null, null, null);
|
||||||
if (c.moveToFirst()) {
|
if (c.moveToFirst()) {
|
||||||
|
|
|
@ -30,7 +30,8 @@ import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import de.schildbach.oeffi.Constants;
|
import de.schildbach.oeffi.Constants;
|
||||||
|
@ -58,8 +59,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import javax.net.ssl.SSLException;
|
import javax.net.ssl.SSLException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class DirectionsShortcutActivity extends OeffiActivity
|
public class DirectionsShortcutActivity extends OeffiActivity implements LocationHelper.Callback {
|
||||||
implements ActivityCompat.OnRequestPermissionsResultCallback, LocationHelper.Callback {
|
|
||||||
public static final String INTENT_EXTRA_NETWORK = "network";
|
public static final String INTENT_EXTRA_NETWORK = "network";
|
||||||
public static final String INTENT_EXTRA_TYPE = "type";
|
public static final String INTENT_EXTRA_TYPE = "type";
|
||||||
public static final String INTENT_EXTRA_ID = "stationid";
|
public static final String INTENT_EXTRA_ID = "stationid";
|
||||||
|
@ -76,10 +76,16 @@ public class DirectionsShortcutActivity extends OeffiActivity
|
||||||
private final Handler handler = new Handler();
|
private final Handler handler = new Handler();
|
||||||
private QueryTripsRunnable queryTripsRunnable;
|
private QueryTripsRunnable queryTripsRunnable;
|
||||||
|
|
||||||
private static final int REQUEST_CODE_REQUEST_LOCATION_PERMISSION = 1;
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(DirectionsShortcutActivity.class);
|
private static final Logger log = LoggerFactory.getLogger(DirectionsShortcutActivity.class);
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<String> requestPermissionLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
if (granted)
|
||||||
|
maybeStartLocation();
|
||||||
|
else
|
||||||
|
errorDialog(R.string.acquire_location_no_permission);
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -94,8 +100,7 @@ public class DirectionsShortcutActivity extends OeffiActivity
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
|
||||||
maybeStartLocation();
|
maybeStartLocation();
|
||||||
else
|
else
|
||||||
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
|
requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION);
|
||||||
REQUEST_CODE_REQUEST_LOCATION_PERMISSION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -105,17 +110,6 @@ public class DirectionsShortcutActivity extends OeffiActivity
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions,
|
|
||||||
final int[] grantResults) {
|
|
||||||
if (requestCode == REQUEST_CODE_REQUEST_LOCATION_PERMISSION) {
|
|
||||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
|
||||||
maybeStartLocation();
|
|
||||||
else
|
|
||||||
errorDialog(R.string.acquire_location_no_permission);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void maybeStartLocation() {
|
public void maybeStartLocation() {
|
||||||
if (ContextCompat.checkSelfPermission(this,
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
||||||
|
|
|
@ -40,7 +40,8 @@ import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.activity.ComponentActivity;
|
import androidx.activity.ComponentActivity;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
@ -75,8 +76,8 @@ import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class NetworkPickerActivity extends ComponentActivity implements ActivityCompat.OnRequestPermissionsResultCallback,
|
public class NetworkPickerActivity extends ComponentActivity implements LocationHelper.Callback, NetworkClickListener,
|
||||||
LocationHelper.Callback, NetworkClickListener, NetworkContextMenuItemListener {
|
NetworkContextMenuItemListener {
|
||||||
public static void start(final Context context) {
|
public static void start(final Context context) {
|
||||||
final Intent intent = new Intent(context, NetworkPickerActivity.class);
|
final Intent intent = new Intent(context, NetworkPickerActivity.class);
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
|
@ -102,10 +103,13 @@ public class NetworkPickerActivity extends ComponentActivity implements Activity
|
||||||
private static final String INDEX_FILENAME = "networks.txt";
|
private static final String INDEX_FILENAME = "networks.txt";
|
||||||
private static final int MAX_LAST_NETWORKS = 3;
|
private static final int MAX_LAST_NETWORKS = 3;
|
||||||
|
|
||||||
private static final int REQUEST_CODE_REQUEST_LOCATION_PERMISSION = 1;
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(NetworkPickerActivity.class);
|
private static final Logger log = LoggerFactory.getLogger(NetworkPickerActivity.class);
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<String> requestPermissionLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
maybeStartLocation();
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -195,8 +199,7 @@ public class NetworkPickerActivity extends ComponentActivity implements Activity
|
||||||
|
|
||||||
if (ContextCompat.checkSelfPermission(this,
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
||||||
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_COARSE_LOCATION },
|
requestPermissionLauncher.launch(Manifest.permission.ACCESS_COARSE_LOCATION);
|
||||||
REQUEST_CODE_REQUEST_LOCATION_PERMISSION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -233,13 +236,6 @@ public class NetworkPickerActivity extends ComponentActivity implements Activity
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions,
|
|
||||||
final int[] grantResults) {
|
|
||||||
if (requestCode == REQUEST_CODE_REQUEST_LOCATION_PERMISSION)
|
|
||||||
maybeStartLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void maybeStartLocation() {
|
public void maybeStartLocation() {
|
||||||
if (ContextCompat.checkSelfPermission(this,
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
||||||
|
|
|
@ -33,8 +33,9 @@ import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.app.ActivityCompat;
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||||
|
@ -66,8 +67,8 @@ import org.slf4j.LoggerFactory;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
|
|
||||||
public class PlansPickerActivity extends OeffiMainActivity implements ActivityCompat.OnRequestPermissionsResultCallback,
|
public class PlansPickerActivity extends OeffiMainActivity implements LocationHelper.Callback, PlanClickListener,
|
||||||
LocationHelper.Callback, PlanClickListener, PlanContextMenuItemListener {
|
PlanContextMenuItemListener {
|
||||||
private ConnectivityManager connectivityManager;
|
private ConnectivityManager connectivityManager;
|
||||||
private LocationHelper locationHelper;
|
private LocationHelper locationHelper;
|
||||||
|
|
||||||
|
@ -84,11 +85,15 @@ public class PlansPickerActivity extends OeffiMainActivity implements ActivityCo
|
||||||
|
|
||||||
private Cursor cursor;
|
private Cursor cursor;
|
||||||
|
|
||||||
private static final int REQUEST_CODE_REQUEST_LOCATION_PERMISSION = 1;
|
|
||||||
private static final int THUMB_CACHE_SIZE = 2 * 1024 * 1024;
|
private static final int THUMB_CACHE_SIZE = 2 * 1024 * 1024;
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(PlansPickerActivity.class);
|
private static final Logger log = LoggerFactory.getLogger(PlansPickerActivity.class);
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<String> requestPermissionLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
maybeStartLocation();
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String taskName() {
|
protected String taskName() {
|
||||||
return "plans";
|
return "plans";
|
||||||
|
@ -154,8 +159,7 @@ public class PlansPickerActivity extends OeffiMainActivity implements ActivityCo
|
||||||
|
|
||||||
if (ContextCompat.checkSelfPermission(this,
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
||||||
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_COARSE_LOCATION },
|
requestPermissionLauncher.launch(Manifest.permission.ACCESS_COARSE_LOCATION);
|
||||||
REQUEST_CODE_REQUEST_LOCATION_PERMISSION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -186,13 +190,6 @@ public class PlansPickerActivity extends OeffiMainActivity implements ActivityCo
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions,
|
|
||||||
final int[] grantResults) {
|
|
||||||
if (requestCode == REQUEST_CODE_REQUEST_LOCATION_PERMISSION)
|
|
||||||
maybeStartLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void maybeStartLocation() {
|
public void maybeStartLocation() {
|
||||||
if (ContextCompat.checkSelfPermission(this,
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|
||||||
|
|
|
@ -22,18 +22,27 @@ import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.activity.ComponentActivity;
|
import androidx.activity.ComponentActivity;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class NearestFavoriteStationsWidgetPermissionActivity extends ComponentActivity {
|
public class NearestFavoriteStationsWidgetPermissionActivity extends ComponentActivity {
|
||||||
private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationsWidgetPermissionActivity.class);
|
private static final Logger log = LoggerFactory.getLogger(NearestFavoriteStationsWidgetPermissionActivity.class);
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<String[]> requestPermissionsLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), results -> {
|
||||||
|
for (Map.Entry<String, Boolean> entry : results.entrySet())
|
||||||
|
log.info("{} {}", entry.getKey(), entry.getValue() ? "granted" : "denied");
|
||||||
|
NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget
|
||||||
|
finish();
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -44,16 +53,6 @@ public class NearestFavoriteStationsWidgetPermissionActivity extends ComponentAc
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || permissions.isEmpty())
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || permissions.isEmpty())
|
||||||
permissions.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
|
permissions.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
|
||||||
log.info("Requesting permissions: {}", permissions);
|
log.info("Requesting permissions: {}", permissions);
|
||||||
ActivityCompat.requestPermissions(this, permissions.toArray(new String[0]), 0);
|
requestPermissionsLauncher.launch(permissions.toArray(new String[0]));
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions,
|
|
||||||
final int[] grantResults) {
|
|
||||||
for (int i = 0; i < permissions.length; i++)
|
|
||||||
log.info("{}{} granted",
|
|
||||||
permissions[i], grantResults[i] == PackageManager.PERMISSION_GRANTED ? "" : " " + "not");
|
|
||||||
NearestFavoriteStationWidgetService.scheduleImmediate(this); // refresh app-widget
|
|
||||||
finish();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,8 +53,9 @@ import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ViewAnimator;
|
import android.widget.ViewAnimator;
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.app.ActivityCompat;
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
@ -116,7 +117,7 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class StationsActivity extends OeffiMainActivity implements StationsAware, LocationAware,
|
public class StationsActivity extends OeffiMainActivity implements StationsAware, LocationAware,
|
||||||
ActivityCompat.OnRequestPermissionsResultCallback, StationContextMenuItemListener {
|
StationContextMenuItemListener {
|
||||||
private ConnectivityManager connectivityManager;
|
private ConnectivityManager connectivityManager;
|
||||||
private LocationManager locationManager;
|
private LocationManager locationManager;
|
||||||
private SensorManager sensorManager;
|
private SensorManager sensorManager;
|
||||||
|
@ -160,6 +161,11 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(StationsActivity.class);
|
private static final Logger log = LoggerFactory.getLogger(StationsActivity.class);
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<String> requestPermissionLauncher =
|
||||||
|
registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
|
||||||
|
startLocationProvider();
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String taskName() {
|
protected String taskName() {
|
||||||
return "stations";
|
return "stations";
|
||||||
|
@ -244,8 +250,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
|
||||||
|
|
||||||
final Button locationPermissionRequestButton = findViewById(
|
final Button locationPermissionRequestButton = findViewById(
|
||||||
R.id.stations_location_permission_request_button);
|
R.id.stations_location_permission_request_button);
|
||||||
locationPermissionRequestButton.setOnClickListener(v -> ActivityCompat.requestPermissions(StationsActivity.this,
|
locationPermissionRequestButton.setOnClickListener(v -> requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION));
|
||||||
new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, 0));
|
|
||||||
|
|
||||||
final Button locationSettingsButton = findViewById(R.id.stations_list_location_settings);
|
final Button locationSettingsButton = findViewById(R.id.stations_list_location_settings);
|
||||||
locationSettingsButton.setOnClickListener(v -> startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)));
|
locationSettingsButton.setOnClickListener(v -> startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)));
|
||||||
|
@ -1342,13 +1347,6 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions,
|
|
||||||
final int[] grantResults) {
|
|
||||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
|
||||||
startLocationProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onStationContextMenuItemClick(final int adapterPosition, final NetworkId network,
|
public boolean onStationContextMenuItemClick(final int adapterPosition, final NetworkId network,
|
||||||
final Location station, final @Nullable List<Departure> departures, final int menuItemId) {
|
final Location station, final @Nullable List<Departure> departures, final int menuItemId) {
|
||||||
if (menuItemId == R.id.station_context_add_favorite) {
|
if (menuItemId == R.id.station_context_add_favorite) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue