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