Add some extra info to the notification list rows.

Change-Id: Ie6ad130bd0e6daf8562c477f0297ba914d3f22d1
This commit is contained in:
Daniel Sandler
2013-03-18 23:27:12 -04:00
parent 738b8715ab
commit 95860491fe
2 changed files with 135 additions and 80 deletions

View File

@@ -25,6 +25,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
@@ -57,7 +58,7 @@ public class NotificationStation extends SettingsPreferenceFragment {
private static final boolean SHOW_HISTORICAL_NOTIFICATIONS = true;
private final PackageReceiver mPackageReceiver = new PackageReceiver();
private PackageManager mPm;
private INotificationManager mNoMan;
private Runnable mRefreshListRunnable = new Runnable() {
@@ -101,6 +102,7 @@ public class NotificationStation extends SettingsPreferenceFragment {
logd("onAttach(%s)", activity.getClass().getSimpleName());
super.onAttach(activity);
mContext = activity;
mPm = mContext.getPackageManager();
mNoMan = INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
try {
@@ -180,6 +182,7 @@ public class NotificationStation extends SettingsPreferenceFragment {
private static class HistoricalNotificationInfo {
public String pkg;
public Drawable pkgicon;
public CharSequence pkgname;
public Drawable icon;
public CharSequence title;
public int priority;
@@ -205,8 +208,19 @@ public class NotificationStation extends SettingsPreferenceFragment {
info.user = sbn.getUserId();
info.icon = loadIconDrawable(info.pkg, info.user, sbn.notification.icon);
info.pkgicon = loadPackageIconDrawable(info.pkg, info.user);
info.pkgname = loadPackageName(info.pkg);
if (sbn.notification.extras != null) {
info.title = sbn.notification.extras.getString(Notification.EXTRA_TITLE);
if (info.title == null || "".equals(info.title)) {
info.title = sbn.notification.extras.getString(Notification.EXTRA_TEXT);
}
}
if (info.title == null || "".equals(info.title)) {
info.title = sbn.notification.tickerText;
}
// still nothing? come on, give us something!
if (info.title == null || "".equals(info.title)) {
info.title = info.pkgname;
}
info.timestamp = sbn.postTime;
info.priority = sbn.notification.priority;
@@ -236,8 +250,7 @@ public class NotificationStation extends SettingsPreferenceFragment {
if (userId == UserHandle.USER_ALL) {
userId = UserHandle.USER_OWNER;
}
r = mContext.getPackageManager()
.getResourcesForApplicationAsUser(pkg, userId);
r = mPm.getResourcesForApplicationAsUser(pkg, userId);
} catch (PackageManager.NameNotFoundException ex) {
Log.e(TAG, "Icon package not found: " + pkg);
return null;
@@ -251,13 +264,23 @@ public class NotificationStation extends SettingsPreferenceFragment {
private Drawable loadPackageIconDrawable(String pkg, int userId) {
Drawable icon = null;
try {
icon = mContext.getPackageManager().getApplicationIcon(pkg);
icon = mPm.getApplicationIcon(pkg);
} catch (PackageManager.NameNotFoundException e) {
}
return icon;
}
private CharSequence loadPackageName(String pkg) {
try {
ApplicationInfo info = mPm.getApplicationInfo(pkg,
PackageManager.GET_UNINSTALLED_PACKAGES);
if (info != null) return mPm.getApplicationLabel(info);
} catch (PackageManager.NameNotFoundException e) {
}
return pkg;
}
private Drawable loadIconDrawable(String pkg, int userId, int resId) {
Resources r = getResourcesForUserPackage(pkg, userId);
@@ -286,9 +309,9 @@ public class NotificationStation extends SettingsPreferenceFragment {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HistoricalNotificationInfo info = getItem(position);
final HistoricalNotificationInfo info = getItem(position);
logd("getView(%s/%s)", info.pkg, info.title);
final View row = convertView != null ? convertView : createRow(parent, info.pkg);
final View row = convertView != null ? convertView : createRow(parent);
row.setTag(info);
// bind icon
@@ -304,8 +327,25 @@ public class NotificationStation extends SettingsPreferenceFragment {
// bind caption
((TextView) row.findViewById(android.R.id.title)).setText(info.title);
// app name
((TextView) row.findViewById(R.id.pkgname)).setText(info.pkgname);
// extra goodies -- not implemented yet
// ((TextView) row.findViewById(R.id.extra)).setText(
// ...
// );
row.findViewById(R.id.extra).setVisibility(View.GONE);
row.setAlpha(info.active ? 1.0f : 0.5f);
// set up click handler
row.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
v.setPressed(true);
startApplicationDetailsActivity(info.pkg);
}});
// // bind radio button
// RadioButton radioButton = (RadioButton) row.findViewById(android.R.id.button1);
// radioButton.setChecked(dreamInfo.isActive);
@@ -335,14 +375,8 @@ public class NotificationStation extends SettingsPreferenceFragment {
return row;
}
private View createRow(ViewGroup parent, final String pkg) {
private View createRow(ViewGroup parent) {
final View row = mInflater.inflate(R.layout.notification_log_row, parent, false);
row.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
v.setPressed(true);
startApplicationDetailsActivity(pkg);
}});
return row;
}
@@ -351,7 +385,7 @@ public class NotificationStation extends SettingsPreferenceFragment {
private void startApplicationDetailsActivity(String packageName) {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", packageName, null));
intent.setComponent(intent.resolveActivity(mContext.getPackageManager()));
intent.setComponent(intent.resolveActivity(mPm));
startActivity(intent);
}