1436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme/* 2436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * Copyright (C) 2017 The Android Open Source Project 3436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * 4436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * Licensed under the Apache License, Version 2.0 (the "License"); 5436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * you may not use this file except in compliance with the License. 6436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * You may obtain a copy of the License at 7436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * 8436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * http://www.apache.org/licenses/LICENSE-2.0 9436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * 10436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * Unless required by applicable law or agreed to in writing, software 11436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * distributed under the License is distributed on an "AS IS" BASIS, 12436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * See the License for the specific language governing permissions and 14436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme * limitations under the License. 15436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme */ 16436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 17436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Lemepackage com.android.server.autofill; 18436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 1927e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Lemeimport android.annotation.Nullable; 20436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Lemeimport android.os.Bundle; 2127e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Lemeimport android.util.ArraySet; 2227e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Lemeimport android.view.autofill.AutofillId; 23436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 24436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Lemeimport java.util.Arrays; 25436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Lemeimport java.util.Objects; 26436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Lemeimport java.util.Set; 27436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 289f9ee25515591ef33281708c0ab911962f4364a6Felipe Lemepublic final class Helper { 29436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 309f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme /** 319f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme * Defines a logging flag that can be dynamically changed at runtime using 326dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme * {@code cmd autofill set log_level debug}. 339f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme */ 349f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme public static boolean sDebug = false; 359f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme 369f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme /** 379f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme * Defines a logging flag that can be dynamically changed at runtime using 386dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme * {@code cmd autofill set log_level verbose}. 399f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme */ 409f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme public static boolean sVerbose = false; 41436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 426dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme /** 436dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme * Maximum number of partitions that can be allowed in a session. 446dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme * 456dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme * <p>Can be modified using {@code cmd autofill set max_partitions}. 466dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme */ 476dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme static int sPartitionMaxCount = 10; 486dc0177fe4212bc59e54260fdcbf779e0ee883c7Felipe Leme 499a2e6058df51e94417dcedd4c7dd2a0cc380dcb1Felipe Leme private Helper() { 509a2e6058df51e94417dcedd4c7dd2a0cc380dcb1Felipe Leme throw new UnsupportedOperationException("contains static members only"); 519a2e6058df51e94417dcedd4c7dd2a0cc380dcb1Felipe Leme } 529a2e6058df51e94417dcedd4c7dd2a0cc380dcb1Felipe Leme 53436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme static void append(StringBuilder builder, Bundle bundle) { 549f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme if (bundle == null || !sVerbose) { 5524d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme builder.append("null"); 5624d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme return; 5724d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme } 5824d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme final Set<String> keySet = bundle.keySet(); 5924d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme builder.append("[Bundle with ").append(keySet.size()).append(" extras:"); 6024d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme for (String key : keySet) { 6124d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme final Object value = bundle.get(key); 6224d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme builder.append(' ').append(key).append('='); 6324d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme builder.append((value instanceof Object[]) 6424d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme ? Arrays.toString((Objects[]) value) : value); 65436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme } 6624d5893b25ce62b7bc9ed9f35fa72b9d47f23cddFelipe Leme builder.append(']'); 67436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme } 68436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme 69436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme static String bundleToString(Bundle bundle) { 70436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme final StringBuilder builder = new StringBuilder(); 71436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme append(builder, bundle); 72436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme return builder.toString(); 73436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme } 7427e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme 7527e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme @Nullable 7627e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme static AutofillId[] toArray(@Nullable ArraySet<AutofillId> set) { 7727e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme if (set == null) return null; 7827e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme 7927e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme final AutofillId[] array = new AutofillId[set.size()]; 8027e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme for (int i = 0; i < set.size(); i++) { 8127e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme array[i] = set.valueAt(i); 8227e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme } 8327e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme return array; 8427e202208b42e78fefcece893a4bb5d8fe2eae58Felipe Leme } 85436ab6a91d64ef6036c67bb361d807e398fb2c4cFelipe Leme} 86