SD-188 - request audio permission on radio tab select
This commit is contained in:
parent
34c578fdf5
commit
66625bcdd1
@ -0,0 +1,5 @@
|
||||
package com.safemobile.enums;
|
||||
|
||||
public enum ProviderSettingsStatus {
|
||||
ACTION_APPLICATION_DETAILS_SETTINGS
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.safemobile.helpers;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.safemobile.enums.ProviderSettingsStatus;
|
||||
|
||||
public class ProviderSettingsHelper {
|
||||
private static final String PACKAGE = "package";
|
||||
|
||||
public static String getAction(ProviderSettingsStatus providerSettingsStatus){
|
||||
switch (providerSettingsStatus){
|
||||
case ACTION_APPLICATION_DETAILS_SETTINGS:
|
||||
return "android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS";
|
||||
default:
|
||||
return "android.provider.Settings";
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean canHandleAction(Context context, String action) {
|
||||
Intent intent = new Intent(action);
|
||||
Uri uri = Uri.fromParts(PACKAGE, context.getPackageName(), null);
|
||||
|
||||
intent.setData(uri);
|
||||
|
||||
return context.getPackageManager() != null && intent.resolveActivity(context.getPackageManager()) != null;
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.safemobile.interfaces;
|
||||
|
||||
import android.app.Activity;
|
||||
|
||||
import com.google.android.gms.tasks.Task;
|
||||
|
||||
public interface IDialogService {
|
||||
Task<Boolean> showDialog(Activity activity, String title, String message, String cancel, String ok);
|
||||
Task<Boolean> showPermissionRequestDialog(Activity activity, String title, String message, String cancel);
|
||||
|
||||
void showError(Activity activity, String message);
|
||||
}
|
@ -13,21 +13,27 @@ import java.util.Objects;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import com.google.android.gms.tasks.Task;
|
||||
import com.safemobile.activities.AbstractEmptyActivity;
|
||||
import com.safemobile.activities.AbstractLiveActivity;
|
||||
import com.safemobile.activities.AbstractMessagesActivity;
|
||||
import com.safemobile.activities.AbstractRadioActivity;
|
||||
import com.safemobile.activities.AbstractSDParentActivity;
|
||||
import com.safemobile.enums.AuthorizationCode;
|
||||
import com.safemobile.enums.AuthorizationStatus;
|
||||
import com.safemobile.interfaces.IPermissionModule;
|
||||
import com.safemobile.interfaces.ITCPListener;
|
||||
import com.safemobile.interfaces.TCPEvent;
|
||||
import com.safemobile.lib.Alarm;
|
||||
import com.safemobile.lib.AlarmMSG;
|
||||
import com.safemobile.lib.AppParams;
|
||||
import com.safemobile.lib.DialogService;
|
||||
import com.safemobile.lib.GPSmsg;
|
||||
import com.safemobile.lib.HistCountmsg;
|
||||
import com.safemobile.lib.HistPos;
|
||||
import com.safemobile.lib.HistPosmsg;
|
||||
import com.safemobile.lib.OperationCodes;
|
||||
import com.safemobile.lib.PermissionModule;
|
||||
import com.safemobile.lib.RadioMSG;
|
||||
import com.safemobile.lib.LastPos;
|
||||
import com.safemobile.lib.LastPosmsg;
|
||||
@ -46,6 +52,7 @@ import com.safemobile.services.TCPService;
|
||||
import com.safemobile.services.TCPhandler;
|
||||
import com.safemobile.services.TCPService.TCPBinder;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Dialog;
|
||||
import android.app.Notification;
|
||||
@ -57,6 +64,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.AssetManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
@ -81,6 +89,8 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.widget.TabHost.TabSpec;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class TabLayoutActivity extends AbstractSDParentActivity {
|
||||
|
||||
/* Misc */
|
||||
@ -562,6 +572,15 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
||||
buttonRadio.setVisibility(View.GONE);
|
||||
buttonRadio.setOnClickListener(v -> {
|
||||
if (!buttonRadio.isSelected()) {
|
||||
|
||||
// check audio permission
|
||||
IPermissionModule permissionModule = new PermissionModule();
|
||||
AuthorizationStatus audioAuthorizationStatus = permissionModule.getAuthorizationStatus(this, AuthorizationCode.RECORD_AUDIO);
|
||||
if (audioAuthorizationStatus != AuthorizationStatus.AUTHORIZE) {
|
||||
permissionModule.requestAuthorization(this, AuthorizationCode.RECORD_AUDIO);
|
||||
return;
|
||||
}
|
||||
|
||||
// select button
|
||||
buttonRadio.setSelected(true);
|
||||
// deselect other buttons
|
||||
@ -2209,4 +2228,71 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
||||
intent.putExtra("extra", new SerializedObject(object, action));
|
||||
getBaseContext().sendBroadcast(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
|
||||
SM.Debug("onRequestPermissionsResult", "[requestCode] " + requestCode );
|
||||
String permission = "";
|
||||
switch (requestCode) {
|
||||
case PermissionModule.RECORD_AUDIO_PERMISSION_REQUEST_CODE:
|
||||
permission = Manifest.permission.RECORD_AUDIO;
|
||||
break;
|
||||
default: throw new IllegalStateException("Unexpected value: " + requestCode);
|
||||
}
|
||||
|
||||
AuthorizationStatus result;
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
result = AuthorizationStatus.AUTHORIZE;
|
||||
} else {
|
||||
result = AuthorizationStatus.DENIED;
|
||||
}
|
||||
|
||||
if (permissions.length == 0)
|
||||
return;
|
||||
|
||||
if (permissions[0].equals(Manifest.permission.RECORD_AUDIO)){
|
||||
onAudioPermissionChanged(result);
|
||||
}
|
||||
}
|
||||
|
||||
private void onAudioPermissionChanged(AuthorizationStatus result) {
|
||||
if (result == AuthorizationStatus.AUTHORIZE){
|
||||
// select button
|
||||
buttonRadio.setSelected(true);
|
||||
// deselect other buttons
|
||||
buttonAlarms.setSelected(false);
|
||||
buttonLive.setSelected(false);
|
||||
buttonRecordings.setSelected(false);
|
||||
buttonHistory.setSelected(false);
|
||||
buttonSetup.setSelected(false);
|
||||
buttonText.setSelected(false);
|
||||
// select tab
|
||||
tabHost.setCurrentTabByTag(RADIO);
|
||||
AppParams.crtTab = AppParams.Tabs.radio;
|
||||
|
||||
if (getRadioActivity() != null && getRadioActivity().allVehicle != null && getRadioActivity().allVehicle.isEmpty()) {
|
||||
getRadioActivity().allVehicle = getAllVehicle();
|
||||
getRadioActivity().UpdateVehicle();
|
||||
}
|
||||
}
|
||||
else {
|
||||
DialogService dialogService = new DialogService();
|
||||
Task<Boolean> responseTask = dialogService.showPermissionRequestDialog(this, "title", "permissions denied", getString(R.string.cancel));
|
||||
responseTask.addOnCompleteListener(task -> waitForUserInput(task.getResult()));
|
||||
}
|
||||
}
|
||||
|
||||
private void waitForUserInput(Boolean result) {
|
||||
if (result)
|
||||
{
|
||||
//navigate to phone's settings
|
||||
//ToDo: make the navigation .. see ProviderSettingsHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
package com.safemobile.lib;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
|
||||
import com.google.android.gms.tasks.Task;
|
||||
import com.google.android.gms.tasks.TaskCompletionSource;
|
||||
import com.safemobile.dispatch.R;
|
||||
import com.safemobile.interfaces.IDialogService;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
public class DialogService implements IDialogService {
|
||||
@Override
|
||||
public Task<Boolean> showDialog(Activity activity, String title, String message, String cancel, String ok) {
|
||||
TaskCompletionSource<Boolean> taskCompletionSource = new TaskCompletionSource<>();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity)
|
||||
.setTitle(title)
|
||||
.setMessage(message)
|
||||
.setCancelable(false)
|
||||
.setNegativeButton(cancel, (dialog, which) -> {
|
||||
taskCompletionSource.trySetResult(false);
|
||||
dialog.dismiss();
|
||||
})
|
||||
.setPositiveButton(ok, (dialog, which) -> taskCompletionSource.trySetResult(true));
|
||||
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
return taskCompletionSource.getTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<Boolean> showPermissionRequestDialog(Activity activity, String title, String message, String cancel) {
|
||||
return showDialog(activity,title,message,cancel, activity.getString(R.string.go_to_settings));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showError(Activity activity, String message) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity)
|
||||
.setTitle(R.string.DialoService_Info_ErrorMessage)
|
||||
.setMessage(message)
|
||||
.setCancelable(false)
|
||||
.setNeutralButton(R.string.ok, (dialog, which) -> dialog.dismiss());
|
||||
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
}
|
||||
}
|
@ -13,7 +13,7 @@ import com.safemobile.interfaces.IPermissionModule;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
public class PermissionService implements IPermissionModule {
|
||||
public class PermissionModule implements IPermissionModule {
|
||||
private static final String[] AUDIO_PERMISSIONS = {Manifest.permission.RECORD_AUDIO};
|
||||
private static final String[] LOCATION_PERMISSIONS = {
|
||||
Manifest.permission.ACCESS_COARSE_LOCATION,
|
@ -24,14 +24,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8dp"
|
||||
android:textSize="18dp"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textColor="@color/black"
|
||||
/>
|
||||
<TextView android:id="@+id/text2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8dp"
|
||||
android:textSize="18dp"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textColor="@color/black"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
@ -257,5 +257,7 @@
|
||||
|
||||
|
||||
<string name="speedMph">%1$d mph</string>
|
||||
<string name="DialoService_Info_ErrorMessage">Oops, something happened</string>
|
||||
<string name="go_to_settings">Go to settings</string>
|
||||
|
||||
</resources>
|
Loading…
Reference in New Issue
Block a user