|
1 | 1 | package ch.freshbits.pathshare.example |
2 | 2 |
|
| 3 | +import android.app.AlarmManager |
3 | 4 | import android.content.Context |
| 5 | +import android.content.Intent |
4 | 6 | import android.content.SharedPreferences |
| 7 | +import android.os.Build |
5 | 8 | import android.os.Bundle |
| 9 | +import android.provider.Settings |
6 | 10 | import android.util.Log |
7 | 11 | import android.view.View |
8 | 12 | import android.widget.Button |
@@ -146,10 +150,11 @@ class MainActivity : AppCompatActivity() { |
146 | 150 | private fun joinSession() { |
147 | 151 | if (session.isExpired) return |
148 | 152 |
|
149 | | - if (hasLocationPermission()) { |
| 153 | + if (hasLocationPermission() && hasAlarmPermission()) { |
150 | 154 | performJoinSession() |
151 | 155 | } else { |
152 | | - requestLocationPermission() |
| 156 | + if (!hasLocationPermission()) { requestLocationPermission() } |
| 157 | + if (!hasAlarmPermission()) { requestAlarmPermission() } |
153 | 158 | } |
154 | 159 | } |
155 | 160 |
|
@@ -222,6 +227,26 @@ class MainActivity : AppCompatActivity() { |
222 | 227 | return PermissionRequester.hasPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) |
223 | 228 | } |
224 | 229 |
|
| 230 | + private fun requestAlarmPermission() { |
| 231 | + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { |
| 232 | + return |
| 233 | + } |
| 234 | + val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM) |
| 235 | + startActivity(intent) |
| 236 | + } |
| 237 | + |
| 238 | + private fun hasAlarmPermission(): Boolean { |
| 239 | + return Build.VERSION.SDK_INT < Build.VERSION_CODES.S || getAlarmManager().canScheduleExactAlarms() |
| 240 | + } |
| 241 | + |
| 242 | + private fun getAlarmManager(): AlarmManager { |
| 243 | + return getContext().getSystemService(ALARM_SERVICE) as AlarmManager |
| 244 | + } |
| 245 | + |
| 246 | + private fun getContext(): Context { |
| 247 | + return Pathshare.client().context |
| 248 | + } |
| 249 | + |
225 | 250 | private fun saveSessionIdentifier() { |
226 | 251 | val editor = preferences().edit() |
227 | 252 | editor.putString(SESSION_ID_KEY, session.identifier) |
|
0 commit comments