19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentService.ObserverCall; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentService.ObserverNode; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.ContentObserver; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 2616aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tateimport android.os.UserHandle; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29002ffad599964653186c01f8e07fadc82dc0aceeFred Quintanapublic class ObserverNodeTest extends AndroidTestCase { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static class TestObserver extends ContentObserver { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TestObserver() { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(new Handler()); 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testUri() { 3716aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate final int myUserHandle = UserHandle.myUserId(); 3816aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObserverNode root = new ObserverNode(""); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri[] uris = new Uri[] { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/"), 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/"), 43002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana Uri.parse("content://x/"), 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/"), 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/a1/1/"), 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/a1/2/"), 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/1/"), 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/2/"), 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 50002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] nums = new int[] {4, 7, 1, 4, 2, 2, 3, 3}; 52002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // special case 5416aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.addObserverLocked(uris[0], new TestObserver().getContentObserver(), false, root, 5516aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 0, 0, myUserHandle); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(int i = 1; i < uris.length; i++) { 5716aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), true, root, 5816aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 0, 0, myUserHandle); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 60002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>(); 62002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = nums.length - 1; i >=0; --i) { 6416aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.collectObserversLocked(uris[i], 0, null, false, myUserHandle, calls); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(nums[i], calls.size()); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project calls.clear(); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 69002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testUriNotNotify() { 7116aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate final int myUserHandle = UserHandle.myUserId(); 7216aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObserverNode root = new ObserverNode(""); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri[] uris = new Uri[] { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/"), 76002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana Uri.parse("content://x/"), 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/"), 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/"), 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/1/"), 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/2/"), 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/1/"), 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/2/"), 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] nums = new int[] {7, 1, 3, 3, 1, 1, 1, 1}; 85002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(int i = 0; i < uris.length; i++) { 8716aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), false, root, 8816aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 0, 0, myUserHandle); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 90002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>(); 92002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = uris.length - 1; i >=0; --i) { 9416aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.collectObserversLocked(uris[i], 0, null, false, myUserHandle, calls); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(nums[i], calls.size()); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project calls.clear(); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 100