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, String appPackageName)41 public GrantPermissionsViewHandlerImpl(Context context, String appPackageName) { 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 88 if (icon != null) { 89 mIconView.setImageIcon(icon); 90 } 91 92 mHardDenyButton.setVisibility(showDoNotAsk ? View.VISIBLE : View.GONE); 93 if (groupCount > 1) { 94 mCurrentGroupView.setVisibility(View.VISIBLE); 95 mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template, 96 groupIndex + 1, groupCount)); 97 } else { 98 mCurrentGroupView.setVisibility(View.INVISIBLE); 99 } 100 } 101 102 @Override saveInstanceState(Bundle outState)103 public void saveInstanceState(Bundle outState) { 104 outState.putString(ARG_GROUP_NAME, mGroupName); 105 } 106 107 @Override loadInstanceState(Bundle savedInstanceState)108 public void loadInstanceState(Bundle savedInstanceState) { 109 mGroupName = savedInstanceState.getString(ARG_GROUP_NAME); 110 } 111 112 @Override onClick(View view)113 public void onClick(View view) { 114 boolean granted = false; 115 boolean doNotAskAgain = false; 116 switch (view.getId()) { 117 case R.id.permission_allow_button: 118 granted = true; 119 break; 120 case R.id.permission_deny_dont_ask_again_button: 121 doNotAskAgain = true; 122 break; 123 } 124 if (mResultListener != null) { 125 mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain); 126 } 127 } 128 129 @Override onBackPressed()130 public void onBackPressed() { 131 if (mResultListener != null) { 132 mResultListener.onPermissionGrantResult(mGroupName, false, false); 133 } 134 } 135 } 136