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
diff --git a/src/com/android/contacts/NonPhoneActivity.java b/src/com/android/contacts/NonPhoneActivity.java
index 8ae96a2..05c556b 100644
--- a/src/com/android/contacts/NonPhoneActivity.java
+++ b/src/com/android/contacts/NonPhoneActivity.java
@@ -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 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
final String phoneNumber = getPhoneNumber();
if (TextUtils.isEmpty(phoneNumber)) {
finish();
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index 262c602..5573123 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -38,6 +38,7 @@
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 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);
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
index 95cb08a..fcbb70e 100644
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -18,6 +18,7 @@
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 void onCreate(Bundle savedState) {
super.onCreate(savedState);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
setContentView(R.layout.compact_contact_editor_activity);
mFragment = (CompactContactEditorFragment) getFragmentManager().findFragmentByTag(
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index a0732aa..a9b75d9 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -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 void onCreate(Bundle savedState) {
super.onCreate(savedState);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
setContentView(R.layout.contact_editor_activity);
mFragment = (ContactEditorFragment) getFragmentManager().findFragmentById(
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 0ba6e3a..e147b76 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -44,6 +44,7 @@
import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.list.ContactEntryListFragment;
import com.android.contacts.common.util.ImplicitIntentsUtil;
import com.android.contacts.list.ContactPickerFragment;
@@ -106,6 +107,10 @@
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
if (savedState != null) {
mActionCode = savedState.getInt(KEY_ACTION_CODE);
mIsSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 6a5d348..83c4085 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -54,6 +54,7 @@
import com.android.contacts.R;
import com.android.contacts.activities.ActionBarAdapter.TabState;
import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.dialog.ClearFrequentsDialog;
import com.android.contacts.common.util.ImplicitIntentsUtil;
import com.android.contacts.common.widget.FloatingActionButtonController;
@@ -225,6 +226,10 @@
}
super.onCreate(savedState);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
if (!processIntent(false)) {
finish();
return;
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index 8277cdd..6a516ad 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -37,6 +37,7 @@
import com.android.contacts.common.ContactsUtils;
import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.util.ImplicitIntentsUtil;
import com.android.contacts.util.NotifyingAsyncQueryHandler;
@@ -87,6 +88,10 @@
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
// Create handler if doesn't exist, otherwise cancel any running
if (mQueryHandler == null) {
mQueryHandler = new NotifyingAsyncQueryHandler(this, this);
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 154968d..66bb473 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -96,6 +96,7 @@
import com.android.contacts.common.ClipboardUtils;
import com.android.contacts.common.Collapser;
import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.editor.SelectAccountDialogFragment;
import com.android.contacts.common.interactions.TouchPointManager;
import com.android.contacts.common.lettertiles.LetterTileDrawable;
@@ -686,6 +687,10 @@
Trace.beginSection("onCreate()");
super.onCreate(savedInstanceState);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
+
getWindow().setStatusBarColor(Color.TRANSPARENT);
processIntent(getIntent());
diff --git a/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java b/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java
index 027cc9d..bc9f07e 100644
--- a/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java
+++ b/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java
@@ -28,6 +28,7 @@
import android.widget.TextView;
import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
import com.android.contacts.common.list.PinnedHeaderListAdapter;
/**
@@ -98,6 +99,9 @@
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
+ if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ return;
+ }
setContentView(R.layout.pinned_header_list_demo);