OSDN Git Service

f0b9a3a854cd97259fc7ea02f3ac0bc43e3a924e
[android-x86/external-koush-Superuser.git] / Superuser / src / com / koushikdutta / superuser / PolicyFragmentInternal.java
1 package com.koushikdutta.superuser;
2
3 import java.util.ArrayList;
4
5 import android.content.res.Configuration;
6 import android.graphics.drawable.Drawable;
7 import android.os.Bundle;
8 import android.support.v4.app.FragmentActivity;
9 import android.text.format.DateFormat;
10 import android.view.Menu;
11 import android.view.MenuInflater;
12 import android.view.MenuItem;
13 import android.view.MenuItem.OnMenuItemClickListener;
14 import android.view.View;
15 import android.widget.ImageView;
16
17 import com.koushikdutta.superuser.db.SuDatabaseHelper;
18 import com.koushikdutta.superuser.db.UidPolicy;
19 import com.koushikdutta.widgets.FragmentInterfaceWrapper;
20 import com.koushikdutta.widgets.ListContentFragmentInternal;
21 import com.koushikdutta.widgets.ListItem;
22
23 public class PolicyFragmentInternal extends ListContentFragmentInternal {
24     public PolicyFragmentInternal(FragmentInterfaceWrapper fragment) {
25         super(fragment);
26     }
27     
28     void showAllLogs() {
29         setContent(null, null);
30         getListView().clearChoices();
31     }
32     
33     void load() {
34         final ArrayList<UidPolicy> policies = SuDatabaseHelper.getPolicies(getActivity());
35         
36         for (UidPolicy up: policies) {
37             addPolicy(up);
38         }
39     }
40
41     FragmentInterfaceWrapper mContent;
42
43     
44     @Override
45     public void onCreate(Bundle savedInstanceState, View view) {
46         super.onCreate(savedInstanceState, view);
47
48         getFragment().setHasOptionsMenu(true);
49         
50         setEmpty(R.string.no_apps);
51         
52         load();
53
54         ImageView watermark = (ImageView)view.findViewById(R.id.watermark);
55         if (watermark != null)
56             watermark.setImageResource(R.drawable.clockwork512);
57         if (!isPaged())
58             showAllLogs();
59     }
60     
61
62     void addPolicy(final UidPolicy up) {
63         java.text.DateFormat df = DateFormat.getLongDateFormat(getActivity());
64         String date = df.format(up.getLastDate());
65         if (up.last == 0)
66             date = null;
67         ListItem li = addItem(up.getPolicyResource(), new ListItem(this, up.name, date) {
68             public void onClick(View view) {
69                 super.onClick(view);
70
71                 setContent(this, up);
72             };
73         })
74         .setTheme(R.style.Superuser_PolicyIcon);
75         Drawable icon = Helper.loadPackageIcon(getActivity(), up.packageName);
76         if (icon == null)
77             li.setIcon(R.drawable.ic_launcher);
78         else
79             li.setDrawable(icon);
80     }
81     
82     public void onConfigurationChanged(Configuration newConfig) {
83     };
84
85     FragmentInterfaceWrapper setContentNative(final ListItem li, final UidPolicy up) {
86         LogNativeFragment l = new LogNativeFragment();
87 //        {
88 //            @Override
89 //            void onDelete() {
90 //                super.onDelete();
91 //                removeItem(li);
92 //                showAllLogs();
93 //            }
94 //
95 //            @Override
96 //            public void onConfigurationChanged(Configuration newConfig) {
97 //                super.onConfigurationChanged(newConfig);
98 //                setContent(li, up);
99 //            }
100 //        };
101         l.getInternal().setUidPolicy(up);
102         if (up != null) {
103             Bundle args = new Bundle();
104             args.putString("command", up.command);
105             args.putInt("uid", up.uid);
106             args.putInt("desiredUid", up.desiredUid);
107             l.setArguments(args);
108         }
109         return l;
110     }
111     
112     void setContent(final ListItem li, final UidPolicy up) {
113         if (getActivity() instanceof FragmentActivity) {
114             LogFragment l = new LogFragment() {
115                 @Override
116                 void onDelete() {
117                     super.onDelete();
118                     removeItem(li);
119                     showAllLogs();
120                 }
121
122                 @Override
123                 public void onConfigurationChanged(Configuration newConfig) {
124                     super.onConfigurationChanged(newConfig);
125                     setContent(li, up);
126                 }
127             };
128             l.getInternal().setUidPolicy(up);
129             mContent = l;
130         }
131         else {
132             mContent = setContentNative(li, up);
133         }
134
135         setContent(mContent, up == null, up == null ? getString(R.string.logs) : up.getName());
136     }
137     
138     @Override
139     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
140         super.onCreateOptionsMenu(menu, inflater);
141         MenuInflater mi = new MenuInflater(getActivity());
142         mi.inflate(R.menu.main, menu);
143         MenuItem log = menu.findItem(R.id.logs);
144         log.setOnMenuItemClickListener(new OnMenuItemClickListener() {
145             @Override
146             public boolean onMenuItemClick(MenuItem item) {
147                 showAllLogs();
148                 return true;
149             }
150         });
151         
152         MenuItem settings = menu.findItem(R.id.settings);
153         settings.setOnMenuItemClickListener(new OnMenuItemClickListener() {
154             void openSettingsNative(final MenuItem item) {
155                 setContent(new SettingsNativeFragment() {
156                     @Override
157                     public void onConfigurationChanged(Configuration newConfig) {
158                         super.onConfigurationChanged(newConfig);
159                         onMenuItemClick(item);
160                     }
161                 }, true, getString(R.string.settings));
162             }
163             
164             @Override
165             public boolean onMenuItemClick(final MenuItem item) {
166                 if (getActivity() instanceof FragmentActivity) {
167                     setContent(new SettingsFragment() {
168                         @Override
169                         public void onConfigurationChanged(Configuration newConfig) {
170                             super.onConfigurationChanged(newConfig);
171                             onMenuItemClick(item);
172                         }
173                     }, true, getString(R.string.settings));
174                 }
175                 else {
176                     openSettingsNative(item);
177                 }
178                 return true;
179             }
180         });
181     }
182
183 }