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