|
1 | 1 | package com.sdl.mobileweather.activity; |
2 | 2 |
|
| 3 | + |
3 | 4 | import android.Manifest; |
4 | 5 | import android.app.ActionBar; |
5 | 6 | import android.app.ActionBar.Tab; |
|
11 | 12 | import android.content.IntentFilter; |
12 | 13 | import android.content.pm.PackageManager; |
13 | 14 | import android.content.res.Configuration; |
| 15 | +import android.os.Build; |
14 | 16 | import android.os.Bundle; |
15 | 17 | import androidx.legacy.app.ActionBarDrawerToggle; |
16 | 18 | import androidx.core.app.ActivityCompat; |
|
27 | 29 | import android.widget.ListView; |
28 | 30 | import android.widget.Toast; |
29 | 31 |
|
| 32 | +import com.sdl.mobileweather.BuildConfig; |
30 | 33 | import com.sdl.mobileweather.R; |
31 | 34 | import com.sdl.mobileweather.fragments.ConditionsFragment; |
32 | 35 | import com.sdl.mobileweather.fragments.ForecastFragment; |
33 | 36 | import com.sdl.mobileweather.smartdevicelink.SdlActivity; |
34 | 37 | import com.sdl.mobileweather.smartdevicelink.SdlApplication; |
| 38 | +import com.sdl.mobileweather.smartdevicelink.SdlReceiver; |
35 | 39 |
|
36 | 40 |
|
37 | 41 | public class MainActivity extends SdlActivity implements ActionBar.TabListener { |
38 | 42 |
|
39 | 43 | private static final String SELECTED_NAVIGATION_ITEM = "selected_navigation_item"; |
40 | 44 | private static final String APP_ID = "bf2c3a7bad6b0c79152f50cc42ba1ace"; |
41 | | - private static final int LOCATION_PERMISSION_REQUEST_CODE = 100; |
| 45 | + private static final int PERMISSIONS_REQUEST_CODE = 100; |
42 | 46 |
|
43 | 47 | private Fragment mCurrentFragment; |
44 | 48 | private DrawerLayout mDrawerLayout; |
@@ -139,14 +143,41 @@ else if ((getResources().getString(R.string.drawer_item_about)).equals(item)){ |
139 | 143 | private void checkForCrashes() {} |
140 | 144 |
|
141 | 145 | private void checkForUpdates() {} |
142 | | - |
| 146 | + |
| 147 | + private boolean checkPermissions() { |
| 148 | + boolean permissionsGranted; |
| 149 | + |
| 150 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { |
| 151 | + boolean bluetoothGranted = PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_CONNECT); |
| 152 | + boolean locationGranted = PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); |
| 153 | + permissionsGranted = (BuildConfig.TRANSPORT.equals("TCP") || bluetoothGranted) && locationGranted; |
| 154 | + } |
| 155 | + else { |
| 156 | + permissionsGranted = PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); |
| 157 | + } |
| 158 | + |
| 159 | + return permissionsGranted; |
| 160 | + } |
| 161 | + |
| 162 | + private void requestPermissions() { |
| 163 | + String[] permissions; |
| 164 | + |
| 165 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { |
| 166 | + permissions = new String[]{Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.ACCESS_FINE_LOCATION}; |
| 167 | + } |
| 168 | + else { |
| 169 | + permissions = new String[]{Manifest.permission.ACCESS_FINE_LOCATION}; |
| 170 | + } |
| 171 | + |
| 172 | + ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_CODE); |
| 173 | + } |
| 174 | + |
143 | 175 | @Override |
144 | 176 | protected void onCreate(Bundle savedInstanceState) { |
145 | 177 | Log.v(SdlApplication.TAG, "onCreate main"); |
146 | 178 | super.onCreate(savedInstanceState); |
147 | 179 | setContentView(R.layout.activity_main); |
148 | | - |
149 | | - |
| 180 | + |
150 | 181 | // Create tabs |
151 | 182 | ActionBar bar = getActionBar(); |
152 | 183 | bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); |
@@ -207,8 +238,8 @@ protected void onStart() { |
207 | 238 | lbManager.registerReceiver(mHourlyForecastReceiver, new IntentFilter("com.sdl.mobileweather.HourlyForecast")); |
208 | 239 |
|
209 | 240 | // Ask for permissions |
210 | | - if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { |
211 | | - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE); |
| 241 | + if (!checkPermissions()) { |
| 242 | + requestPermissions(); |
212 | 243 | } else { |
213 | 244 | startServices(); |
214 | 245 | } |
@@ -367,10 +398,10 @@ public void onSaveInstanceState(Bundle outState) { |
367 | 398 | } |
368 | 399 |
|
369 | 400 | @Override |
370 | | - public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { |
371 | | - if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) { |
372 | | - if (grantResults.length <= 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED){ |
373 | | - Toast.makeText(this, "The app cannot run without this permission!", Toast.LENGTH_SHORT).show(); |
| 401 | + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { |
| 402 | + if (requestCode == PERMISSIONS_REQUEST_CODE) { |
| 403 | + if (!checkPermissions()) { |
| 404 | + Toast.makeText(this, "The app cannot run without these permissions!", Toast.LENGTH_SHORT).show(); |
374 | 405 | finish(); |
375 | 406 | } else { |
376 | 407 | startServices(); |
|
0 commit comments