OSDN Git Service

eca39bb8e53fb69cd2a169a0a6229787ab09c7f0
[android-x86/external-koush-Superuser.git] / Superuser / src / com / koushikdutta / superuser / LogFragmentInternal.java
1 package com.koushikdutta.superuser;
2
3 import java.util.ArrayList;
4
5 import android.os.Bundle;
6 import android.text.format.DateFormat;
7 import android.view.Menu;
8 import android.view.MenuInflater;
9 import android.view.MenuItem;
10 import android.view.MenuItem.OnMenuItemClickListener;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.CompoundButton;
14 import android.widget.ImageView;
15 import android.widget.TextView;
16
17 import com.koushikdutta.superuser.db.LogEntry;
18 import com.koushikdutta.superuser.db.SuDatabaseHelper;
19 import com.koushikdutta.superuser.db.UidPolicy;
20 import com.koushikdutta.superuser.util.Settings;
21 import com.koushikdutta.widgets.BetterListFragmentInternal;
22 import com.koushikdutta.widgets.FragmentInterfaceWrapper;
23 import com.koushikdutta.widgets.ListItem;
24
25 public class LogFragmentInternal extends BetterListFragmentInternal {
26     public LogFragmentInternal(FragmentInterfaceWrapper fragment) {
27         super(fragment);
28     }
29
30     UidPolicy up;
31     public LogFragmentInternal setUidPolicy(UidPolicy up) {
32         this.up = up;
33         return this;
34     }
35     
36     void onDelete() {
37     }
38     
39     @Override
40     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
41         
42         inflater.inflate(R.menu.policy, menu);
43         MenuItem delete = menu.findItem(R.id.delete);
44         delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
45             @Override
46             public boolean onMenuItemClick(MenuItem item) {
47                 if (up != null)
48                     SuDatabaseHelper.delete(getActivity(), up);
49                 else
50                     SuDatabaseHelper.deleteLogs(getActivity());
51                 onDelete();
52                 return true;
53             }
54         });
55     }
56     
57     @Override
58     protected int getListItemResource() {
59         return R.layout.log_item;
60     }
61     
62     @Override
63     protected int getListFragmentResource() {
64         return R.layout.policy_fragment;
65     }
66     
67     @Override
68     protected void onCreate(Bundle savedInstanceState, View view) {
69         super.onCreate(savedInstanceState, view);
70         
71         getFragment().setHasOptionsMenu(true);
72         
73         if (up == null) {
74             Bundle bundle = getFragment().getArguments();
75             if (bundle != null) {
76                 String command = bundle.getString("command");
77                 int uid = bundle.getInt("uid", -1);
78                 int desiredUid = bundle.getInt("desiredUid", -1);
79                 if (uid != -1 && desiredUid != -1) {
80                     up = SuDatabaseHelper.get(getContext(), uid, desiredUid, command);
81                 }
82             }
83         }
84         
85         ArrayList<LogEntry> logs;
86         java.text.DateFormat day = DateFormat.getDateFormat(getActivity());
87         java.text.DateFormat time = DateFormat.getTimeFormat(getActivity());
88         if (up != null) {
89             ImageView icon = (ImageView)view.findViewById(R.id.image);
90             icon.setImageDrawable(Helper.loadPackageIcon(getActivity(), up.packageName));
91             TextView name = (TextView)view.findViewById(R.id.name);
92             name.setText(up.name);
93             
94             ((TextView)view.findViewById(R.id.uid_header)).setText(Integer.toString(up.desiredUid));
95             ((TextView)view.findViewById(R.id.command_header)).setText(up.command == null ? getString(R.string.all_commands) : up.command);
96             String app = up.username;
97             if (app == null || app.length() == 0)
98                 app = String.valueOf(up.uid);
99             ((TextView)view.findViewById(R.id.app_header)).setText(app);
100             ((TextView)view.findViewById(R.id.package_header)).setText(up.packageName);
101
102             getListView().setSelector(android.R.color.transparent);
103
104             logs = SuDatabaseHelper.getLogs(getActivity(), up, -1);
105         }
106         else {
107             view.findViewById(R.id.title_container).setVisibility(View.GONE);
108             logs = SuDatabaseHelper.getLogs(getActivity());
109         }
110         
111         setEmpty(R.string.no_logs);
112         
113         for (LogEntry log: logs) {
114             final String date = time.format(log.getDate());
115             String title = date;
116             String summary = getString(log.getActionResource());
117             if (up == null) {
118                 title = log.getName();
119             }
120             addItem(day.format(log.getDate()), new ListItem(this, title, summary, null) {
121                 @Override
122                 public View getView(android.content.Context context, View convertView) {
123                     View ret = super.getView(context, convertView);
124                     if (up == null) {
125                         ((TextView)ret.findViewById(R.id.extra)).setText(date);
126                     }
127                     return ret;
128                 }
129             });
130         }
131
132         final CompoundButton cb = (CompoundButton)view.findViewById(R.id.logging);
133         cb.setOnClickListener(new OnClickListener() {
134             @Override
135             public void onClick(View v) {
136                 if (up == null) {
137                     Settings.setLogging(getActivity(), cb.isChecked());
138                 }
139                 else {
140                     up.logging = cb.isChecked();
141                     SuDatabaseHelper.setPolicy(getActivity(), up);
142                 }
143             }
144         });
145         if (up == null) {
146             cb.setChecked(Settings.getLogging(getActivity()));
147         }
148         else {
149             cb.setChecked(up.logging);
150         }
151     }
152 }