1 package com.android.packageinstaller.permission.ui.television; 2 3 import static com.android.packageinstaller.permission.ui.GrantPermissionsActivity.LABEL_DENY_AND_DONT_ASK_AGAIN_BUTTON; 4 5 import android.content.Context; 6 import android.graphics.PixelFormat; 7 import android.graphics.drawable.Icon; 8 import android.os.Bundle; 9 import android.view.Gravity; 10 import android.view.LayoutInflater; 11 import android.view.View; 12 import android.view.View.OnClickListener; 13 import android.view.WindowManager; 14 import android.widget.Button; 15 import android.widget.ImageView; 16 import android.widget.LinearLayout; 17 import android.widget.TextView; 18 19 import com.android.packageinstaller.permission.ui.GrantPermissionsViewHandler; 20 import com.android.permissioncontroller.R; 21 22 /** 23 * TV-specific view handler for the grant permissions activity. 24 */ 25 public final class GrantPermissionsViewHandlerImpl implements GrantPermissionsViewHandler, OnClickListener { 26 27 private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME"; 28 29 private final Context mContext; 30 31 private ResultListener mResultListener; 32 33 private String mGroupName; 34 35 private LinearLayout mRootView; 36 private TextView mMessageView; 37 private ImageView mIconView; 38 private TextView mCurrentGroupView; 39 private Button mAllowButton; 40 private Button mSoftDenyButton; 41 private Button mHardDenyButton; 42 GrantPermissionsViewHandlerImpl(Context context, String appPackageName)43 public GrantPermissionsViewHandlerImpl(Context context, String appPackageName) { 44 mContext = context; 45 } 46 47 @Override setResultListener(ResultListener listener)48 public GrantPermissionsViewHandlerImpl setResultListener(ResultListener listener) { 49 mResultListener = listener; 50 return this; 51 } 52 53 @Override createView()54 public View createView() { 55 mRootView = (LinearLayout) LayoutInflater.from(mContext) 56 .inflate(R.layout.grant_permissions, null); 57 58 mMessageView = (TextView) mRootView.findViewById(R.id.permission_message); 59 mIconView = (ImageView) mRootView.findViewById(R.id.permission_icon); 60 mCurrentGroupView = (TextView) mRootView.findViewById(R.id.current_page_text); 61 mAllowButton = (Button) mRootView.findViewById(R.id.permission_allow_button); 62 mSoftDenyButton = (Button) mRootView.findViewById(R.id.permission_deny_button); 63 mHardDenyButton = (Button) mRootView.findViewById( 64 R.id.permission_deny_dont_ask_again_button); 65 66 mAllowButton.setOnClickListener(this); 67 mSoftDenyButton.setOnClickListener(this); 68 mHardDenyButton.setOnClickListener(this); 69 70 return mRootView; 71 } 72 73 @Override updateWindowAttributes(WindowManager.LayoutParams outLayoutParams)74 public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) { 75 outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; 76 outLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; 77 outLayoutParams.format = PixelFormat.OPAQUE; 78 outLayoutParams.gravity = Gravity.BOTTOM; 79 outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; 80 outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; 81 } 82 83 @Override updateUi(String groupName, int groupCount, int groupIndex, Icon icon, CharSequence message, CharSequence detailMessage, CharSequence[] buttonLabels)84 public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon, 85 CharSequence message, CharSequence detailMessage, CharSequence[] buttonLabels) { 86 // TODO: Handle detailMessage 87 88 mGroupName = groupName; 89 90 mMessageView.setText(message); 91 92 if (icon != null) { 93 mIconView.setImageIcon(icon); 94 } 95 96 mHardDenyButton.setVisibility( 97 buttonLabels[LABEL_DENY_AND_DONT_ASK_AGAIN_BUTTON] != null ? View.VISIBLE 98 : View.GONE); 99 if (groupCount > 1) { 100 mCurrentGroupView.setVisibility(View.VISIBLE); 101 mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template, 102 groupIndex + 1, groupCount)); 103 } else { 104 mCurrentGroupView.setVisibility(View.INVISIBLE); 105 } 106 } 107 108 @Override saveInstanceState(Bundle outState)109 public void saveInstanceState(Bundle outState) { 110 outState.putString(ARG_GROUP_NAME, mGroupName); 111 } 112 113 @Override loadInstanceState(Bundle savedInstanceState)114 public void loadInstanceState(Bundle savedInstanceState) { 115 mGroupName = savedInstanceState.getString(ARG_GROUP_NAME); 116 } 117 118 @Override onClick(View view)119 public void onClick(View view) { 120 switch (view.getId()) { 121 case R.id.permission_allow_button: 122 mResultListener.onPermissionGrantResult(mGroupName, GRANTED_ALWAYS); 123 break; 124 case R.id.permission_deny_button: 125 mResultListener.onPermissionGrantResult(mGroupName, DENIED); 126 break; 127 case R.id.permission_deny_dont_ask_again_button: 128 mResultListener.onPermissionGrantResult(mGroupName, DENIED_DO_NOT_ASK_AGAIN); 129 break; 130 } 131 } 132 133 @Override onBackPressed()134 public void onBackPressed() { 135 if (mResultListener != null) { 136 mResultListener.onPermissionGrantResult(mGroupName, DENIED); 137 } 138 } 139 } 140