/* * Copyright (C) 2014 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.browser; import android.content.Context; import android.net.Uri; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.webkit.GeolocationPermissions; import android.webkit.PermissionRequest; import android.widget.Button; import android.widget.CheckBox; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.util.Enumeration; import java.util.Vector; public class PermissionsPrompt extends RelativeLayout { private TextView mMessage; private Button mAllowButton; private Button mDenyButton; private CheckBox mRemember; private PermissionRequest mRequest; public PermissionsPrompt(Context context) { this(context, null); } public PermissionsPrompt(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onFinishInflate() { super.onFinishInflate(); init(); } private void init() { mMessage = (TextView) findViewById(R.id.message); mAllowButton = (Button) findViewById(R.id.allow_button); mDenyButton = (Button) findViewById(R.id.deny_button); mRemember = (CheckBox) findViewById(R.id.remember); mAllowButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handleButtonClick(true); } }); mDenyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handleButtonClick(false); } }); } public void show(PermissionRequest request) { mRequest = request; setMessage(); mRemember.setChecked(true); setVisibility(View.VISIBLE); } public void setMessage() { String[] resources = mRequest.getResources(); Vector<String> strings = new Vector<String>(); for (String resource : resources) { if (resource.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) strings.add(getResources().getString(R.string.resource_video_capture)); else if (resource.equals(PermissionRequest.RESOURCE_AUDIO_CAPTURE)) strings.add(getResources().getString(R.string.resource_audio_capture)); else if (resource.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) strings.add(getResources().getString(R.string.resource_protected_media_id)); } if (strings.isEmpty()) return; Enumeration<String> e = strings.elements(); StringBuilder sb = new StringBuilder(e.nextElement()); if (e.hasMoreElements()) { sb.append(", "); sb.append(e.nextElement()); } mMessage.setText(String.format( getResources().getString(R.string.permissions_prompt_message), mRequest.getOrigin(), sb.toString())); } /** * Hides the prompt. */ public void hide() { setVisibility(View.GONE); } /** * Handles a click on one the buttons by invoking the callback. */ private void handleButtonClick(boolean allow) { hide(); if (allow) mRequest.grant(mRequest.getResources()); else mRequest.deny(); } }