OSDN Git Service

wip
[android-x86/external-koush-Superuser.git] / Superuser / src / com / koushikdutta / superuser / MainActivity.java
1 package com.koushikdutta.superuser;
2
3 import java.util.ArrayList;
4 import java.util.Date;
5
6 import android.content.res.Configuration;
7 import android.os.Bundle;
8 import android.os.Handler;
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 import android.widget.TextView;
17
18 import com.koushikdutta.superuser.db.LogEntry;
19 import com.koushikdutta.superuser.db.SuDatabaseHelper;
20 import com.koushikdutta.superuser.db.UidPolicy;
21 import com.koushikdutta.widgets.ActivityBase;
22 import com.koushikdutta.widgets.ActivityBaseFragment;
23 import com.koushikdutta.widgets.ListContentFragment;
24 import com.koushikdutta.widgets.ListItem;
25
26 public class MainActivity extends ActivityBase {
27     public MainActivity() {
28         super(ListContentFragment.class);
29     }
30     
31     public ListContentFragment getFragment() {
32         return (ListContentFragment)super.getFragment();
33     }
34     
35     void showAllLogs() {
36         setContent(null, null);
37         getFragment().getListView().clearChoices();
38     }
39     
40     public boolean onCreateOptionsMenu(android.view.Menu menu) {
41         MenuInflater mi = new MenuInflater(this);
42         mi.inflate(R.menu.main, menu);
43         MenuItem log = menu.findItem(R.id.logs);
44         log.setOnMenuItemClickListener(new OnMenuItemClickListener() {
45             @Override
46             public boolean onMenuItemClick(MenuItem item) {
47                 showAllLogs();
48                 return true;
49             }
50         });
51         return super.onCreateOptionsMenu(menu);
52     }
53     
54     ActivityBaseFragment mContent;
55     @Override
56     public void onCreate(Bundle savedInstanceState, View view) {
57         super.onCreate(savedInstanceState, view);
58
59         getFragment().setEmpty(R.string.no_apps);
60         
61         load();
62
63         ImageView watermark = (ImageView)view.findViewById(R.id.watermark);
64         if (watermark != null)
65             watermark.setImageResource(R.drawable.clockwork512);
66         if (!getFragment().isPaged())
67             showAllLogs();
68     }
69     
70     public void onBackPressed() {
71         if (getFragment().onBackPressed())
72             return;
73         super.onBackPressed();
74     };
75     
76     void setContent(final ListItem li, final UidPolicy up) {
77         mContent = new ActivityBaseFragment() {
78             @Override
79             public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
80                 super.onCreateOptionsMenu(menu, inflater);
81                 
82                 inflater.inflate(R.menu.policy, menu);
83                 MenuItem delete = menu.findItem(R.id.delete);
84                 delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
85                     @Override
86                     public boolean onMenuItemClick(MenuItem item) {
87                         getFragment().removeItem(li);
88                         showAllLogs();
89                         if (up != null)
90                             SuDatabaseHelper.delete(MainActivity.this, up);
91                         else
92                             SuDatabaseHelper.deleteLogs(MainActivity.this);
93                         return true;
94                     }
95                 });
96             }
97             
98             @Override
99             protected int getListItemResource() {
100                 return R.layout.log_item;
101             }
102             
103             @Override
104             public void onConfigurationChanged(Configuration newConfig) {
105                 super.onConfigurationChanged(newConfig);
106                 setContent(li, up);
107             }
108             
109             @Override
110             protected int getListFragmentResource() {
111                 return R.layout.policy_fragment;
112             }
113             
114             @Override
115             protected void onCreate(Bundle savedInstanceState, View view) {
116                 super.onCreate(savedInstanceState, view);
117                 
118                 setHasOptionsMenu(true);
119                 
120                 ArrayList<LogEntry> logs;
121                 java.text.DateFormat day = DateFormat.getDateFormat(MainActivity.this);
122                 java.text.DateFormat time = DateFormat.getTimeFormat(MainActivity.this);
123                 if (up != null) {
124                     ImageView icon = (ImageView)view.findViewById(R.id.image);
125                     icon.setImageDrawable(up.icon);
126                     TextView name = (TextView)view.findViewById(R.id.name);
127                     name.setText(up.name);
128                     
129                     ((TextView)view.findViewById(R.id.uid_header)).setText(Integer.toString(up.desiredUid));
130                     ((TextView)view.findViewById(R.id.command_header)).setText(up.command);
131                     String app = up.username;
132                     if (app == null || app.length() == 0)
133                         app = String.valueOf(up.uid);
134                     ((TextView)view.findViewById(R.id.app_header)).setText(app);
135                     ((TextView)view.findViewById(R.id.package_header)).setText(up.packageName);
136
137                     
138                     getListView().setSelector(android.R.color.transparent);
139
140                     logs = SuDatabaseHelper.getLogs(MainActivity.this, up, -1);
141                 }
142                 else {
143                     view.findViewById(R.id.title_container).setVisibility(View.GONE);
144                     logs = SuDatabaseHelper.getLogs(MainActivity.this);
145                 }
146                 
147                 setEmpty(R.string.no_logs);
148                 
149                 for (LogEntry log: logs) {
150                     final String date = time.format(log.getDate());
151                     String title = date;
152                     String summary = getString(log.getActionResource());
153                     if (up == null) {
154                         title = log.name;
155                     }
156                     mContent.addItem(day.format(log.getDate()), new ListItem(mContent, title, summary, null) {
157                         @Override
158                         public View getView(android.content.Context context, View convertView) {
159                             View ret = super.getView(context, convertView);
160                             if (up == null) {
161                                 ((TextView)ret.findViewById(R.id.extra)).setText(date);
162                             }
163                             return ret;
164                         }
165                     });
166                 }
167             }
168         };
169         getFragment().setContent(mContent);
170     }
171
172     void addPolicy(final UidPolicy up) {
173         java.text.DateFormat df = DateFormat.getLongDateFormat(MainActivity.this);
174         String date = df.format(up.getLastDate());
175         if (up.last == 0)
176             date = null;
177         ListItem li = addItem(up.getPolicyResource(), new ListItem(getFragment(), up.name, date) {
178             public void onClick(View view) {
179                 super.onClick(view);
180
181                 setContent(this, up);
182             };
183         });
184         if (up.icon == null)
185             li.setIcon(R.drawable.ic_launcher);
186         else
187             li.setDrawable(up.icon);
188     }
189     
190     Handler mHandler = new Handler();
191     void load() {
192         final ArrayList<UidPolicy> policies = SuDatabaseHelper.getPolicies(MainActivity.this);
193         
194         for (UidPolicy up: policies) {
195             addPolicy(up);
196         }
197     }
198 }