• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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