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