OSDN Git Service

2ef5fd3c3b782e4233acaa75c67dfe47e9373603
[android-x86/external-koush-Superuser.git] / Superuser / src / com / koushikdutta / superuser / SettingsFragmentInternal.java
1 package com.koushikdutta.superuser;
2
3 import android.annotation.SuppressLint;
4 import android.app.Activity;
5 import android.app.AlertDialog;
6 import android.app.Dialog;
7 import android.content.Context;
8 import android.content.DialogInterface;
9 import android.content.DialogInterface.OnClickListener;
10 import android.os.Bundle;
11 import android.support.v4.app.DialogFragment;
12 import android.view.LayoutInflater;
13 import android.view.View;
14 import android.view.ViewGroup;
15 import android.widget.FrameLayout;
16 import android.widget.Toast;
17
18 import com.koushikdutta.superuser.util.Settings;
19 import com.koushikdutta.widgets.BetterListFragmentInternal;
20 import com.koushikdutta.widgets.FragmentInterfaceWrapper;
21 import com.koushikdutta.widgets.ListItem;
22
23 @SuppressLint("ValidFragment")
24 public class SettingsFragmentInternal extends BetterListFragmentInternal {
25     public SettingsFragmentInternal(FragmentInterfaceWrapper fragment) {
26         super(fragment);
27     }
28
29     @Override
30     protected int getListFragmentResource() {
31         return R.layout.settings;
32     }
33     
34 //    static final int containerId = 100001;
35 //    public static class MyPinFragment extends DialogFragment {
36 //        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
37 //            FrameLayout ret =  new FrameLayout(getActivity());
38 //            ret.setId(containerId);
39 //            return ret;
40 //        };
41 //        
42 //        private int title;
43 //        public void setTitle(int title) {
44 //            this.title = title;
45 //        }
46 //
47 //        Dialog d;
48 //        @Override
49 //        public Dialog onCreateDialog(Bundle savedInstanceState) {
50 //            d = super.onCreateDialog(savedInstanceState);
51 //            d.setTitle(title);
52 //            PinView pf = new PinView() {
53 //                @Override
54 //                public void onCancel() {
55 //                    super.onCancel();
56 //                    d.dismiss();
57 //                }
58 //                
59 //                @Override
60 //                public void onEnter(String password) {
61 //                    super.onEnter(password);
62 //                    MyPinFragment.this.onEnter(password);
63 //                }
64 //            };
65 //            getChildFragmentManager().beginTransaction().add(containerId, pf).commit();
66 //
67 //            return d;
68 //        }
69 //        
70 //        public void onEnter(String password) {
71 //            d.dismiss();
72 //        }
73 //    };
74
75     ListItem pinItem;
76     void confirmPin(final String pin) {
77         final Dialog d = new Dialog(getContext());
78         d.setTitle(R.string.confirm_pin);
79         d.setContentView(new PinViewHelper((LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE), null, null) {
80             public void onEnter(String password) {
81                 super.onEnter(password);
82                 if (pin.equals(password)) {
83                     Settings.setPin(getActivity(), password);
84                     pinItem.setSummary(Settings.isPinProtected(getActivity()) ? R.string.pin_set : R.string.pin_protection_summary);
85                     if (password != null && password.length() > 0)
86                         Toast.makeText(getActivity(), getString(R.string.pin_set), Toast.LENGTH_SHORT).show();
87                     d.dismiss();
88                     return;
89                 }
90                 Toast.makeText(getActivity(), getString(R.string.pin_mismatch), Toast.LENGTH_SHORT).show();
91             };
92             
93             public void onCancel() {
94                 super.onCancel();
95                 d.dismiss();
96             };
97         }.getView());
98         d.show();
99     }
100     
101     void setPin() {
102         final Dialog d = new Dialog(getContext());
103         d.setTitle(R.string.enter_new_pin);
104         d.setContentView(new PinViewHelper((LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE), null, null) {
105             public void onEnter(String password) {
106                 super.onEnter(password);
107                 confirmPin(password);
108                 d.dismiss();
109             };
110             
111             public void onCancel() {
112                 super.onCancel();
113                 d.dismiss();
114             };
115         }.getView());
116         d.show();
117     }
118
119     void checkPin() {
120         if (Settings.isPinProtected(getActivity())) {
121             final Dialog d = new Dialog(getContext());
122             d.setTitle(R.string.enter_pin);
123             d.setContentView(new PinViewHelper((LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE), null, null) {
124                 public void onEnter(String password) {
125                     super.onEnter(password);
126                     if (Settings.checkPin(getActivity(), password)) {
127                         super.onEnter(password);
128                         setPin();
129                         d.dismiss();
130                         return;
131                     }
132                     Toast.makeText(getActivity(), getString(R.string.incorrect_pin), Toast.LENGTH_SHORT).show();
133                 };
134                 
135                 public void onCancel() {
136                     super.onCancel();
137                     d.dismiss();
138                 };
139             }.getView());
140             d.show();
141         }
142         else {
143             setPin();
144         }
145     }
146     
147     @Override
148     protected void onCreate(Bundle savedInstanceState, View view) {
149         super.onCreate(savedInstanceState, view);
150         
151         if (Settings.getMultiuserMode(getActivity()) != Settings.MULTIUSER_MODE_NONE) {
152             addItem(R.string.security, new ListItem(this, R.string.multiuser_policy, 0) {
153                 void update() {
154                     int res = -1;
155                     switch (Settings.getMultiuserMode(getActivity())) {
156                     case Settings.MULTIUSER_MODE_OWNER_MANAGED:
157                         res = R.string.multiuser_owner_managed_summary;
158                         break;
159                     case Settings.MULTIUSER_MODE_OWNER_ONLY:
160                         res = R.string.multiuser_owner_only_summary;
161                         break;
162                     case Settings.MULTIUSER_MODE_USER:
163                         res = R.string.multiuser_user_summary;
164                         break;
165                     }
166                     
167                     if (!Helper.isAdminUser(getActivity())) {
168                         setEnabled(false);
169                         String s = "";
170                         if (res != -1)
171                             s = getString(res) + "\n";
172                         setSummary(s + getString(R.string.multiuser_require_owner));
173                     }
174                     else {
175                         if (res != -1)
176                             setSummary(res);
177                     }
178                 }
179                 
180                 {
181                     update();
182                 }
183                 
184                 @Override
185                 public void onClick(View view) {
186                     super.onClick(view);
187                     
188                     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
189                     builder.setTitle(R.string.multiuser_policy);
190                     String[] items = new String[] { getString(R.string.multiuser_owner_only), getString(R.string.multiuser_owner_managed), getString(R.string.multiuser_user) };
191                     builder.setItems(items, new OnClickListener() {
192                         @Override
193                         public void onClick(DialogInterface dialog, int which) {
194                             switch (which) {
195                             case 0:
196                                 Settings.setMultiuserMode(getActivity(), Settings.MULTIUSER_MODE_OWNER_ONLY);
197                                 break;
198                             case 1:
199                                 Settings.setMultiuserMode(getActivity(), Settings.MULTIUSER_MODE_OWNER_MANAGED);
200                                 break;
201                             case 2:
202                                 Settings.setMultiuserMode(getActivity(), Settings.MULTIUSER_MODE_USER);
203                                 break;
204                             }
205                             update();
206                         }
207                     });
208                     builder.create().show();
209                 }
210             }).setAttrDrawable(R.attr.multiuserIcon);
211         }
212         
213         addItem(R.string.security, new ListItem(this, R.string.declared_permission, R.string.declared_permission_summary) {
214             @Override
215             public void onClick(View view) {
216                 super.onClick(view);
217                 Settings.setRequirePermission(getActivity(), getChecked());
218             }
219         })
220         .setAttrDrawable(R.attr.declaredPermissionsIcon)
221         .setCheckboxVisible(true)
222         .setChecked(Settings.getRequirePermission(getActivity()));
223
224         addItem(R.string.security, new ListItem(this, R.string.automatic_response, 0) {
225             void update() {
226                 switch (Settings.getAutomaticResponse(getActivity())) {
227                 case Settings.AUTOMATIC_RESPONSE_ALLOW:
228                     setSummary(R.string.automatic_response_allow_summary);
229                     break;
230                 case Settings.AUTOMATIC_RESPONSE_DENY:
231                     setSummary(R.string.automatic_response_deny_summary);
232                     break;
233                 case Settings.AUTOMATIC_RESPONSE_PROMPT:
234                     setSummary(R.string.automatic_response_prompt_summary);
235                     break;
236                 }
237             }
238             
239             {
240                 update();
241             }
242             @Override
243             public void onClick(View view) {
244                 super.onClick(view);
245                 
246                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
247                 builder.setTitle(R.string.automatic_response);
248                 String[] items = new String[] { getString(R.string.prompt), getString(R.string.deny), getString(R.string.allow) };
249                 builder.setItems(items, new OnClickListener() {
250                     @Override
251                     public void onClick(DialogInterface dialog, int which) {
252                         switch (which) {
253                         case 0:
254                             Settings.setAutomaticResponse(getActivity(), Settings.AUTOMATIC_RESPONSE_PROMPT);
255                             break;
256                         case 1:
257                             Settings.setAutomaticResponse(getActivity(), Settings.AUTOMATIC_RESPONSE_DENY);
258                             break;
259                         case 2:
260                             Settings.setAutomaticResponse(getActivity(), Settings.AUTOMATIC_RESPONSE_ALLOW);
261                             break;
262                         }
263                         update();
264                     }
265                 });
266                 builder.create().show();
267             }
268         })
269         .setAttrDrawable(R.attr.automaticResponseIcon);
270
271         pinItem = addItem(R.string.security, new ListItem(this, R.string.pin_protection, Settings.isPinProtected(getActivity()) ? R.string.pin_set : R.string.pin_protection_summary) {
272             @Override
273             public void onClick(View view) {
274                 super.onClick(view);
275                 checkPin();
276             }            
277         })
278         .setAttrDrawable(R.attr.pinProtectionIcon);
279
280         addItem(R.string.security, new ListItem(this, getString(R.string.request_timeout), getString(R.string.request_timeout_summary, Settings.getRequestTimeout(getActivity()))) {
281             @Override
282             public void onClick(View view) {
283                 super.onClick(view);
284                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
285                 builder.setTitle(R.string.request_timeout);
286                 String[] seconds = new String[3];
287                 for (int i = 0; i < seconds.length; i++) {
288                     seconds[i] = getString(R.string.number_seconds, (i + 1) * 10);
289                 }
290                 builder.setItems(seconds, new OnClickListener() {
291                     @Override
292                     public void onClick(DialogInterface dialog, int which) {
293                         Settings.setTimeout(getActivity(), (which + 1) * 10);
294                         setSummary(getString(R.string.request_timeout_summary, Settings.getRequestTimeout(getActivity())));
295                     }
296                 });
297                 builder.create().show();
298             }
299         })
300         .setAttrDrawable(R.attr.requestTimeoutIcon);
301
302         addItem(R.string.settings, new ListItem(this, R.string.logging, R.string.logging_summary) {
303             @Override
304             public void onClick(View view) {
305                 super.onClick(view);
306                 Settings.setLogging(getActivity(), getChecked());
307             }
308         })
309         .setAttrDrawable(R.attr.loggingIcon)
310         .setCheckboxVisible(true)
311         .setChecked(Settings.getLogging(getActivity()));
312
313         addItem(R.string.settings, new ListItem(this, R.string.notifications, 0) {
314             void update() {
315                 switch (Settings.getNotificationType(getActivity())) {
316                 case Settings.NOTIFICATION_TYPE_NONE:
317                     setSummary(getString(R.string.no_notification));
318                     break;
319                 case Settings.NOTIFICATION_TYPE_NOTIFICATION:
320                     setSummary(getString(R.string.notifications_summary, getString(R.string.notification)));
321                     break;
322                 case Settings.NOTIFICATION_TYPE_TOAST:
323                     setSummary(getString(R.string.notifications_summary, getString(R.string.toast)));
324                     break;
325                 }
326             }
327             
328             {
329                 update();
330             }
331             @Override
332             public void onClick(View view) {
333                 super.onClick(view);
334                 
335                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
336                 builder.setTitle(R.string.notifications);
337                 String[] items = new String[] { getString(R.string.none), getString(R.string.toast), getString(R.string.notification) };
338                 builder.setItems(items, new OnClickListener() {
339                     @Override
340                     public void onClick(DialogInterface dialog, int which) {
341                         switch (which) {
342                         case 0:
343                             Settings.setNotificationType(getActivity(), Settings.NOTIFICATION_TYPE_NONE);
344                             break;
345                         case 2:
346                             Settings.setNotificationType(getActivity(), Settings.NOTIFICATION_TYPE_NOTIFICATION);
347                             break;
348                         case 1:
349                             Settings.setNotificationType(getActivity(), Settings.NOTIFICATION_TYPE_TOAST);
350                             break;
351                         }
352                         update();
353                     }
354                 });
355                 builder.create().show();
356             }
357         })
358         .setAttrDrawable(R.attr.notificationsIcon);
359     }
360 }