diff options
Diffstat (limited to 'src')
4 files changed, 146 insertions, 3 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 7d516b29..630335ed 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -36,6 +36,8 @@ import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.util.ArrayMap; import android.util.Log; +import android.view.Window; +import android.view.WindowManager; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; @@ -66,8 +68,7 @@ public class GrantPermissionsActivity extends Activity int uiMode = getResources().getConfiguration().uiMode & UI_MODE_TYPE_MASK; if (uiMode == UI_MODE_TYPE_TELEVISION) { - // TODO(tvolkert): Create GrantPermissionsTvViewHandler - mViewHandler = new GrantPermissionsDefaultViewHandler(this).setResultListener(this); + mViewHandler = new GrantPermissionsTvViewHandler(this).setResultListener(this); } else { mViewHandler = new GrantPermissionsDefaultViewHandler(this).setResultListener(this); } @@ -131,6 +132,11 @@ public class GrantPermissionsActivity extends Activity setContentView(mViewHandler.createView()); + Window window = getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + mViewHandler.updateWindowAttributes(layoutParams); + window.setAttributes(layoutParams); + if (!showNextPermissionGroupGrantRequest()) { setResultAndFinish(); } @@ -159,7 +165,7 @@ public class GrantPermissionsActivity extends Activity SpannableString message = new SpannableString(getString( R.string.permission_warning_template, appLabel, groupState.mGroup.getDescription())); - // Bold/color the app name. + // Color the app name. int appLabelStart = message.toString().indexOf(appLabel.toString(), 0); int appLabelLength = appLabel.length(); int color = getColor(R.color.grant_permissions_app_color); diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsDefaultViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsDefaultViewHandler.java index 0d8bd6cd..d755feeb 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsDefaultViewHandler.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsDefaultViewHandler.java @@ -28,6 +28,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLayoutChangeListener; import android.view.ViewGroup; +import android.view.WindowManager.LayoutParams; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.Button; @@ -284,6 +285,11 @@ final class GrantPermissionsDefaultViewHandler return mRootView; } + @Override + public void updateWindowAttributes(LayoutParams outLayoutParams) { + // No-op + } + private void updateDescription() { mIconView.setImageDrawable(mGroupIcon.loadDrawable(mContext)); mMessageView.setText(mGroupMessage); diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsTvViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsTvViewHandler.java new file mode 100644 index 00000000..244c282f --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsTvViewHandler.java @@ -0,0 +1,123 @@ +package com.android.packageinstaller.permission.ui; + +import android.content.Context; +import android.graphics.PixelFormat; +import android.graphics.drawable.Icon; +import android.os.Bundle; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.android.packageinstaller.R; + +/** + * TV-specific view handler for the grant permissions activity. + */ +final class GrantPermissionsTvViewHandler implements GrantPermissionsViewHandler, OnClickListener { + + private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME"; + + private final Context mContext; + + private ResultListener mResultListener; + + private String mGroupName; + + private LinearLayout mRootView; + private TextView mMessageView; + private ImageView mIconView; + private TextView mCurrentGroupView; + private Button mAllowButton; + private Button mSoftDenyButton; + private Button mHardDenyButton; + + GrantPermissionsTvViewHandler(Context context) { + mContext = context; + } + + @Override + public GrantPermissionsTvViewHandler setResultListener(ResultListener listener) { + mResultListener = listener; + return this; + } + + @Override + public View createView() { + mRootView = (LinearLayout) LayoutInflater.from(mContext) + .inflate(R.layout.grant_permissions, null); + + mMessageView = (TextView) mRootView.findViewById(R.id.permission_message); + mIconView = (ImageView) mRootView.findViewById(R.id.permission_icon); + mCurrentGroupView = (TextView) mRootView.findViewById(R.id.current_page_text); + mAllowButton = (Button) mRootView.findViewById(R.id.permission_allow_button); + mSoftDenyButton = (Button) mRootView.findViewById(R.id.permission_deny_button); + mHardDenyButton = (Button) mRootView.findViewById( + R.id.permission_deny_dont_ask_again_button); + + mAllowButton.setOnClickListener(this); + mSoftDenyButton.setOnClickListener(this); + mHardDenyButton.setOnClickListener(this); + + return mRootView; + } + + @Override + public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) { + outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + outLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + outLayoutParams.format = PixelFormat.OPAQUE; + outLayoutParams.gravity = Gravity.BOTTOM; + outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; + outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; + } + + @Override + public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon, + CharSequence message, boolean showDoNotAsk) { + mGroupName = groupName; + + mMessageView.setText(message); + mIconView.setImageIcon(icon); + mHardDenyButton.setVisibility(showDoNotAsk ? View.VISIBLE : View.GONE); + if (groupCount > 1) { + mCurrentGroupView.setVisibility(View.VISIBLE); + mCurrentGroupView.setText(mContext.getString(R.string.current_permission_template, + groupIndex + 1, groupCount)); + } else { + mCurrentGroupView.setVisibility(View.INVISIBLE); + } + } + + @Override + public void saveInstanceState(Bundle outState) { + outState.putString(ARG_GROUP_NAME, mGroupName); + } + + @Override + public void loadInstanceState(Bundle savedInstanceState) { + mGroupName = savedInstanceState.getString(ARG_GROUP_NAME); + } + + @Override + public void onClick(View view) { + boolean granted = false; + boolean doNotAskAgain = false; + switch (view.getId()) { + case R.id.permission_allow_button: + granted = true; + break; + case R.id.permission_deny_dont_ask_again_button: + doNotAskAgain = true; + break; + } + if (mResultListener != null) { + mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain); + } + } +} diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java index 36ba4e4f..118a6773 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsViewHandler.java @@ -19,6 +19,7 @@ package com.android.packageinstaller.permission.ui; import android.graphics.drawable.Icon; import android.os.Bundle; import android.view.View; +import android.view.WindowManager; /** * Class for managing the presentation and user interaction of the "grant @@ -41,6 +42,13 @@ interface GrantPermissionsViewHandler { View createView(); /** + * Updates the layout attributes of the current window. This is an optional + * operation; implementations only need to do work in this method if they + * need to alter the default styles provided by the activity's theme. + */ + void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams); + + /** * Updates the view hierarchy to reflect the specified state. * <p> * Note that this must be called at least once before showing the UI to |