1 package com.koushikdutta.superuser;
3 import java.util.ArrayList;
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;
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;
26 public class MainActivity extends ActivityBase {
27 public MainActivity() {
28 super(ListContentFragment.class);
31 public ListContentFragment getFragment() {
32 return (ListContentFragment)super.getFragment();
36 setContent(null, null);
37 getFragment().getListView().clearChoices();
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() {
46 public boolean onMenuItemClick(MenuItem item) {
51 return super.onCreateOptionsMenu(menu);
54 ActivityBaseFragment mContent;
56 public void onCreate(Bundle savedInstanceState, View view) {
57 super.onCreate(savedInstanceState, view);
59 getFragment().setEmpty(R.string.no_apps);
63 ImageView watermark = (ImageView)view.findViewById(R.id.watermark);
64 if (watermark != null)
65 watermark.setImageResource(R.drawable.clockwork512);
66 if (!getFragment().isPaged())
70 public void onBackPressed() {
71 if (getFragment().onBackPressed())
73 super.onBackPressed();
76 void setContent(final ListItem li, final UidPolicy up) {
77 mContent = new ActivityBaseFragment() {
79 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
80 super.onCreateOptionsMenu(menu, inflater);
82 inflater.inflate(R.menu.policy, menu);
83 MenuItem delete = menu.findItem(R.id.delete);
84 delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
86 public boolean onMenuItemClick(MenuItem item) {
87 getFragment().removeItem(li);
90 SuDatabaseHelper.delete(MainActivity.this, up);
92 SuDatabaseHelper.deleteLogs(MainActivity.this);
99 protected int getListItemResource() {
100 return R.layout.log_item;
104 public void onConfigurationChanged(Configuration newConfig) {
105 super.onConfigurationChanged(newConfig);
110 protected int getListFragmentResource() {
111 return R.layout.policy_fragment;
115 protected void onCreate(Bundle savedInstanceState, View view) {
116 super.onCreate(savedInstanceState, view);
118 setHasOptionsMenu(true);
120 ArrayList<LogEntry> logs;
121 java.text.DateFormat day = DateFormat.getDateFormat(MainActivity.this);
122 java.text.DateFormat time = DateFormat.getTimeFormat(MainActivity.this);
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);
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);
138 getListView().setSelector(android.R.color.transparent);
140 logs = SuDatabaseHelper.getLogs(MainActivity.this, up, -1);
143 view.findViewById(R.id.title_container).setVisibility(View.GONE);
144 logs = SuDatabaseHelper.getLogs(MainActivity.this);
147 setEmpty(R.string.no_logs);
149 for (LogEntry log: logs) {
150 final String date = time.format(log.getDate());
152 String summary = getString(log.getActionResource());
156 mContent.addItem(day.format(log.getDate()), new ListItem(mContent, title, summary, null) {
158 public View getView(android.content.Context context, View convertView) {
159 View ret = super.getView(context, convertView);
161 ((TextView)ret.findViewById(R.id.extra)).setText(date);
169 getFragment().setContent(mContent);
172 void addPolicy(final UidPolicy up) {
173 java.text.DateFormat df = DateFormat.getLongDateFormat(MainActivity.this);
174 String date = df.format(up.getLastDate());
177 ListItem li = addItem(up.getPolicyResource(), new ListItem(getFragment(), up.name, date) {
178 public void onClick(View view) {
181 setContent(this, up);
185 li.setIcon(R.drawable.ic_launcher);
187 li.setDrawable(up.icon);
190 Handler mHandler = new Handler();
192 final ArrayList<UidPolicy> policies = SuDatabaseHelper.getPolicies(MainActivity.this);
194 for (UidPolicy up: policies) {