AccessibilityServiceInfoCompat.java revision 1295792da760a6baca24d95f2a7975eec1c2b08a
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
179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovpackage android.support.v4.android.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/**
259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Helper for accessing newer features in AccessibilityServiceInfo.
269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovpublic class AccessibilityServiceInfoCompat {
289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static interface AccessibilityServiceInfoVersionImpl {
309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getId(AccessibilityServiceInfo info);
319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public ResolveInfo getResolveInfo(AccessibilityServiceInfo info);
329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info);
339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getDescription(AccessibilityServiceInfo info);
349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getSettingsActivityName(AccessibilityServiceInfo info);
359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityServiceInfoStubImpl implements AccessibilityServiceInfoVersionImpl {
389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return false;
419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getDescription(AccessibilityServiceInfo info) {
449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getId(AccessibilityServiceInfo info) {
489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getSettingsActivityName(AccessibilityServiceInfo info) {
569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
579648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityServiceInfoIcsImpl extends AccessibilityServiceInfoStubImpl {
619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getCanRetrieveWindowContent(info);
659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getDescription(AccessibilityServiceInfo info) {
699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getDescription(info);
709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getId(AccessibilityServiceInfo info) {
749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getId(info);
759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
789648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getResolveInfo(info);
809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
819648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
829648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public String getSettingsActivityName(AccessibilityServiceInfo info) {
849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityServiceInfoCompatIcs.getSettingsActivityName(info);
859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
879648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
889648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static {
899648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        if (Build.VERSION.SDK_INT >= 14) { // ICS
909648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityServiceInfoIcsImpl();
919648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        } else {
929648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityServiceInfoStubImpl();
939648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
949648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
959648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
969648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private static final AccessibilityServiceInfoVersionImpl IMPL;
979648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
989648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
999648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Mask for all feedback types.
1009648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
1029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
1039648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
1049648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
1059648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
1069648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1079648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int FEEDBACK_ALL_MASK = 0xFFFFFFFF;
1089648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1099648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /*
1109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Hide constructor
1119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private AccessibilityServiceInfoCompat() {
1139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * The accessibility service id.
1189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Generated by the system.</strong>
1209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The id.
1239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String getId(AccessibilityServiceInfo info) {
1259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getId(info);
1269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * The service {@link ResolveInfo}.
1309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Generated by the system.</strong>
1329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The info.
1359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
1379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getResolveInfo(info);
1389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * The settings activity name.
1429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Statically set from {@link AccessibilityService#SERVICE_META_DATA
1449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * meta-data}.</strong>
1459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The settings activity name.
1489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String getSettingsActivityName(AccessibilityServiceInfo info) {
1509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getSettingsActivityName(info);
1519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Whether this service can retrieve the current window's content.
1559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Statically set from {@link AccessibilityService#SERVICE_META_DATA
1579648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * meta-data}.</strong>
1589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return True window content can be retrieved.
1619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
1639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getCanRetrieveWindowContent(info);
1649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Description of the accessibility service.
1689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <p>
1699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * <strong>Statically set from {@link AccessibilityService#SERVICE_META_DATA
1709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * meta-data}.</strong>
1719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * </p>
1729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The description.
1749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String getDescription(AccessibilityServiceInfo info) {
1769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getDescription(info);
1779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1789648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Returns the string representation of a feedback type. For example,
1819648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * {@link AccessibilityServiceInfo#FEEDBACK_SPOKEN} is represented by the
1829648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * string FEEDBACK_SPOKEN.
1839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
1849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param feedbackType The feedback type.
1859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The string representation.
1869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1879648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String feedbackTypeToString(int feedbackType) {
1881295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        StringBuilder builder = new StringBuilder();
1891295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        builder.append("[");
1901295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        while (feedbackType > 0) {
1911295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            final int feedbackTypeFlag = 1 << Integer.numberOfTrailingZeros(feedbackType);
1921295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            feedbackType &= ~feedbackTypeFlag;
1931295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            if (builder.length() > 1) {
1941295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                builder.append(", ");
1951295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            }
1961295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            switch (feedbackTypeFlag) {
1971295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_AUDIBLE:
1981295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_AUDIBLE");
1991295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2001295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_HAPTIC:
2011295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_HAPTIC");
2021295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2031295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_GENERIC:
2041295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_GENERIC");
2051295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2061295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_SPOKEN:
2071295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_SPOKEN");
2081295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2091295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                case AccessibilityServiceInfo.FEEDBACK_VISUAL:
2101295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    builder.append("FEEDBACK_VISUAL");
2111295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov                    break;
2121295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov            }
2139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
2141295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        builder.append("]");
2151295792da760a6baca24d95f2a7975eec1c2b08aSvetoslav Ganov        return builder.toString();
2169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Returns the string representation of a flag. For example,
2209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * {@link AccessibilityServiceInfo#DEFAULT} is represented by the
2219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * string DEFAULT.
2229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param flag The flag.
2249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The string representation.
2259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static String flagToString(int flag) {
2279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        switch (flag) {
2289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            case AccessibilityServiceInfo.DEFAULT:
2299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                return "DEFAULT";
2309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            default:
2319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                return null;
2329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
2339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov}
235