public void fetchMonthData(RemoteViews views) { enrollCntHash.clear(); for (WidgetID wID : WidgetIDRepo.getAllWidgetID(this)) { views.removeAllViews(wID.getTvID()); WidgetIDRepo.deleteWithId(this, wID.getId()); } int year = Dates.NOW.year; int month = Dates.NOW.month; long month_startMillies = Dates.NOW.getDateMillis(year, month, 1, 8, 0); long month_endMillies = Dates.NOW.getDateMillis(year, month, Dates.NOW.dayNumOfMonth, 23, 0); for (MyTime mt : MyTimeRepo.getMonthTimes(this, month_startMillies, month_endMillies)) { try { int dayCnt = mt.getDayofmonth() + Dates.NOW.dayOfWeek; int lID = getResources().getIdentifier("l" + dayCnt, "id", "com.daemin.timetable"); if (enrollCntHash.containsKey(lID)) { int cnt = enrollCntHash.get(lID); if (cnt < 4) { enrollCntHash.put(lID, ++cnt); RemoteViews tv = new RemoteViews(getPackageName(), R.layout.widget_item); tv.setTextViewText(R.id.widget_item, mt.getName()); views.addView(lID, tv); WidgetIDRepo.insertOrUpdate(this, new WidgetID(lID)); } } else { enrollCntHash.put(lID, 0); RemoteViews tv = new RemoteViews(getPackageName(), R.layout.widget_item); tv.setTextViewText(R.id.widget_item, mt.getName()); views.addView(lID, tv); WidgetIDRepo.insertOrUpdate(this, new WidgetID(lID)); } } catch (NullPointerException e) { continue; } } }
/** If there are actions, shows the button related views, and adds a button for each action. */ private void addActionButtons(RemoteViews bigView) { // Remove the existing buttons in case an existing notification is being updated. bigView.removeAllViews(R.id.buttons); // Always set the visibility of the views associated with the action buttons. The current // visibility state is not known as perhaps an existing notification is being updated. int visibility = mActions.isEmpty() ? View.GONE : View.VISIBLE; bigView.setViewVisibility(R.id.button_divider, visibility); bigView.setViewVisibility(R.id.buttons, visibility); Resources resources = mContext.getResources(); DisplayMetrics metrics = resources.getDisplayMetrics(); for (Action action : mActions) { RemoteViews view = new RemoteViews(mContext.getPackageName(), R.layout.web_notification_button); // If there is an icon then set it and add some padding. if (action.iconBitmap != null || action.iconId != 0) { if (useMaterial()) { view.setInt(R.id.button_icon, "setColorFilter", BUTTON_ICON_COLOR_MATERIAL); } int iconWidth = 0; if (action.iconBitmap != null) { view.setImageViewBitmap(R.id.button_icon, action.iconBitmap); iconWidth = action.iconBitmap.getWidth(); } else if (action.iconId != 0) { view.setImageViewResource(R.id.button_icon, action.iconId); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(resources, action.iconId, options); iconWidth = options.outWidth; } iconWidth = dpToPx(Math.min(pxToDp(iconWidth, metrics), MAX_ACTION_ICON_WIDTH_DP), metrics); // Set the padding of the button so the text does not overlap with the icon. Flip // between left and right manually as RemoteViews does not expose a method that sets // padding in a writing-direction independent way. int buttonPadding = dpToPx(BUTTON_PADDING_START_DP + BUTTON_ICON_PADDING_DP, metrics) + iconWidth; int buttonPaddingLeft = LocalizationUtils.isLayoutRtl() ? 0 : buttonPadding; int buttonPaddingRight = LocalizationUtils.isLayoutRtl() ? buttonPadding : 0; view.setViewPadding(R.id.button, buttonPaddingLeft, 0, buttonPaddingRight, 0); } view.setTextViewText(R.id.button, action.title); view.setOnClickPendingIntent(R.id.button, action.intent); bigView.addView(R.id.buttons, view); } }
@Override public void addView(int viewId, Object child) { mRemoteViews.addView(viewId, (RemoteViews) child); }