0

Hi I am developing a more complex app with sony sw2 I would like to show in the context menu an icon or another depending on with data arrives from Push notification, is there is any way to change the icon from the ExtensionServie?

Now the layout is defined in the RegistrationInformation class doing this

public ContentValues getSourceRegistrationConfiguration(String extensionSpecificId) {
    ContentValues sourceValues = null;

    String iconSource1 = ExtensionUtils.getUriString(mContext,
            R.drawable.icn_30x30_message_notification);
    String iconSource2 = ExtensionUtils.getUriString(mContext,
            R.drawable.icn_18x18_message_notification);
    String iconBw = ExtensionUtils.getUriString(mContext,
            R.drawable.icn_18x18_black_white_message_notification);
    String textToSpeech = mContext.getString(R.string.text_to_speech);
    sourceValues = new ContentValues();
    sourceValues.put(Notification.SourceColumns.ENABLED, true);
    sourceValues.put(Notification.SourceColumns.ICON_URI_1, iconSource1);
    sourceValues.put(Notification.SourceColumns.ICON_URI_2, iconSource2);
    sourceValues.put(Notification.SourceColumns.ICON_URI_BLACK_WHITE, iconBw);
    sourceValues.put(Notification.SourceColumns.UPDATE_TIME, System.currentTimeMillis());
    sourceValues.put(Notification.SourceColumns.NAME, mContext.getString(R.string.source_name));
    sourceValues.put(Notification.SourceColumns.EXTENSION_SPECIFIC_ID, extensionSpecificId);
    sourceValues.put(Notification.SourceColumns.PACKAGE_NAME, mContext.getPackageName());
    sourceValues.put(Notification.SourceColumns.TEXT_TO_SPEECH, textToSpeech);
    sourceValues.put(Notification.SourceColumns.ACTION_1,
            mContext.getString(R.string.action_event_1));
    sourceValues.put(Notification.SourceColumns.ACTION_2,
            mContext.getString(R.string.action_event_2));
    sourceValues.put(Notification.SourceColumns.ACTION_3,
            mContext.getString(R.string.action_event_3));
    System.out.println("DRAWING");
    System.out.println("DRAWING");
    System.out.println("DRAWING");
    System.out.println("DRAWING");
    System.out.println("DRAWING");
    sourceValues.put(Notification.SourceColumns.ACTION_ICON_1,
            ExtensionUtils.getUriString(mContext, R.drawable.actions_1));
    sourceValues.put(Notification.SourceColumns.ACTION_ICON_2,
            ExtensionUtils.getUriString(mContext, R.drawable.actions_2));
    sourceValues.put(Notification.SourceColumns.ACTION_ICON_3,
            ExtensionUtils.getUriString(mContext, R.drawable.actions_3));
    return sourceValues;
}

Is there any way to change that:

sourceValues.put(Notification.SourceColumns.ACTION_ICON_1,
            ExtensionUtils.getUriString(mContext, R.drawable.actions_1));
sourceValues.put(Notification.SourceColumns.ACTION_ICON_2,
            ExtensionUtils.getUriString(mContext, R.drawable.actions_2));
sourceValues.put(Notification.SourceColumns.ACTION_ICON_3,
            ExtensionUtils.getUriString(mContext, R.drawable.actions_3));

to something like:

public ContentValues getSourceRegistrationConfiguration(
        Boolean incident) {
    System.out.println("K: register! "+incident.toString());
    ContentValues sourceValues = null;
    if (incident) {
        System.out.println("CASE incident");
        String iconSource1 = ExtensionUtils.getUriString(mContext,
                R.drawable.icn_30x30_message_notification);
        String iconSource2 = ExtensionUtils.getUriString(mContext,
                R.drawable.icn_18x18_message_notification);
        String iconBw = ExtensionUtils.getUriString(mContext,
                R.drawable.icn_18x18_black_white_message_notification);
        String textToSpeech = mContext.getString(R.string.text_to_speech);
        sourceValues = new ContentValues();
        sourceValues.put(Notification.SourceColumns.ENABLED, true);
        sourceValues
                .put(Notification.SourceColumns.ICON_URI_1, iconSource1);
        sourceValues
                .put(Notification.SourceColumns.ICON_URI_2, iconSource2);
        sourceValues.put(Notification.SourceColumns.ICON_URI_BLACK_WHITE,
                iconBw);
        sourceValues.put(Notification.SourceColumns.UPDATE_TIME,
                System.currentTimeMillis());
        sourceValues.put(Notification.SourceColumns.NAME,
                mContext.getString(R.string.source_name));
        sourceValues.put(Notification.SourceColumns.EXTENSION_SPECIFIC_ID,
                SampleExtensionService.EXTENSION_SPECIFIC_ID);
        sourceValues.put(Notification.SourceColumns.PACKAGE_NAME,
                mContext.getPackageName());
        sourceValues.put(Notification.SourceColumns.TEXT_TO_SPEECH,
                textToSpeech);
        sourceValues.put(Notification.SourceColumns.ACTION_1,
                mContext.getString(R.string.action_event_1));
        sourceValues.put(Notification.SourceColumns.ACTION_2,
                mContext.getString(R.string.action_event_2));
        sourceValues.put(Notification.SourceColumns.ACTION_3,
                mContext.getString(R.string.action_event_3));           
        sourceValues
                .put(Notification.SourceColumns.ACTION_ICON_1,
                        ExtensionUtils.getUriString(mContext,
                                R.drawable.actions_1));
        sourceValues
                .put(Notification.SourceColumns.ACTION_ICON_2,
                        ExtensionUtils.getUriString(mContext,
                                R.drawable.actions_2));
        sourceValues
                .put(Notification.SourceColumns.ACTION_ICON_3,
                        ExtensionUtils.getUriString(mContext,
                                R.drawable.actions_3));
    } else {
        System.out.println("CASE Contract");
        String iconSource1 = ExtensionUtils.getUriString(mContext,
                R.drawable.icn_30x30_message_notification);
        String iconSource2 = ExtensionUtils.getUriString(mContext,
                R.drawable.icn_18x18_message_notification);
        String iconBw = ExtensionUtils.getUriString(mContext,
                R.drawable.icn_18x18_black_white_message_notification);
        String textToSpeech = mContext.getString(R.string.text_to_speech);
        sourceValues = new ContentValues();
        sourceValues.put(Notification.SourceColumns.ENABLED, true);
        sourceValues
                .put(Notification.SourceColumns.ICON_URI_1, iconSource1);
        sourceValues
                .put(Notification.SourceColumns.ICON_URI_2, iconSource2);
        sourceValues.put(Notification.SourceColumns.ICON_URI_BLACK_WHITE,
                iconBw);
        sourceValues.put(Notification.SourceColumns.UPDATE_TIME,
                System.currentTimeMillis());
        sourceValues.put(Notification.SourceColumns.NAME,
                mContext.getString(R.string.source_name));
        sourceValues.put(Notification.SourceColumns.EXTENSION_SPECIFIC_ID,
                SampleExtensionService.EXTENSION_SPECIFIC_ID);
        sourceValues.put(Notification.SourceColumns.PACKAGE_NAME,
                mContext.getPackageName());
        sourceValues.put(Notification.SourceColumns.TEXT_TO_SPEECH,
                textToSpeech);
        sourceValues.put(Notification.SourceColumns.ACTION_1,
                mContext.getString(R.string.action_event_1));
        sourceValues.put(Notification.SourceColumns.ACTION_2,
                mContext.getString(R.string.action_event_2));
        sourceValues.put(Notification.SourceColumns.ACTION_3,
                mContext.getString(R.string.action_event_3));
        sourceValues
                .put(Notification.SourceColumns.ACTION_ICON_1,
                        ExtensionUtils.getUriString(mContext,
                                R.drawable.actions_3));
        sourceValues
                .put(Notification.SourceColumns.ACTION_ICON_2,
                        ExtensionUtils.getUriString(mContext,
                                R.drawable.actions_4));
        sourceValues
                .put(Notification.SourceColumns.ACTION_ICON_3,
                        ExtensionUtils.getUriString(mContext,
                                R.drawable.actions_5));
    }
    return sourceValues;
}

I think once the UI is drawed you cannot change it, because although that code is called the ui never change correctly, am I wrong?

Kechis
  • 5
  • 3

1 Answers1

0

Ok, thanks for clarifying. Unfortunately changing the drawer menu dynamically is not possible being that as you noted the registration code is only called once when the app is installed and you can only set the menu icons and actions at that time.

The only way to achieve what you are trying to do would be to design your own notification UI using the Control API. With the Control API you can dynamically update the menu.

mldeveloper
  • 2,253
  • 1
  • 13
  • 14
  • This is a comment, not an answer. Important distinction because the question won't show up as an unanswered question. Appreciate your answers here though Marlin! – weston Jun 02 '14 at 22:42
  • Ok, makes sense. I'll make sure to add a comment next time if I need some clarification on the question :) – mldeveloper Jun 03 '14 at 20:08
  • Sorry for my bad explanation but im trying to change the drawer menu in order to: upon reaching a notification with an attribute: "a", the drawer displays some options and act accordingly, but if the attribute received in the notification is "b" then some other options appears and other actions are taken upon option pressed – Kechis Jun 04 '14 at 06:37