1326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang/*
2326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * Copyright (C) 2016 The Android Open Source Project
3326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang *
4326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * Licensed under the Apache License, Version 2.0 (the "License");
5326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * you may not use this file except in compliance with the License.
6326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * You may obtain a copy of the License at
7326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang *
8326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang *      http://www.apache.org/licenses/LICENSE-2.0
9326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang *
10326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * Unless required by applicable law or agreed to in writing, software
11326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * distributed under the License is distributed on an "AS IS" BASIS,
12326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * See the License for the specific language governing permissions and
14326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * limitations under the License.
15326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang */
16326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
17326f083b4cf9867930d5ce21904498ec746c7e23Walter Jangpackage com.android.contacts.common.activity;
18326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
19326f083b4cf9867930d5ce21904498ec746c7e23Walter Jangimport android.Manifest.permission;
20326f083b4cf9867930d5ce21904498ec746c7e23Walter Jangimport android.app.Activity;
21326f083b4cf9867930d5ce21904498ec746c7e23Walter Jangimport android.content.Intent;
2218f1d7fd4014c0a9334fcb3c1dbdfc55b11af09dWalter Jangimport android.os.Bundle;
23326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
24326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang/**
25326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * Requests permissions that are not absolutely required by the calling Activity;
26326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * if permissions are denied, the calling Activity is still restarted.
27326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang *
28326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * Activities that have a set of permissions that must be granted in order for the Activity to
29326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * function propertly should call
30326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * {@link RequestPermissionsActivity#startPermissionActivity(Activity, String[], Class)}
31326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang * before calling {@link RequestDesiredPermissionsActivity#startPermissionActivity(Activity)}.
32326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang */
33326f083b4cf9867930d5ce21904498ec746c7e23Walter Jangpublic class RequestDesiredPermissionsActivity extends RequestPermissionsActivityBase {
34326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
35326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    private static final String[] DESIRED_PERMISSIONS = new String[] {
36326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang            permission.ACCESS_FINE_LOCATION,
37326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang            permission.READ_CALENDAR,
38326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang            permission.READ_SMS,
39326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    };
40326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
41326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    @Override
42326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    protected String[] getRequiredPermissions() {
43326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        return DESIRED_PERMISSIONS;
44326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    }
45326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
46326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    @Override
47326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    protected String[] getDesiredPermissions() {
48326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        return DESIRED_PERMISSIONS;
49326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    }
50326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
51326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    /**
52326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang     * If any desired permissions the Contacts app needs are missing, open an Activity
53326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang     * to prompt the user for these permissions.
54326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang     *
55326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang     * This is designed to be called inside {@link android.app.Activity#onCreate}
56326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang     */
57326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    public static boolean startPermissionActivity(Activity activity) {
5818f1d7fd4014c0a9334fcb3c1dbdfc55b11af09dWalter Jang        final Bundle extras = activity.getIntent().getExtras();
5918f1d7fd4014c0a9334fcb3c1dbdfc55b11af09dWalter Jang        if (extras != null && extras.getBoolean(STARTED_PERMISSIONS_ACTIVITY, false)) {
60326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang            return false;
61326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        }
62326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        return startPermissionActivity(activity, DESIRED_PERMISSIONS,
63326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang                RequestDesiredPermissionsActivity.class);
64326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    }
65326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
66326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    @Override
67326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    public void onRequestPermissionsResult(
68326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang            int requestCode, String permissions[], int[] grantResults) {
69326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
70326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        startActivity(mPreviousActivityIntent);
71326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        overridePendingTransition(0, 0);
72326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang
73326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        finish();
74326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang        overridePendingTransition(0, 0);
75326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang    }
76326f083b4cf9867930d5ce21904498ec746c7e23Walter Jang}