1ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslavpackage com.android.packageinstaller.permission.ui.television;
217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.content.Context;
417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.graphics.PixelFormat;
517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.graphics.drawable.Icon;
617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.os.Bundle;
717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.view.Gravity;
817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.view.LayoutInflater;
917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.view.View;
1017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.view.View.OnClickListener;
1117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.view.WindowManager;
1217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.widget.Button;
1317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.widget.ImageView;
1417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.widget.LinearLayout;
1517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport android.widget.TextView;
1617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
1717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkertimport com.android.packageinstaller.R;
18ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslavimport com.android.packageinstaller.permission.ui.GrantPermissionsViewHandler;
1917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
2017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert/**
2117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert * TV-specific view handler for the grant permissions activity.
2217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert */
23ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslavpublic final class GrantPermissionsViewHandlerImpl implements GrantPermissionsViewHandler, OnClickListener {
2417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
2517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME";
2617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
2717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private final Context mContext;
2817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
2917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private ResultListener mResultListener;
3017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
3117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private String mGroupName;
3217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
3317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private LinearLayout mRootView;
3417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private TextView mMessageView;
3517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private ImageView mIconView;
3617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private TextView mCurrentGroupView;
3717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private Button mAllowButton;
3817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private Button mSoftDenyButton;
3917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    private Button mHardDenyButton;
4017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
415e3cc5335e208fff39b0983a88f37e92b3da8c69Svet Ganov    public GrantPermissionsViewHandlerImpl(Context context, String appPackageName) {
4217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mContext = context;
4317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
4417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
4517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
46ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslav    public GrantPermissionsViewHandlerImpl setResultListener(ResultListener listener) {
4717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mResultListener = listener;
4817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        return this;
4917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
5017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
5117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
5217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    public View createView() {
5317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mRootView = (LinearLayout) LayoutInflater.from(mContext)
5417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                .inflate(R.layout.grant_permissions, null);
5517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
5617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mMessageView = (TextView) mRootView.findViewById(R.id.permission_message);
5717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mIconView = (ImageView) mRootView.findViewById(R.id.permission_icon);
5817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mCurrentGroupView = (TextView) mRootView.findViewById(R.id.current_page_text);
5917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mAllowButton = (Button) mRootView.findViewById(R.id.permission_allow_button);
6017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mSoftDenyButton = (Button) mRootView.findViewById(R.id.permission_deny_button);
6117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mHardDenyButton = (Button) mRootView.findViewById(
6217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                R.id.permission_deny_dont_ask_again_button);
6317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
6417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mAllowButton.setOnClickListener(this);
6517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mSoftDenyButton.setOnClickListener(this);
6617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mHardDenyButton.setOnClickListener(this);
6717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
6817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        return mRootView;
6917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
7017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
7117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
7217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) {
7317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
7417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
7517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outLayoutParams.format = PixelFormat.OPAQUE;
7617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outLayoutParams.gravity = Gravity.BOTTOM;
7717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
7817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
7917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
8017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
8117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
8217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon,
8317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            CharSequence message, boolean showDoNotAsk) {
8417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mGroupName = groupName;
8517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
8617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mMessageView.setText(message);
876b1912006795c1b65bb8d905ef676915bf073de1Philip P. Moltmann
886b1912006795c1b65bb8d905ef676915bf073de1Philip P. Moltmann        if (icon != null) {
896b1912006795c1b65bb8d905ef676915bf073de1Philip P. Moltmann            mIconView.setImageIcon(icon);
906b1912006795c1b65bb8d905ef676915bf073de1Philip P. Moltmann        }
916b1912006795c1b65bb8d905ef676915bf073de1Philip P. Moltmann
9217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mHardDenyButton.setVisibility(showDoNotAsk ? View.VISIBLE : View.GONE);
9317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        if (groupCount > 1) {
9417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            mCurrentGroupView.setVisibility(View.VISIBLE);
9517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template,
9617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                    groupIndex + 1, groupCount));
9717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        } else {
9817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            mCurrentGroupView.setVisibility(View.INVISIBLE);
9917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        }
10017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
10117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
10217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
10317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    public void saveInstanceState(Bundle outState) {
10417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        outState.putString(ARG_GROUP_NAME, mGroupName);
10517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
10617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
10717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
10817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    public void loadInstanceState(Bundle savedInstanceState) {
10917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        mGroupName = savedInstanceState.getString(ARG_GROUP_NAME);
11017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
11117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert
11217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    @Override
11317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    public void onClick(View view) {
11417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        boolean granted = false;
11517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        boolean doNotAskAgain = false;
11617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        switch (view.getId()) {
11717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            case R.id.permission_allow_button:
11817c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                granted = true;
11917c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                break;
12017c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            case R.id.permission_deny_dont_ask_again_button:
12117c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                doNotAskAgain = true;
12217c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert                break;
12317c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        }
12417c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        if (mResultListener != null) {
12517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert            mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain);
12617c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert        }
12717c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert    }
128ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav
129ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav    @Override
130ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav    public void onBackPressed() {
131ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav        if (mResultListener != null) {
132ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav            mResultListener.onPermissionGrantResult(mGroupName, false, false);
133ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav        }
134ac65014749a771543f78147ef63fdbfc06e69da7Svetoslav    }
13517c6b0c6492c259e02f1f1edbbf4863a71b6e7abTodd Volkert}
136