19648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov/*
29648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Copyright (C) 2011 The Android Open Source Project
39648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
49648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
59648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * you may not use this file except in compliance with the License.
69648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * You may obtain a copy of the License at
79648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
89648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
99648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software
119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * See the License for the specific language governing permissions and
149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * limitations under the License.
159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
170574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganovpackage android.support.v4.accessibilityservice;
189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.accessibilityservice.AccessibilityService;
209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.accessibilityservice.AccessibilityServiceInfo;
219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.content.pm.ResolveInfo;
229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.os.Build;
239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov/**
250574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link android.accessibilityservice.AccessibilityService}
260574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovpublic class AccessibilityServiceInfoCompat {
299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static interface AccessibilityServiceInfoVersionImpl {
319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getId(AccessibilityServiceInfo info);
329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public ResolveInfo getResolveInfo(AccessibilityServiceInfo info);
339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info);
349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getDescription(AccessibilityServiceInfo info);
359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getSettingsActivityName(AccessibilityServiceInfo info);
369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityServiceInfoStubImpl implements AccessibilityServiceInfoVersionImpl {
399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return false;
429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getDescription(AccessibilityServiceInfo info) {
459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getId(AccessibilityServiceInfo info) {
499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getSettingsActivityName(AccessibilityServiceInfo info) {
579648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityServiceInfoIcsImpl extends AccessibilityServiceInfoStubImpl {
629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getCanRetrieveWindowContent(info);
669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getDescription(AccessibilityServiceInfo info) {
709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getDescription(info);
719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getId(AccessibilityServiceInfo info) {
759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getId(info);
769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
789648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getResolveInfo(info);
819648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
829648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getSettingsActivityName(AccessibilityServiceInfo info) {
859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getSettingsActivityName(info);
869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
879648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
889648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
899648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static {
909648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        if (Build.VERSION.SDK_INT >= 14) { // ICS
919648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityServiceInfoIcsImpl();
929648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        } else {
939648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityServiceInfoStubImpl();
949648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
959648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
969648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
979648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private static final AccessibilityServiceInfoVersionImpl IMPL;
989648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
999648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1009648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Mask for all feedback types.
1019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
1039648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
1049648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
1059648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
1069648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
1079648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1089648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int FEEDBACK_ALL_MASK = 0xFFFFFFFF;
1099648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /*
1119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Hide constructor
1129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private AccessibilityServiceInfoCompat() {
1149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * The accessibility service id.
1199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Generated by the system.</strong>
1219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The id.
1249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String getId(AccessibilityServiceInfo info) {
1269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getId(info);
1279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * The service {@link ResolveInfo}.
1319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Generated by the system.</strong>
1339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The info.
1369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
1389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getResolveInfo(info);
1399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * The settings activity name.
1439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Statically set from {@link AccessibilityService#SERVICE_META_DATA
1459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * meta-data}.</strong>
1469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The settings activity name.
1499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String getSettingsActivityName(AccessibilityServiceInfo info) {
1519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getSettingsActivityName(info);
1529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Whether this service can retrieve the current window's content.
1569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1579648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Statically set from {@link AccessibilityService#SERVICE_META_DATA
1589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * meta-data}.</strong>
1599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return True window content can be retrieved.
1629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
1649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getCanRetrieveWindowContent(info);
1659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Description of the accessibility service.
1699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Statically set from {@link AccessibilityService#SERVICE_META_DATA
1719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * meta-data}.</strong>
1729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The description.
1759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String getDescription(AccessibilityServiceInfo info) {
1779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getDescription(info);
1789648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1819648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Returns the string representation of a feedback type. For example,
1829648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * {@link AccessibilityServiceInfo#FEEDBACK_SPOKEN} is represented by the
1839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * string FEEDBACK_SPOKEN.
1849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param feedbackType The feedback type.
1869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The string representation.
1879648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1889648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String feedbackTypeToString(int feedbackType) {
1891295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        StringBuilder builder = new StringBuilder();
1901295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        builder.append("[");
1911295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        while (feedbackType > 0) {
1921295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            final int feedbackTypeFlag = 1 << Integer.numberOfTrailingZeros(feedbackType);
1931295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            feedbackType &= ~feedbackTypeFlag;
1941295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            if (builder.length() > 1) {
1951295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                builder.append(", ");
1961295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            }
1971295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            switch (feedbackTypeFlag) {
1981295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_AUDIBLE:
1991295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_AUDIBLE");
2001295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2011295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_HAPTIC:
2021295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_HAPTIC");
2031295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2041295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_GENERIC:
2051295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_GENERIC");
2061295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2071295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_SPOKEN:
2081295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_SPOKEN");
2091295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2101295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_VISUAL:
2111295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_VISUAL");
2121295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2131295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            }
2149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
2151295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        builder.append("]");
2161295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        return builder.toString();
2179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Returns the string representation of a flag. For example,
2219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * {@link AccessibilityServiceInfo#DEFAULT} is represented by the
2229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * string DEFAULT.
2239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param flag The flag.
2259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The string representation.
2269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String flagToString(int flag) {
2289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        switch (flag) {
2299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            case AccessibilityServiceInfo.DEFAULT:
2309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                return "DEFAULT";
2319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            default:
2329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                return null;
2339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
2349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov}
236