正在查看: Jurassic World v1.83.4 应用的 PermissionsActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Jurassic World v1.83.4 应用的 PermissionsActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.urbanairship.permission;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.ResultReceiver;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.util.Consumer;
import com.urbanairship.Autopilot;
import com.urbanairship.Logger;
import com.urbanairship.UAirship;
import java.util.ArrayList;
import java.util.List;
public class PermissionsActivity extends AppCompatActivity {
private static final String PERMISSION_EXTRA = "PERMISSION_EXTRA";
private static final String PERMISSION_STATUS_EXTRA = "PERMISSION_STATUS";
private static final String RESULT_RECEIVER_EXTRA = "RESULT_RECEIVER_EXTRA";
private static final String SILENTLY_DENIED_EXTRA = "SILENTLY_DENIED";
private static final long SILENT_DISMISS_MAX_TIME_MS = 2000;
static boolean started = false;
private PermissionRequest currentRequest;
private List<Intent> intents = new ArrayList();
private boolean isResumed = false;
private final ActivityResultLauncher<String> requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), new ActivityResultCallback() {
public final void onActivityResult(Object obj) {
PermissionsActivity.this.onPermissionResult((Boolean) obj);
}
});
public final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Autopilot.automaticTakeOff(getApplication());
if (savedInstanceState == null) {
addIntent(getIntent());
}
}
private void addIntent(Intent intent) {
if (intent != null) {
this.intents.add(intent);
}
}
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
this.intents.add(intent);
}
protected void onResume() {
super.onResume();
this.isResumed = true;
processNextIntent();
}
protected void onPause() {
super.onPause();
this.isResumed = false;
}
protected void onDestroy() {
super.onDestroy();
PermissionRequest permissionRequest = this.currentRequest;
if (permissionRequest != null) {
permissionRequest.resultReceiver.send(0, new Bundle());
this.currentRequest = null;
}
for (Intent intent : this.intents) {
Logger.verbose("Permission request cancelled", intent);
ResultReceiver resultReceiver = (ResultReceiver) intent.getParcelableExtra(RESULT_RECEIVER_EXTRA);
if (resultReceiver != null) {
resultReceiver.send(0, new Bundle());
}
}
this.intents.clear();
this.requestPermissionLauncher.unregister();
}
private void processNextIntent() {
if (this.intents.isEmpty() && this.currentRequest == null) {
finish();
return;
}
if (this.isResumed && this.currentRequest == null) {
Intent remove = this.intents.remove(0);
String stringExtra = remove.getStringExtra(PERMISSION_EXTRA);
ResultReceiver resultReceiver = (ResultReceiver) remove.getParcelableExtra(RESULT_RECEIVER_EXTRA);
if (stringExtra == null || resultReceiver == null) {
processNextIntent();
return;
}
this.currentRequest = new PermissionRequest(stringExtra, ActivityCompat.shouldShowRequestPermissionRationale(this, stringExtra), System.currentTimeMillis(), resultReceiver);
Logger.verbose("Requesting permission %s", stringExtra);
this.requestPermissionLauncher.launch(stringExtra);
}
}
public void onPermissionResult(Boolean isGranted) {
PermissionRequest permissionRequest = this.currentRequest;
if (permissionRequest == null) {
return;
}
this.currentRequest = null;
boolean shouldShowRequestPermissionRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, permissionRequest.permission);
long currentTimeMillis = System.currentTimeMillis() - permissionRequest.startTime;
Logger.verbose("Received permission result: permission %s, shouldShowRequestPermissionRationale before: %s, shouldShowRequestPermissionRationale after: %s, granted: %s, time: %s", permissionRequest.permission, Boolean.valueOf(permissionRequest.startShowRationale), Boolean.valueOf(shouldShowRequestPermissionRationale), isGranted, Long.valueOf(currentTimeMillis));
Bundle bundle = new Bundle();
if (isGranted.booleanValue()) {
bundle.putString(PERMISSION_STATUS_EXTRA, PermissionStatus.GRANTED.name());
} else {
bundle.putString(PERMISSION_STATUS_EXTRA, PermissionStatus.DENIED.name());
if (currentTimeMillis <= SILENT_DISMISS_MAX_TIME_MS && !shouldShowRequestPermissionRationale && !permissionRequest.startShowRationale) {
bundle.putBoolean(SILENTLY_DENIED_EXTRA, true);
}
}
permissionRequest.resultReceiver.send(-1, bundle);
processNextIntent();
}
private static class PermissionRequest {
final String permission;
final ResultReceiver resultReceiver;
final boolean startShowRationale;
final long startTime;
public PermissionRequest(String permission, boolean startShowRationale, long startTime, ResultReceiver resultReceiver) {
this.permission = permission;
this.startShowRationale = startShowRationale;
this.startTime = startTime;
this.resultReceiver = resultReceiver;
}
}
public static void requestPermission(Context context, String permission, final Consumer<PermissionRequestResult> consumer) {
Context applicationContext = context.getApplicationContext();
Handler handler = new Handler(Looper.getMainLooper());
if (ContextCompat.checkSelfPermission(applicationContext, permission) == 0) {
handler.post(new Runnable() {
@Override
public final void run() {
consumer.accept(PermissionRequestResult.granted());
}
});
} else {
applicationContext.startActivity(new Intent(applicationContext, (Class<?>) PermissionsActivity.class).setFlags(805306368).setPackage(UAirship.getPackageName()).putExtra(PERMISSION_EXTRA, permission).putExtra(RESULT_RECEIVER_EXTRA, new ResultReceiver(handler) {
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
PermissionsActivity.started = false;
if (resultCode == -1) {
if (PermissionStatus.valueOf(resultData.getString(PermissionsActivity.PERMISSION_STATUS_EXTRA)) == PermissionStatus.GRANTED) {
consumer.accept(PermissionRequestResult.granted());
return;
} else {
consumer.accept(PermissionRequestResult.denied(resultData.getBoolean(PermissionsActivity.SILENTLY_DENIED_EXTRA, false)));
return;
}
}
consumer.accept(PermissionRequestResult.denied(false));
}
}));
}
}
}