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