From 14c30a1c808bbcc12a9baf8f7905952aaa19e17e Mon Sep 17 00:00:00 2001 From: nutzma75019 Date: Thu, 22 Jun 2023 00:38:17 +0200 Subject: [PATCH] Permissions --- app/src/main/AndroidManifest.xml | 2 + .../greenwatch/AccelerometerActivity.java | 14 +- .../greenwatch/AudiodetectionActivity.java | 14 +- ...udiodetectionAndAccelerometerActivity.java | 15 +- .../com/example/greenwatch/MainActivity.java | 47 +++++-- .../com/example/greenwatch/Permission.java | 128 ++++++++++++++++++ .../greenwatch/VideodetectionActivity.java | 14 +- ...ideodetectionAndAccelerometerActivity.java | 14 +- .../viewmodels/MainActivityViewModel.java | 18 --- 9 files changed, 233 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/com/example/greenwatch/Permission.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e66c2b5..eef709a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,8 @@ + + diff --git a/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java b/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java index ec863b2..819f05e 100644 --- a/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java +++ b/app/src/main/java/com/example/greenwatch/AccelerometerActivity.java @@ -32,6 +32,7 @@ public class AccelerometerActivity extends AppCompatActivity implements SensorEv private TextView accelerometerWarningTV; private Button backToMainActivityButton; private AccelerometerViewModel mAccelerometerViewModel; + private Permission permission = new Permission(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -84,7 +85,18 @@ public class AccelerometerActivity extends AppCompatActivity implements SensorEv @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { - Toast.makeText(AccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + if(permission.alarmRechtePruefen(AccelerometerActivity.this, AccelerometerActivity.this)){ + Toast.makeText(AccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo AlarmHandling einfügen + } else { + permission.alarmRechteAnfordern(AccelerometerActivity.this); + if(permission.alarmRechtePruefen(AccelerometerActivity.this, AccelerometerActivity.this)){ + Toast.makeText(AccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo Alarmhandling einfügen + } else { + Toast.makeText(AccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); + } + } } else { Toast.makeText(AccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/example/greenwatch/AudiodetectionActivity.java b/app/src/main/java/com/example/greenwatch/AudiodetectionActivity.java index 175df5c..a4fbe93 100644 --- a/app/src/main/java/com/example/greenwatch/AudiodetectionActivity.java +++ b/app/src/main/java/com/example/greenwatch/AudiodetectionActivity.java @@ -24,6 +24,7 @@ import java.util.List; public class AudiodetectionActivity extends AppCompatActivity { private TextView microfonStatusMessage; private Button backToMainActivityButton; + private Permission permission = new Permission(); private MicrofonViewModel mMicrofonViewModel; @Override @@ -75,7 +76,18 @@ public class AudiodetectionActivity extends AppCompatActivity { @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { - Toast.makeText(AudiodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + if(permission.alarmRechtePruefen(AudiodetectionActivity.this, AudiodetectionActivity.this)){ + Toast.makeText(AudiodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo AlarmHandling einfügen + } else { + permission.alarmRechteAnfordern(AudiodetectionActivity.this); + if(permission.alarmRechtePruefen(AudiodetectionActivity.this, AudiodetectionActivity.this)){ + Toast.makeText(AudiodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo Alarmhandling einfügen + } else { + Toast.makeText(AudiodetectionActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); + } + } } else { Toast.makeText(AudiodetectionActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/example/greenwatch/AudiodetectionAndAccelerometerActivity.java b/app/src/main/java/com/example/greenwatch/AudiodetectionAndAccelerometerActivity.java index 56d26a2..0185e93 100644 --- a/app/src/main/java/com/example/greenwatch/AudiodetectionAndAccelerometerActivity.java +++ b/app/src/main/java/com/example/greenwatch/AudiodetectionAndAccelerometerActivity.java @@ -31,6 +31,8 @@ public class AudiodetectionAndAccelerometerActivity extends AppCompatActivity im private AudiodetectionAndAccelerometerViewModel mAudiodetectionAndAccelerometerViewModel; private Button backToMainActivity; + private Permission permission = new Permission(); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -80,7 +82,18 @@ public class AudiodetectionAndAccelerometerActivity extends AppCompatActivity im @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { - Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + if(permission.alarmRechtePruefen(AudiodetectionAndAccelerometerActivity.this, AudiodetectionAndAccelerometerActivity.this)){ + Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo AlarmHandling einfügen + } else { + permission.alarmRechteAnfordern(AudiodetectionAndAccelerometerActivity.this); + if(permission.alarmRechtePruefen(AudiodetectionAndAccelerometerActivity.this, AudiodetectionAndAccelerometerActivity.this)){ + Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo Alarmhandling einfügen + } else { + Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); + } + } } else { Toast.makeText(AudiodetectionAndAccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/example/greenwatch/MainActivity.java b/app/src/main/java/com/example/greenwatch/MainActivity.java index 43a534b..1cc147a 100644 --- a/app/src/main/java/com/example/greenwatch/MainActivity.java +++ b/app/src/main/java/com/example/greenwatch/MainActivity.java @@ -6,6 +6,8 @@ import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -17,6 +19,7 @@ import com.example.greenwatch.adapters.DeviceListAdapter; import com.example.greenwatch.models.Device; import com.example.greenwatch.viewmodels.MainActivityViewModel; + import java.util.List; public class MainActivity extends AppCompatActivity { @@ -28,12 +31,19 @@ public class MainActivity extends AppCompatActivity { private Button videodetectionAndAccelerometerButton; private Button connectionButton; private MainActivityViewModel mMainActivityViewModel; + private Permission permission = new Permission(); + + private Activity activity = new Activity(); + private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + activity = MainActivity.this; + context = MainActivity.this; + audiodetectionButton = (Button) findViewById(R.id.audiodetectionButton); videodetectionButton = (Button) findViewById(R.id.videodetectionButton); accelerometerButton = (Button) findViewById(R.id.accelerometerButton); @@ -55,10 +65,10 @@ public class MainActivity extends AppCompatActivity { final AlarmHistoryListAdapter alarmHistoryListAdapter = new AlarmHistoryListAdapter(); alarmHistoryListRecyclerView.setAdapter(alarmHistoryListAdapter); + permission.startRechtePruefen(this, this); + mMainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class); mMainActivityViewModel.init(); - mMainActivityViewModel.accessRequestCamera(this); - mMainActivityViewModel.accessRequestMicrofon(this); mMainActivityViewModel.getConnectedDeviceList().observe(this, new Observer>() { @Override public void onChanged(List devices) { @@ -77,7 +87,18 @@ public class MainActivity extends AppCompatActivity { @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { - Toast.makeText(MainActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + if(permission.alarmRechtePruefen(context, activity)){ + Toast.makeText(MainActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo AlarmHandling einfügen + } else { + permission.alarmRechteAnfordern(activity); + if(permission.alarmRechtePruefen(context, activity)){ + Toast.makeText(MainActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo Alarmhandling einfügen + } else { + Toast.makeText(MainActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); + } + } } else { Toast.makeText(MainActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); @@ -88,22 +109,23 @@ public class MainActivity extends AppCompatActivity { audiodetectionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (mMainActivityViewModel.isMicrofonAccessAllowed(MainActivity.this)) { + + if (permission.microRechtePruefen(context, activity)) { openAudiodetectionActivity(); } else { - mMainActivityViewModel.accessRequestMicrofon(MainActivity.this); + permission.microRechteAnfordern(activity); } } }); videodetectionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (mMainActivityViewModel.isCameraAccessAllowed(MainActivity.this)) { + if (permission.kameraRechtePruefen(context, activity)) { openVideodetectionActivity(); } else { - mMainActivityViewModel.accessRequestCamera(MainActivity.this); + permission.kameraRechteAnfordern(activity); } } }); @@ -117,18 +139,23 @@ public class MainActivity extends AppCompatActivity { audiodetectionAndAccelerometerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (mMainActivityViewModel.isMicrofonAccessAllowed(MainActivity.this)) { + if (permission.microRechtePruefen(context, activity)) { openAudiodetectionAndAccelerometerActivity(); } else { - mMainActivityViewModel.accessRequestMicrofon(MainActivity.this); + permission.microRechteAnfordern(activity); } } }); videodetectionAndAccelerometerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - openVideodetectionAndAccelerometerActivity(); + if (permission.kameraRechtePruefen(context, activity)) { + openVideodetectionAndAccelerometerActivity(); + } + else { + permission.kameraRechteAnfordern(activity); + } } }); connectionButton.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/example/greenwatch/Permission.java b/app/src/main/java/com/example/greenwatch/Permission.java new file mode 100644 index 0000000..e7de2f9 --- /dev/null +++ b/app/src/main/java/com/example/greenwatch/Permission.java @@ -0,0 +1,128 @@ +package com.example.greenwatch; + +import static android.Manifest.permission.CAMERA; +import static android.Manifest.permission.RECORD_AUDIO; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; + +import static androidx.core.app.ActivityCompat.requestPermissions; +import static androidx.core.content.ContextCompat.checkSelfPermission; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.util.Log; +import android.view.View; + +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + + + +public class Permission { + private static final int PERMISSION_REQUEST_MICRO = 1; + private static final int PERMISSION_REQUEST_CAMERA = 2; + private static final int PERMISSION_REQUEST_ALARM = 1234; + private static final int PERMISSION_REQUEST_START = 1235; + + public void startRechtePruefen(Context context, Activity activity){ + boolean rechtKamera = checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED; + boolean rechtAudio = checkSelfPermission(context, RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED; + boolean rechtSchreiben = checkSelfPermission(context, WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; + boolean rechtLesen = checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; + + Log.d("Kamera Rechte", String.valueOf(rechtKamera)); + Log.d("Audio Rechte", String.valueOf(rechtAudio)); + Log.d("Schreib Rechte", String.valueOf(rechtSchreiben)); + Log.d("Lese Rechte", String.valueOf(rechtLesen)); + + if(rechtKamera && rechtAudio && rechtSchreiben && rechtLesen){ + Log.d("Rechte", "erteilt"); + } else { + startRechteAnfordern(activity); + } + } + + public boolean kameraRechtePruefen(Context context, Activity activity){ + boolean rechtKamera = checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED; + Log.d("Kamera Rechte", String.valueOf(rechtKamera)); + + if(rechtKamera){ + Log.d("Kamerarechte", "erteilt"); + return true; + } else { + kameraRechteAnfordern(activity); + if(checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED){ + return true; + } else { + return false; + } + } + } + + public boolean microRechtePruefen(Context context, Activity activity){ + boolean rechtAudio = checkSelfPermission(context, RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED; + Log.d("Audio Rechte", String.valueOf(rechtAudio)); + + if(rechtAudio){ + Log.d("Rechte", "erteilt"); + return true; + } else { + microRechteAnfordern(activity); + if(checkSelfPermission(context, RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED){ + return true; + } else { + return false; + } + } + } + + public boolean alarmRechtePruefen(Context context, Activity activity){ + boolean rechtKamera = checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED; + boolean rechtAudio = checkSelfPermission(context, RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED; + boolean rechtSchreiben = checkSelfPermission(context, WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; + boolean rechtLesen = checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; + + Log.d("Kamera Rechte", String.valueOf(rechtKamera)); + Log.d("Audio Rechte", String.valueOf(rechtAudio)); + Log.d("Schreib Rechte", String.valueOf(rechtSchreiben)); + Log.d("Lese Rechte", String.valueOf(rechtLesen)); + + if(rechtKamera && rechtAudio && rechtSchreiben && rechtLesen){ + Log.d("Rechte", "erteilt"); + return true; + } else { + alarmRechteAnfordern(activity); + if(checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED + && checkSelfPermission(context, RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED + && checkSelfPermission(context, WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED + && checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){ + return true; + } else { + return false; + } + } + } + + public void startRechteAnfordern(Activity activity){ + ActivityCompat.requestPermissions(activity, new String[]{CAMERA, RECORD_AUDIO, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_START); + } + + public void kameraRechteAnfordern(Activity activity){ + ActivityCompat.requestPermissions(activity, new String[]{CAMERA}, PERMISSION_REQUEST_CAMERA); + } + + public void microRechteAnfordern(Activity activity){ + ActivityCompat.requestPermissions(activity, new String[]{RECORD_AUDIO}, PERMISSION_REQUEST_MICRO); + } + + public void alarmRechteAnfordern(Activity activity){ + ActivityCompat.requestPermissions(activity, new String[]{CAMERA, RECORD_AUDIO, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_ALARM); + } + +} diff --git a/app/src/main/java/com/example/greenwatch/VideodetectionActivity.java b/app/src/main/java/com/example/greenwatch/VideodetectionActivity.java index e6a7f95..aeca11c 100644 --- a/app/src/main/java/com/example/greenwatch/VideodetectionActivity.java +++ b/app/src/main/java/com/example/greenwatch/VideodetectionActivity.java @@ -27,6 +27,7 @@ public class VideodetectionActivity extends AppCompatActivity { private Button backToMainActivity; private VideodetectionViewModel mVideoDetectionViewModel; + private Permission permission = new Permission(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -76,7 +77,18 @@ public class VideodetectionActivity extends AppCompatActivity { @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { - Toast.makeText(VideodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + if(permission.alarmRechtePruefen(VideodetectionActivity.this, VideodetectionActivity.this)){ + Toast.makeText(VideodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo AlarmHandling einfügen + } else { + permission.alarmRechteAnfordern(VideodetectionActivity.this); + if(permission.alarmRechtePruefen(VideodetectionActivity.this, VideodetectionActivity.this)){ + Toast.makeText(VideodetectionActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo Alarmhandling einfügen + } else { + Toast.makeText(VideodetectionActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); + } + } } else { Toast.makeText(VideodetectionActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/example/greenwatch/VideodetectionAndAccelerometerActivity.java b/app/src/main/java/com/example/greenwatch/VideodetectionAndAccelerometerActivity.java index 3cbdfa5..fb3a815 100644 --- a/app/src/main/java/com/example/greenwatch/VideodetectionAndAccelerometerActivity.java +++ b/app/src/main/java/com/example/greenwatch/VideodetectionAndAccelerometerActivity.java @@ -37,6 +37,7 @@ public class VideodetectionAndAccelerometerActivity extends AppCompatActivity im private TextView videodetectionAndAccelerometerWarningTV; private Button backToMainActivity; private VideodetectionAndAccelerometerViewModel mVideodetectionAndAccelerometerViewModel; + private Permission permission = new Permission(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -89,7 +90,18 @@ public class VideodetectionAndAccelerometerActivity extends AppCompatActivity im @Override public void onChanged(Boolean aBoolean) { if (aBoolean) { - Toast.makeText(VideodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + if(permission.alarmRechtePruefen(VideodetectionAndAccelerometerActivity.this, VideodetectionAndAccelerometerActivity.this)){ + Toast.makeText(VideodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo AlarmHandling einfügen + } else { + permission.alarmRechteAnfordern(VideodetectionAndAccelerometerActivity.this); + if(permission.alarmRechtePruefen(VideodetectionAndAccelerometerActivity.this, VideodetectionAndAccelerometerActivity.this)){ + Toast.makeText(VideodetectionAndAccelerometerActivity.this, "Start Alarm Recording", Toast.LENGTH_LONG).show(); + //todo Alarmhandling einfügen + } else { + Toast.makeText(VideodetectionAndAccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); + } + } } else { Toast.makeText(VideodetectionAndAccelerometerActivity.this, "Stop Alarm Recording", Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java b/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java index a4446db..39f555d 100644 --- a/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java +++ b/app/src/main/java/com/example/greenwatch/viewmodels/MainActivityViewModel.java @@ -23,8 +23,6 @@ public class MainActivityViewModel extends ViewModel implements ViewModelInterfa private MutableLiveData> mAlarmHistoryList; private MutableLiveData mStartAlarmRecording; private DeviceRepository mDeviceRepository; - private static final int RIGHTS_REQUEST_CAMERA = 10; - private static final int RIGHTS_REQUEST_CAMERA_MICROFON = 1; @Override public void init() { @@ -43,22 +41,6 @@ public class MainActivityViewModel extends ViewModel implements ViewModelInterfa mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording(); } - public boolean isMicrofonAccessAllowed(Context context) { - return ContextCompat.checkSelfPermission(context, android.Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED; - } - - public void accessRequestMicrofon(Activity activity) { - ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.RECORD_AUDIO}, RIGHTS_REQUEST_CAMERA_MICROFON); - } - - public boolean isCameraAccessAllowed(Context context) { - return ContextCompat.checkSelfPermission(context, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; - } - - public void accessRequestCamera(Activity activity) { - ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.CAMERA}, RIGHTS_REQUEST_CAMERA); - } - @Override public LiveData> getConnectedDeviceList() { return mDeviceList;