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