PermissionActivity.java revision 826aa7f01d059b6764002fa0fba236d7aeafee39
1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package foo.bar.permission; 18 19import android.Manifest; 20import android.app.Activity; 21import android.app.LoaderManager; 22import android.content.CursorLoader; 23import android.content.Loader; 24import android.content.pm.PackageManager; 25import android.database.Cursor; 26import android.os.Bundle; 27import android.provider.CalendarContract; 28import android.provider.ContactsContract; 29import android.view.Menu; 30import android.view.MenuItem; 31import android.view.View; 32import android.widget.CursorAdapter; 33import android.widget.ListView; 34import android.widget.SimpleCursorAdapter; 35 36/** 37 * Simple sample of how to use the runtime permissions APIs. 38 */ 39public class PermissionActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> { 40 41 public static final String LOG_TAG = "PermissionActivity"; 42 43 private static final int CONTACTS_LOADER = 1; 44 45 private static final int EVENTS_LOADER = 2; 46 47 private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 1; 48 49 private static final int PERMISSIONS_REQUEST_READ_CALENDAR = 2; 50 51 private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 3; 52 53 private final static String[] CONTACTS_COLUMNS = { 54 ContactsContract.Contacts.DISPLAY_NAME_PRIMARY 55 }; 56 57 private final static String[] CALENDAR_COLUMNS = { 58 CalendarContract.Events.TITLE 59 }; 60 61 private static final String[] CONTACTS_PROJECTION = { 62 ContactsContract.Contacts._ID, 63 ContactsContract.Contacts.DISPLAY_NAME_PRIMARY 64 }; 65 66 private static final String[] EVENTS_PROJECTION = { 67 CalendarContract.Events._ID, 68 CalendarContract.Events.TITLE 69 }; 70 71 private final static int[] TO_IDS = { 72 android.R.id.text1 73 }; 74 75 private ListView mListView; 76 77 private CursorAdapter mContactsAdapter; 78 private CursorAdapter mEventsAdapter; 79 80 @Override 81 protected void onCreate(Bundle savedInstanceState) { 82 super.onCreate(savedInstanceState); 83 bindUi(); 84 } 85 86 87 @Override 88 public boolean onCreateOptionsMenu(Menu menu) { 89 getMenuInflater().inflate(foo.bar.permission2.R.menu.actions, menu); 90 return true; 91 } 92 93 @Override 94 public boolean onOptionsItemSelected(MenuItem item) { 95 switch (item.getItemId()) { 96 case foo.bar.permission2.R.id.show_contacts: { 97 showContacts(); 98 return true; 99 } 100 101 case foo.bar.permission2.R.id.show_events: { 102 showEvents(); 103 return true; 104 } 105 106 case foo.bar.permission2.R.id.request_all_perms: { 107 requestPermissions(); 108 return true; 109 } 110 } 111 112 return false; 113 } 114 115 @Override 116 public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) { 117 switch (loaderId) { 118 case CONTACTS_LOADER: { 119 return new CursorLoader(this, 120 ContactsContract.Contacts.CONTENT_URI, 121 CONTACTS_PROJECTION, null, null, null); 122 } 123 124 case EVENTS_LOADER: { 125 return new CursorLoader(this, 126 CalendarContract.Events.CONTENT_URI, 127 EVENTS_PROJECTION, null, null, null); 128 } 129 130 default: { 131 return null; 132 } 133 } 134 } 135 136 @Override 137 public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 138 switch (loader.getId()) { 139 case CONTACTS_LOADER: { 140 mContactsAdapter.swapCursor(cursor); 141 } break; 142 143 case EVENTS_LOADER: { 144 mEventsAdapter.swapCursor(cursor); 145 } break; 146 } 147 } 148 149 @Override 150 public void onLoaderReset(Loader<Cursor> loader) { 151 switch (loader.getId()) { 152 case CONTACTS_LOADER: { 153 mContactsAdapter.swapCursor(null); 154 } break; 155 156 case EVENTS_LOADER: { 157 mEventsAdapter.swapCursor(null); 158 } break; 159 } 160 } 161 162 @Override 163 public void onRequestPermissionsResult(int requestCode, String permissions[], 164 int[] grantResults) { 165 switch (requestCode) { 166 case PERMISSIONS_REQUEST_READ_CONTACTS: { 167 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 168 showContacts(); 169 } 170 } break; 171 172 case PERMISSIONS_REQUEST_READ_CALENDAR: { 173 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 174 showEvents(); 175 } 176 } break; 177 } 178 } 179 180 private void bindUi() { 181 setContentView(foo.bar.permission2.R.layout.permission_activity); 182 183 mListView = (ListView) findViewById(foo.bar.permission2.R.id.list); 184 View emptyView = findViewById(foo.bar.permission2.R.id.empty_state); 185 mListView.setEmptyView(emptyView); 186 187 mContactsAdapter = new SimpleCursorAdapter(this, 188 android.R.layout.simple_list_item_1, 189 null, CONTACTS_COLUMNS, TO_IDS, 0); 190 191 mEventsAdapter = new SimpleCursorAdapter(this, 192 android.R.layout.simple_list_item_1, 193 null, CALENDAR_COLUMNS, TO_IDS, 0); 194 } 195 196 private void showContacts() { 197 if (checkSelfPermission(Manifest.permission.READ_CONTACTS) 198 != PackageManager.PERMISSION_GRANTED) { 199 requestPermissions(new String[] {Manifest.permission.READ_CONTACTS}, 200 PERMISSIONS_REQUEST_READ_CONTACTS); 201 return; 202 } 203 204 if (getLoaderManager().getLoader(CONTACTS_LOADER) == null) { 205 getLoaderManager().initLoader(CONTACTS_LOADER, null, this); 206 } 207 mListView.setAdapter(mContactsAdapter); 208 } 209 210 private void showEvents() { 211 if (checkSelfPermission(Manifest.permission.READ_CALENDAR) 212 != PackageManager.PERMISSION_GRANTED) { 213 requestPermissions(new String[]{Manifest.permission.READ_CALENDAR}, 214 PERMISSIONS_REQUEST_READ_CALENDAR); 215 return; 216 } 217 218 if (getLoaderManager().getLoader(EVENTS_LOADER) == null) { 219 getLoaderManager().initLoader(EVENTS_LOADER, null, this); 220 } 221 mListView.setAdapter(mEventsAdapter); 222 } 223 224 private void requestPermissions() { 225 if (checkSelfPermission(Manifest.permission.READ_CALENDAR) 226 != PackageManager.PERMISSION_GRANTED 227 || checkSelfPermission(Manifest.permission.READ_CONTACTS) 228 != PackageManager.PERMISSION_GRANTED) { 229 String[] permissions = new String[]{ 230 Manifest.permission.READ_CONTACTS, 231 Manifest.permission.READ_CALENDAR 232 }; 233 requestPermissions(permissions, PERMISSIONS_REQUEST_ALL_PERMISSIONS); 234 } 235 } 236} 237