1package com.android.packageinstaller.permission.ui;
2
3import android.content.Context;
4import android.graphics.PixelFormat;
5import android.graphics.drawable.Drawable;
6import android.graphics.drawable.Icon;
7import android.os.Bundle;
8import android.util.Log;
9import android.view.View;
10import android.view.WindowManager;
11
12import com.android.packageinstaller.R;
13import com.android.packageinstaller.permission.ui.wear.ConfirmationViewHandler;
14
15/**
16 * Watch-specific view handler for the grant permissions activity.
17 */
18final class GrantPermissionsWatchViewHandler extends ConfirmationViewHandler
19        implements GrantPermissionsViewHandler {
20    private static final String TAG = "GrantPermsWatchViewH";
21
22    private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME";
23
24    private final Context mContext;
25
26    private ResultListener mResultListener;
27
28    private String mGroupName;
29    private boolean mShowDoNotAsk;
30
31    private CharSequence mMessage;
32    private String mCurrentPageText;
33    private Icon mIcon;
34
35    GrantPermissionsWatchViewHandler(Context context) {
36        super(context);
37        mContext = context;
38    }
39
40    @Override
41    public GrantPermissionsWatchViewHandler setResultListener(ResultListener listener) {
42        mResultListener = listener;
43        return this;
44    }
45
46    @Override
47    public View createView() {
48        if (Log.isLoggable(TAG, Log.DEBUG)) {
49            Log.d(TAG, "createView()");
50        }
51
52        mShowDoNotAsk = false;
53
54        return super.createView();
55    }
56
57    @Override
58    public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) {
59        outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
60        outLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
61        outLayoutParams.format = PixelFormat.OPAQUE;
62        outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
63        outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
64    }
65
66    @Override
67    public void updateUi(String groupName, int groupCount, int groupIndex, Icon icon,
68            CharSequence message, boolean showDoNotAsk) {
69        if (Log.isLoggable(TAG, Log.DEBUG)) {
70            Log.d(TAG, "updateUi() - groupName: " + groupName
71                            + ", groupCount: " + groupCount
72                            + ", groupIndex: " + groupIndex
73                            + ", icon: " + icon
74                            + ", message: " + message
75                            + ", showDoNotAsk: " + showDoNotAsk);
76        }
77
78        mGroupName = groupName;
79        mShowDoNotAsk = showDoNotAsk;
80        mMessage = message;
81        mIcon = icon;
82        mCurrentPageText = (groupCount > 1 ?
83                mContext.getString(R.string.current_permission_template, groupIndex + 1, groupCount)
84                : null);
85
86        invalidate();
87    }
88
89    @Override
90    public void saveInstanceState(Bundle outState) {
91        outState.putString(ARG_GROUP_NAME, mGroupName);
92    }
93
94    @Override
95    public void loadInstanceState(Bundle savedInstanceState) {
96        mGroupName = savedInstanceState.getString(ARG_GROUP_NAME);
97    }
98
99    @Override
100    public void onBackPressed() {
101        if (mResultListener != null) {
102            mResultListener.onPermissionGrantResult(mGroupName, false, false);
103        }
104    }
105
106    @Override // ConfirmationViewHandler
107    public void onButton1() {
108        onClick(true /* granted */, false /* doNotAskAgain */);
109    }
110
111    @Override // ConfirmationViewHandler
112    public void onButton2() {
113        onClick(false /* granted */, false /* doNotAskAgain */);
114    }
115
116    @Override // ConfirmationViewHandler
117    public void onButton3() {
118        onClick(false /* granted */, true /* doNotAskAgain */);
119    }
120
121    @Override // ConfirmationViewHandler
122    public CharSequence getCurrentPageText() {
123        return mCurrentPageText;
124    }
125
126    @Override // ConfirmationViewHandler
127    public Icon getPermissionIcon() {
128        return mIcon;
129    }
130
131    @Override // ConfirmationViewHandler
132    public CharSequence getMessage() {
133        return mMessage;
134    }
135
136    @Override // ConfirmationViewHandler
137    public int getButtonBarMode() {
138        return mShowDoNotAsk ? MODE_VERTICAL_BUTTONS : MODE_HORIZONTAL_BUTTONS;
139    }
140
141    @Override // ConfirmationViewHandler
142    public CharSequence getVerticalButton1Text() {
143        return mContext.getString(R.string.grant_dialog_button_allow);
144    }
145
146    @Override // ConfirmationViewHandler
147    public CharSequence getVerticalButton2Text() {
148        return mContext.getString(R.string.grant_dialog_button_deny);
149    }
150
151    @Override // ConfirmationViewHandler
152    public CharSequence getVerticalButton3Text() {
153        return mContext.getString(R.string.grant_dialog_button_deny_dont_ask_again);
154    }
155
156    @Override // ConfirmationViewHandler
157    public Drawable getVerticalButton1Icon(){
158        return mContext.getDrawable(R.drawable.confirm_button);
159    }
160
161    @Override // ConfirmationViewHandler
162    public Drawable getVerticalButton2Icon(){
163        return mContext.getDrawable(R.drawable.cancel_button);
164    }
165
166    @Override // ConfirmationViewHandler
167    public Drawable getVerticalButton3Icon(){
168        return mContext.getDrawable(R.drawable.deny_button);
169    }
170
171    private void onClick(boolean granted, boolean doNotAskAgain) {
172        if (mResultListener != null) {
173            mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain);
174        }
175    }
176}
177