/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.documentsui.sidebar;

import android.content.Context;
import android.content.pm.ResolveInfo;
import android.provider.DocumentsProvider;
import android.view.View;

import androidx.annotation.LayoutRes;

import com.android.documentsui.ActionHandler;
import com.android.documentsui.R;
import com.android.documentsui.base.RootInfo;

/**
 * An {@link Item} for each root provided by {@link DocumentsProvider}s
 * and apps that supports some picking actions like {@link Intent#ACTION_GET_CONTENT}.
 * This is only used in pickers.
 */
class RootAndAppItem extends RootItem {

    public final ResolveInfo resolveInfo;

    RootAndAppItem(
            RootInfo root, ResolveInfo info, ActionHandler actionHandler, boolean maybeShowBadge) {
        this(R.layout.item_root, root, info, actionHandler, maybeShowBadge);
    }

    RootAndAppItem(
            @LayoutRes int layoutId,
            RootInfo root,
            ResolveInfo info,
            ActionHandler actionHandler,
            boolean maybeShowBadge) {
        super(layoutId, root, actionHandler, info.activityInfo.packageName, maybeShowBadge);
        this.resolveInfo = info;
    }

    @Override
    boolean showAppDetails() {
        mActionHandler.showAppDetails(resolveInfo, userId);
        return true;
    }

    @Override
    public void bindView(View convertView) {
        final Context context = convertView.getContext();

        String contentDescription =
                context.getResources().getString(
                        R.string.open_external_app, userId.getUserBadgedLabel(context, root.title));

        bindAction(convertView, View.VISIBLE, R.drawable.ic_exit_to_app, contentDescription);
        bindIconAndTitle(convertView);
        bindSummary(convertView, root.summary);
    }

    @Override
    protected void onActionClick(View view) {
        mActionHandler.openRoot(resolveInfo, userId);
    }

    @Override
    public String toString() {
        return "RootAndAppItem{"
                + "id=" + stringId
                + ", userId=" + userId
                + ", root=" + root
                + ", resolveInfo=" + resolveInfo
                + ", docInfo=" + docInfo
                + "}";
    }
}
