Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe9259e6 authored by Dongwon Kang's avatar Dongwon Kang
Browse files

TIF: Revisit types in TvInputInfo and TvContract.Channels.

For the types in TvInputInfo, TYPE_TUNER represents all the TV inputs
having channels in TvProvider. Also, String is used for the types in
TvContract.Channels for further extension.

Change-Id: Iee1163b449d9f9723ff665178f2967bb8c0ad71d
parent a7c49aa1
Loading
Loading
Loading
Loading
+38 −39
Original line number Diff line number Diff line
@@ -746,6 +746,7 @@ package android {
    field public static final int l_resource_pad23 = 16843770; // 0x10103fa
    field public static final int l_resource_pad24 = 16843769; // 0x10103f9
    field public static final int l_resource_pad25 = 16843768; // 0x10103f8
    field public static final int l_resource_pad26 = 16843767; // 0x10103f7
    field public static final int l_resource_pad3 = 16843790; // 0x101040e
    field public static final int l_resource_pad4 = 16843789; // 0x101040d
    field public static final int l_resource_pad5 = 16843788; // 0x101040c
@@ -1329,7 +1330,6 @@ package android {
    field public static final int trimPathEnd = 16843813; // 0x1010425
    field public static final int trimPathOffset = 16843814; // 0x1010426
    field public static final int trimPathStart = 16843812; // 0x1010424
    field public static final int tvInputType = 16843767; // 0x10103f7
    field public static final int type = 16843169; // 0x10101a1
    field public static final int typeface = 16842902; // 0x1010096
    field public static final int uiOptions = 16843672; // 0x1010398
@@ -16689,33 +16689,33 @@ package android.media.tv {
    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
    field public static final android.net.Uri CONTENT_URI;
    field public static final int SERVICE_TYPE_AUDIO = 2; // 0x2
    field public static final int SERVICE_TYPE_AUDIO_VIDEO = 1; // 0x1
    field public static final int SERVICE_TYPE_OTHER = 0; // 0x0
    field public static final int TYPE_1SEG = 197632; // 0x30400
    field public static final int TYPE_ATSC_C = 131584; // 0x20200
    field public static final int TYPE_ATSC_M_H = 131840; // 0x20300
    field public static final int TYPE_ATSC_T = 131072; // 0x20000
    field public static final int TYPE_CMMB = 262400; // 0x40100
    field public static final int TYPE_DTMB = 262144; // 0x40000
    field public static final int TYPE_DVB_C = 66048; // 0x10200
    field public static final int TYPE_DVB_C2 = 66049; // 0x10201
    field public static final int TYPE_DVB_H = 66304; // 0x10300
    field public static final int TYPE_DVB_S = 65792; // 0x10100
    field public static final int TYPE_DVB_S2 = 65793; // 0x10101
    field public static final int TYPE_DVB_SH = 66560; // 0x10400
    field public static final int TYPE_DVB_T = 65536; // 0x10000
    field public static final int TYPE_DVB_T2 = 65537; // 0x10001
    field public static final int TYPE_ISDB_C = 197376; // 0x30300
    field public static final int TYPE_ISDB_S = 197120; // 0x30200
    field public static final int TYPE_ISDB_T = 196608; // 0x30000
    field public static final int TYPE_ISDB_TB = 196864; // 0x30100
    field public static final int TYPE_NTSC = 1; // 0x1
    field public static final int TYPE_OTHER = 0; // 0x0
    field public static final int TYPE_PAL = 2; // 0x2
    field public static final int TYPE_SECAM = 3; // 0x3
    field public static final int TYPE_S_DMB = 327936; // 0x50100
    field public static final int TYPE_T_DMB = 327680; // 0x50000
    field public static final java.lang.String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
    field public static final java.lang.String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
    field public static final java.lang.String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
    field public static final java.lang.String TYPE_1SEG = "TYPE_1SEG";
    field public static final java.lang.String TYPE_ATSC_C = "TYPE_ATSC_C";
    field public static final java.lang.String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
    field public static final java.lang.String TYPE_ATSC_T = "TYPE_ATSC_T";
    field public static final java.lang.String TYPE_CMMB = "TYPE_CMMB";
    field public static final java.lang.String TYPE_DTMB = "TYPE_DTMB";
    field public static final java.lang.String TYPE_DVB_C = "TYPE_DVB_C";
    field public static final java.lang.String TYPE_DVB_C2 = "TYPE_DVB_C2";
    field public static final java.lang.String TYPE_DVB_H = "TYPE_DVB_H";
    field public static final java.lang.String TYPE_DVB_S = "TYPE_DVB_S";
    field public static final java.lang.String TYPE_DVB_S2 = "TYPE_DVB_S2";
    field public static final java.lang.String TYPE_DVB_SH = "TYPE_DVB_SH";
    field public static final java.lang.String TYPE_DVB_T = "TYPE_DVB_T";
    field public static final java.lang.String TYPE_DVB_T2 = "TYPE_DVB_T2";
    field public static final java.lang.String TYPE_ISDB_C = "TYPE_ISDB_C";
    field public static final java.lang.String TYPE_ISDB_S = "TYPE_ISDB_S";
    field public static final java.lang.String TYPE_ISDB_T = "TYPE_ISDB_T";
    field public static final java.lang.String TYPE_ISDB_TB = "TYPE_ISDB_TB";
    field public static final java.lang.String TYPE_NTSC = "TYPE_NTSC";
    field public static final java.lang.String TYPE_OTHER = "TYPE_OTHER";
    field public static final java.lang.String TYPE_PAL = "TYPE_PAL";
    field public static final java.lang.String TYPE_SECAM = "TYPE_SECAM";
    field public static final java.lang.String TYPE_S_DMB = "TYPE_S_DMB";
    field public static final java.lang.String TYPE_T_DMB = "TYPE_T_DMB";
    field public static final java.lang.String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
    field public static final java.lang.String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
    field public static final java.lang.String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
@@ -16789,17 +16789,16 @@ package android.media.tv {
    method public java.lang.CharSequence loadLabel(android.content.Context);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final java.lang.String EXTRA_INPUT_ID = "inputId";
    field public static final int TYPE_COMPONENT = 6; // 0x6
    field public static final int TYPE_COMPOSITE = 3; // 0x3
    field public static final int TYPE_DISPLAY_PORT = 10; // 0xa
    field public static final int TYPE_DVI = 8; // 0x8
    field public static final int TYPE_HDMI = 9; // 0x9
    field public static final int TYPE_OTHER_HARDWARE = 1; // 0x1
    field public static final int TYPE_SCART = 5; // 0x5
    field public static final int TYPE_SVIDEO = 4; // 0x4
    field public static final int TYPE_TUNER = 2; // 0x2
    field public static final int TYPE_VGA = 7; // 0x7
    field public static final int TYPE_VIRTUAL = 0; // 0x0
    field public static final int TYPE_COMPONENT = 1004; // 0x3ec
    field public static final int TYPE_COMPOSITE = 1001; // 0x3e9
    field public static final int TYPE_DISPLAY_PORT = 1008; // 0x3f0
    field public static final int TYPE_DVI = 1006; // 0x3ee
    field public static final int TYPE_HDMI = 1007; // 0x3ef
    field public static final int TYPE_OTHER = 1000; // 0x3e8
    field public static final int TYPE_SCART = 1003; // 0x3eb
    field public static final int TYPE_SVIDEO = 1002; // 0x3ea
    field public static final int TYPE_TUNER = 0; // 0x0
    field public static final int TYPE_VGA = 1005; // 0x3ed
  }
  public final class TvInputManager {
+0 −18
Original line number Diff line number Diff line
@@ -7213,24 +7213,6 @@
             the settings for this service. -->
        <attr name="settingsActivity" />
        <!-- Type of this service. -->
        <attr name="tvInputType">
            <!-- Should be in sync with constant values defined in
                 {@link android.media.tv.TvInputInfo}. -->

            <!-- Virtual input (default) -->
            <enum name="virtual" value="0" />

            <enum name="otherHardware" value="1" />
            <enum name="tuner" value="2" />
            <enum name="composite" value="3" />
            <enum name="svideo" value="4" />
            <enum name="scart" value="5" />
            <enum name="component" value="6" />
            <enum name="vga" value="7" />
            <enum name="dvi" value="8" />
            <enum name="hdmi" value="9" />
            <enum name="displayPort" value="10" />
        </attr>
    </declare-styleable>

    <declare-styleable name="ResolverDrawerLayout">
+0 −1
Original line number Diff line number Diff line
@@ -2097,7 +2097,6 @@
  <public type="attr" name="isGame" id="0x10103f4" />
  <public type="attr" name="allowEmbedded" id="0x10103f5" />
  <public type="attr" name="setupActivity" id="0x10103f6"/>
  <public type="attr" name="tvInputType" id="0x10103f7"/>

<!-- ===============================================================
     Resources added in version 21 of the platform
+29 −29
Original line number Diff line number Diff line
@@ -340,85 +340,85 @@ public final class TvContract {
        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";

        /** A generic channel type. */
        public static final int TYPE_OTHER = 0x0;
        public static final String TYPE_OTHER = "TYPE_OTHER";

        /** The channel type for NTSC. */
        public static final int TYPE_NTSC = 0x1;
        public static final String TYPE_NTSC = "TYPE_NTSC";

        /** The channel type for PAL. */
        public static final int TYPE_PAL = 0x2;
        public static final String TYPE_PAL = "TYPE_PAL";

        /** The channel type for SECAM. */
        public static final int TYPE_SECAM = 0x3;
        public static final String TYPE_SECAM = "TYPE_SECAM";

        /** The channel type for DVB-T (terrestrial). */
        public static final int TYPE_DVB_T = 0x00010000;
        public static final String TYPE_DVB_T = "TYPE_DVB_T";

        /** The channel type for DVB-T2 (terrestrial). */
        public static final int TYPE_DVB_T2 = 0x00010001;
        public static final String TYPE_DVB_T2 = "TYPE_DVB_T2";

        /** The channel type for DVB-S (satellite). */
        public static final int TYPE_DVB_S = 0x00010100;
        public static final String TYPE_DVB_S = "TYPE_DVB_S";

        /** The channel type for DVB-S2 (satellite). */
        public static final int TYPE_DVB_S2 = 0x00010101;
        public static final String TYPE_DVB_S2 = "TYPE_DVB_S2";

        /** The channel type for DVB-C (cable). */
        public static final int TYPE_DVB_C = 0x00010200;
        public static final String TYPE_DVB_C = "TYPE_DVB_C";

        /** The channel type for DVB-C2 (cable). */
        public static final int TYPE_DVB_C2 = 0x00010201;
        public static final String TYPE_DVB_C2 = "TYPE_DVB_C2";

        /** The channel type for DVB-H (handheld). */
        public static final int TYPE_DVB_H = 0x00010300;
        public static final String TYPE_DVB_H = "TYPE_DVB_H";

        /** The channel type for DVB-SH (satellite). */
        public static final int TYPE_DVB_SH = 0x00010400;
        public static final String TYPE_DVB_SH = "TYPE_DVB_SH";

        /** The channel type for ATSC (terrestrial). */
        public static final int TYPE_ATSC_T = 0x00020000;
        public static final String TYPE_ATSC_T = "TYPE_ATSC_T";

        /** The channel type for ATSC (cable). */
        public static final int TYPE_ATSC_C = 0x00020200;
        public static final String TYPE_ATSC_C = "TYPE_ATSC_C";

        /** The channel type for ATSC-M/H (mobile/handheld). */
        public static final int TYPE_ATSC_M_H = 0x00020300;
        public static final String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";

        /** The channel type for ISDB-T (terrestrial). */
        public static final int TYPE_ISDB_T = 0x00030000;
        public static final String TYPE_ISDB_T = "TYPE_ISDB_T";

        /** The channel type for ISDB-Tb (Brazil). */
        public static final int TYPE_ISDB_TB = 0x00030100;
        public static final String TYPE_ISDB_TB = "TYPE_ISDB_TB";

        /** The channel type for ISDB-S (satellite). */
        public static final int TYPE_ISDB_S = 0x00030200;
        public static final String TYPE_ISDB_S = "TYPE_ISDB_S";

        /** The channel type for ISDB-C (cable). */
        public static final int TYPE_ISDB_C = 0x00030300;
        public static final String TYPE_ISDB_C = "TYPE_ISDB_C";

        /** The channel type for 1seg (handheld). */
        public static final int TYPE_1SEG = 0x00030400;
        public static final String TYPE_1SEG = "TYPE_1SEG";

        /** The channel type for DTMB (terrestrial). */
        public static final int TYPE_DTMB = 0x00040000;
        public static final String TYPE_DTMB = "TYPE_DTMB";

        /** The channel type for CMMB (handheld). */
        public static final int TYPE_CMMB = 0x00040100;
        public static final String TYPE_CMMB = "TYPE_CMMB";

        /** The channel type for T-DMB (terrestrial). */
        public static final int TYPE_T_DMB = 0x00050000;
        public static final String TYPE_T_DMB = "TYPE_T_DMB";

        /** The channel type for S-DMB (satellite). */
        public static final int TYPE_S_DMB = 0x00050100;
        public static final String TYPE_S_DMB = "TYPE_S_DMB";

        /** A generic service type. */
        public static final int SERVICE_TYPE_OTHER = 0x0;
        public static final String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";

        /** The service type for regular TV channels that have both audio and video. */
        public static final int SERVICE_TYPE_AUDIO_VIDEO = 0x1;
        public static final String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";

        /** The service type for radio channels that have audio only. */
        public static final int SERVICE_TYPE_AUDIO = 0x2;
        public static final String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";

        /** The video format for 240p. */
        public static final String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
@@ -521,7 +521,7 @@ public final class TvContract {
         * </p><p>
         * This is a required field.
         * </p><p>
         * Type: INTEGER
         * Type: TEXT
         * </p>
         */
        public static final String COLUMN_TYPE = "type";
@@ -537,7 +537,7 @@ public final class TvContract {
         * </p><p>
         * This is a required field.
         * </p><p>
         * Type: INTEGER
         * Type: TEXT
         * </p>
         */
        public static final String COLUMN_SERVICE_TYPE = "service_type";
+41 −40
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseIntArray;
import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;
@@ -47,60 +48,55 @@ public final class TvInputInfo implements Parcelable {
    private static final boolean DEBUG = false;
    private static final String TAG = "TvInputInfo";

    // Should be in sync with frameworks/base/core/res/res/values/attrs.xml
    /**
     * TV input type: the TV input service is not handling input from hardware. For example,
     * services showing streaming from the internet falls into this type.
     * TV input type: the TV input service is a tuner which provides channels.
     */
    public static final int TYPE_VIRTUAL = 0;

    // Should be in sync with TvInputHardwareInfo.

    public static final int TYPE_TUNER = 0;
    /**
     * TV input type: a generic hardware TV input type.
     */
    public static final int TYPE_OTHER_HARDWARE = TvInputHardwareInfo.TV_INPUT_TYPE_OTHER_HARDWARE;
    /**
     * TV input type: the TV input service is a tuner. (e.g. terrestrial tuner)
     */
    public static final int TYPE_TUNER = TvInputHardwareInfo.TV_INPUT_TYPE_TUNER;
    public static final int TYPE_OTHER = 1000;
    /**
     * TV input type: the TV input service represents a composite port.
     */
    public static final int TYPE_COMPOSITE = TvInputHardwareInfo.TV_INPUT_TYPE_COMPOSITE;
    public static final int TYPE_COMPOSITE = 1001;
    /**
     * TV input type: the TV input service represents a SVIDEO port.
     */
    public static final int TYPE_SVIDEO = TvInputHardwareInfo.TV_INPUT_TYPE_SVIDEO;
    public static final int TYPE_SVIDEO = 1002;
    /**
     * TV input type: the TV input service represents a SCART port.
     */
    public static final int TYPE_SCART = TvInputHardwareInfo.TV_INPUT_TYPE_SCART;
    public static final int TYPE_SCART = 1003;
    /**
     * TV input type: the TV input service represents a component port.
     */
    public static final int TYPE_COMPONENT = TvInputHardwareInfo.TV_INPUT_TYPE_COMPONENT;
    public static final int TYPE_COMPONENT = 1004;
    /**
     * TV input type: the TV input service represents a VGA port.
     */
    public static final int TYPE_VGA = TvInputHardwareInfo.TV_INPUT_TYPE_VGA;
    public static final int TYPE_VGA = 1005;
    /**
     * TV input type: the TV input service represents a DVI port.
     */
    public static final int TYPE_DVI = TvInputHardwareInfo.TV_INPUT_TYPE_DVI;
    public static final int TYPE_DVI = 1006;
    /**
     * TV input type: the TV input service is HDMI. (e.g. HDMI 1)
     */
    public static final int TYPE_HDMI = TvInputHardwareInfo.TV_INPUT_TYPE_HDMI;
    public static final int TYPE_HDMI = 1007;
    /**
     * TV input type: the TV input service represents a display port.
     */
    public static final int TYPE_DISPLAY_PORT = TvInputHardwareInfo.TV_INPUT_TYPE_DISPLAY_PORT;
    public static final int TYPE_DISPLAY_PORT = 1008;

    /**
     * The ID of the TV input to provide to the setup activity and settings activity.
     */
    public static final String EXTRA_INPUT_ID = "inputId";

    private static SparseIntArray sHardwareTypeToTvInputType = new SparseIntArray();

    private static final String XML_START_TAG_NAME = "tv-input";

    private final ResolveInfo mService;
@@ -110,7 +106,22 @@ public final class TvInputInfo implements Parcelable {
    // Attributes from XML meta data.
    private String mSetupActivity;
    private String mSettingsActivity;
    private int mType = TYPE_VIRTUAL;
    private int mType = TYPE_TUNER;

    static {
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_OTHER_HARDWARE,
                TYPE_OTHER);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_TUNER, TYPE_TUNER);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_COMPOSITE, TYPE_COMPOSITE);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_SVIDEO, TYPE_SVIDEO);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_SCART, TYPE_SCART);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_COMPONENT, TYPE_COMPONENT);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_VGA, TYPE_VGA);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_DVI, TYPE_DVI);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_HDMI, TYPE_HDMI);
        sHardwareTypeToTvInputType.put(TvInputHardwareInfo.TV_INPUT_TYPE_DISPLAY_PORT,
                TYPE_DISPLAY_PORT);
    }

    /**
     * Create a new instance of the TvInputInfo class,
@@ -123,7 +134,7 @@ public final class TvInputInfo implements Parcelable {
            throws XmlPullParserException, IOException {
        return createTvInputInfo(context, service, generateInputIdForComponentName(
                new ComponentName(service.serviceInfo.packageName, service.serviceInfo.name)),
                null);
                null, TYPE_TUNER);
    }

    /**
@@ -138,7 +149,7 @@ public final class TvInputInfo implements Parcelable {
            HdmiCecDeviceInfo cecInfo, String parentId) throws XmlPullParserException, IOException {
        return createTvInputInfo(context, service, generateInputIdForHdmiCec(
                new ComponentName(service.serviceInfo.packageName, service.serviceInfo.name),
                cecInfo), parentId);
                cecInfo), parentId, TYPE_HDMI);
    }

    /**
@@ -151,13 +162,14 @@ public final class TvInputInfo implements Parcelable {
     */
    public static TvInputInfo createTvInputInfo(Context context, ResolveInfo service,
            TvInputHardwareInfo hardwareInfo) throws XmlPullParserException, IOException {
        int inputType = sHardwareTypeToTvInputType.get(hardwareInfo.getType(), TYPE_TUNER);
        return createTvInputInfo(context, service, generateInputIdForHardware(
                new ComponentName(service.serviceInfo.packageName, service.serviceInfo.name),
                hardwareInfo), null);
                hardwareInfo), null, inputType);
    }

    private static TvInputInfo createTvInputInfo(Context context, ResolveInfo service,
            String id, String parentId) throws XmlPullParserException, IOException {
            String id, String parentId, int inputType) throws XmlPullParserException, IOException {
        ServiceInfo si = service.serviceInfo;
        PackageManager pm = context.getPackageManager();
        XmlResourceParser parser = null;
@@ -182,7 +194,7 @@ public final class TvInputInfo implements Parcelable {
                        "Meta-data does not start with tv-input-service tag in " + si.name);
            }

            TvInputInfo input = new TvInputInfo(service, id, parentId);
            TvInputInfo input = new TvInputInfo(service, id, parentId, inputType);
            TypedArray sa = res.obtainAttributes(attrs,
                    com.android.internal.R.styleable.TvInputService);
            input.mSetupActivity = sa.getString(
@@ -196,14 +208,6 @@ public final class TvInputInfo implements Parcelable {
                Log.d(TAG, "Settings activity loaded. [" + input.mSettingsActivity + "] for "
                        + si.name);
            }
            if (pm.checkPermission(android.Manifest.permission.TV_INPUT_HARDWARE, si.packageName)
                    == PackageManager.PERMISSION_GRANTED) {
                input.mType = sa.getInt(
                        com.android.internal.R.styleable.TvInputService_tvInputType, TYPE_VIRTUAL);
                if (DEBUG) {
                    Log.d(TAG, "Type loaded. [" + input.mType + "] for " + si.name);
                }
            }
            sa.recycle();

            return input;
@@ -222,11 +226,13 @@ public final class TvInputInfo implements Parcelable {
     * @param service The ResolveInfo returned from the package manager about this TV input service.
     * @param id ID of this TV input. Should be generated via generateInputId*().
     * @param parentId ID of this TV input's parent input. {@code null} if none exists.
     * @param type The type of this TV input service.
     */
    private TvInputInfo(ResolveInfo service, String id, String parentId) {
    private TvInputInfo(ResolveInfo service, String id, String parentId, int type) {
        mService = service;
        mId = id;
        mParentId = parentId;
        mType = type;
    }

    /**
@@ -314,12 +320,7 @@ public final class TvInputInfo implements Parcelable {
     * @see TvContract#buildChannelUriForPassthroughTvInput(String)
     */
    public boolean isPassthroughInputType() {
        if (mType == TYPE_HDMI || mType == TYPE_DISPLAY_PORT || mType == TYPE_SCART
                || mType == TYPE_DVI || mType == TYPE_VGA || mType == TYPE_COMPONENT
                || mType == TYPE_COMPOSITE || mType == TYPE_SVIDEO) {
            return true;
        }
        return false;
        return mType != TYPE_TUNER;
    }

    /**
Loading