public int onStartCommand(Intent intent, int flags, int start_id) {
if (null == intent) {
LOGD("service restart");
loadScreenState();
return START_STICKY;
}
if (intent.getBooleanExtra(AppWidgetManager.ACTION_APPWIDGET_UPDATE, false)) {
LOGD("widget added to home");
int[] widget_ids = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
switch (mScreenState) {
case NORMAL:
updateWidgets(widget_ids, R.drawable.normal);
break;
case DIM:
updateWidgets(widget_ids, R.drawable.dim);
break;
case BRIGHT:
updateWidgets(widget_ids, R.drawable.bright);
break;
default:
}
} else if (intent.getBooleanExtra(AppWidgetManager.ACTION_APPWIDGET_DISABLED, false)) {
LOGD("widgets ALL removed from home");
setScreenState(PowerManager.PARTIAL_WAKE_LOCK, NORMAL);
stopSelf(start_id);
// Since all widgets are removed from home, we don't need the service
// keep running any more.
return START_NOT_STICKY;
} else {
// This is a click event
int widget_id = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
if (-1 != widget_id) {
switch (mScreenState) {
case NORMAL:
setScreenState(PowerManager.SCREEN_DIM_WAKE_LOCK, DIM);
updateAllWidgets(R.drawable.dim);
break;
case DIM:
setScreenState(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, BRIGHT);
updateAllWidgets(R.drawable.bright);
break;
case BRIGHT:
setScreenState(PowerManager.PARTIAL_WAKE_LOCK, NORMAL);
updateAllWidgets(R.drawable.normal);
break;
default:
}
saveScreenState(mScreenState);
} else {
// This should not happen
LOGD("receive click event without widget id");
}
}
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
cHVibGljIGludCBvblN0YXJ0Q29tbWFuZChJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCBzdGFydF9pZCkgewogICAgICAgIGlmIChudWxsID09IGludGVudCkgewogICAgICAgICAgICAgICAgTE9HRCgic2VydmljZSByZXN0YXJ0Iik7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGxvYWRTY3JlZW5TdGF0ZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUQVJUX1NUSUNLWTsKICAgICAgICB9CgogICAgICAgIGlmIChpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEFwcFdpZGdldE1hbmFnZXIuQUNUSU9OX0FQUFdJREdFVF9VUERBVEUsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgTE9HRCgid2lkZ2V0IGFkZGVkIHRvIGhvbWUiKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW50W10gd2lkZ2V0X2lkcyA9IGludGVudC5nZXRJbnRBcnJheUV4dHJhKEFwcFdpZGdldE1hbmFnZXIuRVhUUkFfQVBQV0lER0VUX0lEUyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHN3aXRjaCAobVNjcmVlblN0YXRlKSB7CiAgICAgICAgICAgICAgICBjYXNlIE5PUk1BTDoKICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlV2lkZ2V0cyh3aWRnZXRfaWRzLCBSLmRyYXdhYmxlLm5vcm1hbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBESU06CiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVdpZGdldHMod2lkZ2V0X2lkcywgUi5kcmF3YWJsZS5kaW0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgQlJJR0hUOgogICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVXaWRnZXRzKHdpZGdldF9pZHMsIFIuZHJhd2FibGUuYnJpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaW50ZW50LmdldEJvb2xlYW5FeHRyYShBcHBXaWRnZXRNYW5hZ2VyLkFDVElPTl9BUFBXSURHRVRfRElTQUJMRUQsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgTE9HRCgid2lkZ2V0cyBBTEwgcmVtb3ZlZCBmcm9tIGhvbWUiKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2V0U2NyZWVuU3RhdGUoUG93ZXJNYW5hZ2VyLlBBUlRJQUxfV0FLRV9MT0NLLCBOT1JNQUwpOwogICAgICAgICAgICAgICAgc3RvcFNlbGYoc3RhcnRfaWQpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBTaW5jZSBhbGwgd2lkZ2V0cyBhcmUgcmVtb3ZlZCBmcm9tIGhvbWUsIHdlIGRvbid0IG5lZWQgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgIC8vIGtlZXAgcnVubmluZyBhbnkgbW9yZS4KICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9OT1RfU1RJQ0tZOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY2xpY2sgZXZlbnQKICAgICAgICAgICAgICAgIGludCB3aWRnZXRfaWQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoQXBwV2lkZ2V0TWFuYWdlci5FWFRSQV9BUFBXSURHRVRfSUQsIC0xKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKC0xICE9IHdpZGdldF9pZCkgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1TY3JlZW5TdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5PUk1BTDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTY3JlZW5TdGF0ZShQb3dlck1hbmFnZXIuU0NSRUVOX0RJTV9XQUtFX0xPQ0ssIERJTSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQWxsV2lkZ2V0cyhSLmRyYXdhYmxlLmRpbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElNOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblN0YXRlKFBvd2VyTWFuYWdlci5TQ1JFRU5fQlJJR0hUX1dBS0VfTE9DSywgQlJJR0hUKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbGxXaWRnZXRzKFIuZHJhd2FibGUuYnJpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCUklHSFQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NyZWVuU3RhdGUoUG93ZXJNYW5hZ2VyLlBBUlRJQUxfV0FLRV9MT0NLLCBOT1JNQUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFsbFdpZGdldHMoUi5kcmF3YWJsZS5ub3JtYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVTY3JlZW5TdGF0ZShtU2NyZWVuU3RhdGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbgogICAgICAgICAgICAgICAgICAgICAgICBMT0dEKCJyZWNlaXZlIGNsaWNrIGV2ZW50IHdpdGhvdXQgd2lkZ2V0IGlkIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIFdlIHdhbnQgdGhpcyBzZXJ2aWNlIHRvIGNvbnRpbnVlIHJ1bm5pbmcgdW50aWwgaXQgaXMgZXhwbGljaXRseQogICAgICAgIC8vIHN0b3BwZWQsIHNvIHJldHVybiBzdGlja3kuCiAgICAgICAgcmV0dXJuIFNUQVJUX1NUSUNLWTsKfQ==