Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdd32641 authored by Brian Attwell's avatar Brian Attwell
Browse files

Handle runtime permissions

For now, we handle runtime permissions in the most
hamfisted and maintainable way possible: don't let
any Activity's be fully created unless we get all the
runtime permissions.

Bug: 20066216
Change-Id: Iaab9ad2a8106d34b5e20a1eae1ef7a5560dc49a2
parent ac48ce4d
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@

    <original-package android:name="com.android.contacts" />

    <!-- Whenever a permission is added here, it should also be added to
         RequestPermissionsActivity so it can be requested at runtime. -->
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
@@ -44,6 +46,7 @@
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />

    <application
        android:name="com.android.contacts.ContactsApplication"
@@ -214,6 +217,12 @@
            android:label="@string/custom_list_filter"
            android:theme="@style/ContactListFilterTheme" />

        <activity
            android:name=".common.activity.RequestPermissionsActivity"
            android:label="@string/launcherActivityLabel"
            android:theme="@style/PeopleTheme"
            android:exported="false"/>

        <activity
            android:name=".activities.ShowOrCreateActivity"
            android:label="@string/launcherActivityLabel"
@@ -322,6 +331,29 @@
            android:windowSoftInputMode="adjustResize"
            android:exported="false"/>

        <!-- Edit or create a contact with only the most important fields displayed initially. -->
        <activity
            android:name=".activities.CompactContactEditorActivity"
            android:label="@string/launcherActivityLabel"
            android:theme="@style/EditorActivityTheme"
            android:windowSoftInputMode="stateHidden|adjustPan">

            <intent-filter android:label="@string/editContactDescription">
                <action android:name="android.intent.action.EDIT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/person" />
                <data android:mimeType="vnd.android.cursor.item/contact" />
                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
            </intent-filter>
            <intent-filter android:label="@string/insertContactDescription">
                <action android:name="android.intent.action.INSERT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.dir/person" />
                <data android:mimeType="vnd.android.cursor.dir/contact" />
                <data android:mimeType="vnd.android.cursor.dir/raw_contact" />
            </intent-filter>
        </activity>

        <!-- Create a new or edit an existing contact -->
        <activity
            android:name=".activities.ContactEditorActivity"
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.contacts;

import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.util.ImplicitIntentsUtil;

import android.app.Activity;
@@ -43,6 +44,10 @@ public class NonPhoneActivity extends ContactsActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (RequestPermissionsActivity.startPermissionActivity(this)) {
            return;
        }

        final String phoneNumber = getPhoneNumber();
        if (TextUtils.isEmpty(phoneNumber)) {
            finish();
+5 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.widget.Toast;
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.model.Contact;
import com.android.contacts.common.model.ContactLoader;
import com.android.contacts.common.model.RawContactDelta;
@@ -85,6 +86,10 @@ public class AttachPhotoActivity extends ContactsActivity {
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        if (RequestPermissionsActivity.startPermissionActivity(this)) {
            return;
        }

        if (icicle != null) {
            final String uri = icicle.getString(KEY_CONTACT_URI);
            mContactUri = (uri == null) ? null : Uri.parse(uri);
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.contacts.activities;

import com.android.contacts.R;
import com.android.contacts.editor.CompactContactEditorFragment;
import com.android.contacts.common.activity.RequestPermissionsActivity;

import android.content.Intent;
import android.net.Uri;
@@ -34,6 +35,10 @@ public class CompactContactEditorActivity extends ContactEditorBaseActivity {
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);

        if (RequestPermissionsActivity.startPermissionActivity(this)) {
            return;
        }

        setContentView(R.layout.compact_contact_editor_activity);

        mFragment = (CompactContactEditorFragment) getFragmentManager().findFragmentByTag(
+5 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.contacts.activities;

import com.android.contacts.R;
import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.editor.ContactEditorFragment;
import com.android.contacts.util.DialogManager;

@@ -34,6 +35,10 @@ public class ContactEditorActivity extends ContactEditorBaseActivity
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);

        if (RequestPermissionsActivity.startPermissionActivity(this)) {
            return;
        }

        setContentView(R.layout.contact_editor_activity);

        mFragment = (ContactEditorFragment) getFragmentManager().findFragmentById(
Loading