Skip to content

Commit 7f6ec78

Browse files
committed
rm location code from PermissionsActivity part 1
Decouple the Android location permission string from PermissionsActivity. This is now passed in and read by the Activity as an Intent extras.
1 parent 0443c85 commit 7f6ec78

File tree

2 files changed

+36
-19
lines changed

2 files changed

+36
-19
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/LocationController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ static void getLocation(Context context, boolean promptLocation, boolean fallbac
252252
//
253253
// For each case, we call the prompt handlers
254254
if (requestPermission != null && promptLocation) {
255-
PermissionsActivity.startPrompt(fallbackToSettings);
255+
PermissionsActivity.startPrompt(fallbackToSettings,"LOCATION", requestPermission);
256256
} else if (locationCoarsePermission == PackageManager.PERMISSION_GRANTED) {
257257
sendAndClearPromptHandlers(promptLocation, OneSignal.PromptActionResult.PERMISSION_GRANTED);
258258
startGetLocation();
@@ -289,7 +289,7 @@ private static void backgroundLocationPermissionLogic(Context context, boolean p
289289
}
290290

291291
if (requestPermission != null && promptLocation) {
292-
PermissionsActivity.startPrompt(fallbackToSettings);
292+
PermissionsActivity.startPrompt(fallbackToSettings, "LOCATION", requestPermission);
293293
} else {
294294
// Fine permission already granted
295295
sendAndClearPromptHandlers(promptLocation, OneSignal.PromptActionResult.PERMISSION_GRANTED);

OneSignalSDK/onesignal/src/main/java/com/onesignal/PermissionsActivity.java

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,37 +46,45 @@ public class PermissionsActivity extends Activity {
4646
// TODO this will be removed once the handled is deleted
4747
// Default animation duration in milliseconds
4848
private static final int DELAY_TIME_CALLBACK_CALL = 500;
49-
private static final int REQUEST_LOCATION = 2;
49+
private static final int ONESIGNAL_PERMISSION_REQUEST_CODE = 2;
5050
private static final int REQUEST_SETTINGS = 3;
5151

5252
static boolean waiting, answered, fallbackToSettings, neverAskAgainClicked;
5353
private static ActivityLifecycleHandler.ActivityAvailableListener activityAvailableListener;
5454

55+
private static final String INTENT_EXTRA_PERMISSION_TYPE = "INTENT_EXTRA_PERMISSION_TYPE";
56+
private static final String INTENT_EXTRA_ANDROID_PERMISSION_STRING = "INTENT_EXTRA_ANDROID_PERMISSION_STRING";
57+
private String permissionRequestType;
58+
5559
@Override
5660
protected void onCreate(Bundle savedInstanceState) {
5761
super.onCreate(savedInstanceState);
58-
5962
OneSignal.initWithContext(this);
6063

61-
// Android sets android:hasCurrentPermissionsRequest if the Activity was recreated while
62-
// the permission prompt is showing to the user.
63-
// This can happen if the task is cold resumed from the Recent Apps list.
64-
if (savedInstanceState != null &&
65-
savedInstanceState.getBoolean("android:hasCurrentPermissionsRequest", false))
66-
waiting = true;
67-
else
68-
requestPermission();
64+
handleBundleParams(getIntent().getExtras());
65+
66+
// TODO: Very unlikely we need to handle this special case, but come back and confirm
67+
// // Android sets android:hasCurrentPermissionsRequest if the Activity was recreated while
68+
// // the permission prompt is showing to the user.
69+
// // This can happen if the task is cold resumed from the Recent Apps list.
70+
// if (savedInstanceState != null &&
71+
// savedInstanceState.getBoolean("android:hasCurrentPermissionsRequest", false))
72+
// waiting = true;
73+
// else
74+
// requestPermission();
6975
}
7076

7177
@Override
7278
protected void onNewIntent(Intent intent) {
7379
super.onNewIntent(intent);
80+
handleBundleParams(intent.getExtras());
7481

75-
if (OneSignal.isInitDone())
76-
requestPermission();
82+
// TODO: Confirm if we still need this check
83+
// if (OneSignal.isInitDone())
84+
// requestPermission();
7785
}
7886

79-
private void requestPermission() {
87+
private void handleBundleParams(Bundle extras) {
8088
// https://github.com/OneSignal/OneSignal-Android-SDK/issues/30
8189
// Activity maybe invoked directly through automated testing, omit prompting on old Android versions.
8290
if (Build.VERSION.SDK_INT < 23) {
@@ -85,10 +93,16 @@ private void requestPermission() {
8593
return;
8694
}
8795

96+
permissionRequestType = extras.getString(INTENT_EXTRA_PERMISSION_TYPE);
97+
String androidPermissionString = extras.getString(INTENT_EXTRA_ANDROID_PERMISSION_STRING);
98+
requestPermission(androidPermissionString);
99+
}
100+
101+
private void requestPermission(String androidPermissionString) {
88102
if (!waiting) {
89103
waiting = true;
90-
neverAskAgainClicked = !ActivityCompat.shouldShowRequestPermissionRationale(PermissionsActivity.this, LocationController.requestPermission);
91-
ActivityCompat.requestPermissions(this, new String[]{LocationController.requestPermission}, REQUEST_LOCATION);
104+
neverAskAgainClicked = !ActivityCompat.shouldShowRequestPermissionRationale(PermissionsActivity.this, androidPermissionString);
105+
ActivityCompat.requestPermissions(this, new String[]{androidPermissionString}, ONESIGNAL_PERMISSION_REQUEST_CODE);
92106
}
93107
}
94108

@@ -103,7 +117,7 @@ public void onRequestPermissionsResult(final int requestCode, @NonNull String pe
103117
// Current problem: IAM depends on an activity, because of prompt permission the evaluation of IAM
104118
// is being called before the prompt activity dismisses, so it's attaching the IAM to PermissionActivity
105119
// We need to wait for other activity to show
106-
if (requestCode == REQUEST_LOCATION) {
120+
if (requestCode == ONESIGNAL_PERMISSION_REQUEST_CODE) {
107121
new Handler().postDelayed(new Runnable() {
108122
@Override
109123
public void run() {
@@ -119,6 +133,7 @@ public void run() {
119133
}
120134
}, DELAY_TIME_CALLBACK_CALL);
121135
}
136+
122137
ActivityLifecycleHandler activityLifecycleHandler = ActivityLifecycleListener.getActivityLifecycleHandler();
123138
if (activityLifecycleHandler != null)
124139
activityLifecycleHandler.removeActivityAvailableListener(TAG);
@@ -154,7 +169,7 @@ public void onClick(DialogInterface dialog, int which) {
154169
.show();
155170
}
156171

157-
static void startPrompt(boolean fallbackCondition) {
172+
static void startPrompt(boolean fallbackCondition, String permissionRequestType, String androidPermissionString) {
158173
if (PermissionsActivity.waiting || PermissionsActivity.answered)
159174
return;
160175

@@ -165,6 +180,8 @@ public void available(@NonNull Activity activity) {
165180
if (!activity.getClass().equals(PermissionsActivity.class)) {
166181
Intent intent = new Intent(activity, PermissionsActivity.class);
167182
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
183+
intent.putExtra(INTENT_EXTRA_PERMISSION_TYPE, permissionRequestType)
184+
.putExtra(INTENT_EXTRA_ANDROID_PERMISSION_STRING, androidPermissionString);
168185
activity.startActivity(intent);
169186
activity.overridePendingTransition(R.anim.onesignal_fade_in, R.anim.onesignal_fade_out);
170187
}

0 commit comments

Comments
 (0)