导航菜单

页面标题

页面副标题

Jurassic World v1.83.4 - PermissionsActivity.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));
                }
            }));
        }
    }
}