Loading AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -3044,6 +3044,9 @@ <activity android:name=".wifi.dpp.WifiDppConfiguratorActivity"/> <activity android:name=".homepage.contextualcards.ContextualCardFeedbackDialog" android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert" /> <!-- This is the longest AndroidManifest.xml ever. --> </application> </manifest> res/values/config.xml +2 −0 Original line number Diff line number Diff line Loading @@ -160,4 +160,6 @@ android.settings.EDIT_EMERGENCY_INFO </string> <!-- Email address for the homepage contextual cards feedback --> <string name="config_contextual_card_feedback_email" translatable="false"></string> </resources> res/values/strings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -10249,4 +10249,9 @@ <!-- Summary for low storage slice. [CHAR LIMIT=NONE] --> <string name="low_storage_summary">Storage is low. <xliff:g id="percentage" example="54%">%1$s</xliff:g> used - <xliff:g id="free_space" example="32GB">%2$s</xliff:g> free</string> <!-- Label for button in contextual card feedback dialog for users to send feedback [CHAR LIMIT=30] --> <string name="contextual_card_feedback_send">Send feedback</string> <!-- String for contextual card feedback dialog [CHAR LIMIT=NONE] --> <string name="contextual_card_feedback_confirm_message">Would you like to give us feedback on this suggestion?</string> </resources> No newline at end of file src/com/android/settings/homepage/contextualcards/ContextualCardFeedbackDialog.java 0 → 100644 +66 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.homepage.contextualcards; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.settings.R; public class ContextualCardFeedbackDialog extends AlertActivity implements DialogInterface.OnClickListener { public static final String EXTRA_CARD_NAME = "card_name"; public static final String EXTRA_FEEDBACK_EMAIL = "feedback_email"; private static final String TAG = "CardFeedbackDialog"; private static final String SUBJECT = "Settings Contextual Card Feedback - "; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final AlertController.AlertParams alertParams = mAlertParams; alertParams.mMessage = getText(R.string.contextual_card_feedback_confirm_message); alertParams.mPositiveButtonText = getText(R.string.contextual_card_feedback_send); alertParams.mPositiveButtonListener = this; alertParams.mNegativeButtonText = getText(R.string.skip_label); setupAlert(); } @Override public void onClick(DialogInterface dialog, int which) { final String cardName = getIntent().getStringExtra(EXTRA_CARD_NAME); final String email = getIntent().getStringExtra(EXTRA_FEEDBACK_EMAIL); final Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email)); intent.putExtra(Intent.EXTRA_SUBJECT, SUBJECT + cardName); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { startActivity(intent); } catch (Exception e) { Log.e(TAG, "Send feedback failed.", e); } finish(); } } src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardController.java +29 −3 Original line number Diff line number Diff line Loading @@ -17,11 +17,16 @@ package com.android.settings.homepage.contextualcards.slices; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import com.android.settings.homepage.contextualcards.CardContentProvider; import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.homepage.contextualcards.CardDatabaseHelper; import com.android.settings.homepage.contextualcards.ContextualCard; import com.android.settings.homepage.contextualcards.ContextualCardController; import com.android.settings.homepage.contextualcards.ContextualCardFeedbackDialog; import com.android.settings.homepage.contextualcards.ContextualCardUpdateListener; import com.android.settingslib.utils.ThreadUtils; Loading @@ -32,7 +37,8 @@ public class SliceContextualCardController implements ContextualCardController { private static final String TAG = "SliceCardController"; private Context mContext; private final Context mContext; private ContextualCardUpdateListener mCardUpdateListener; public SliceContextualCardController(Context context) { Loading @@ -51,7 +57,7 @@ public class SliceContextualCardController implements ContextualCardController { @Override public void onActionClick(ContextualCard card) { //TODO(b/113783548): Implement feedback mechanism } @Override Loading @@ -60,10 +66,30 @@ public class SliceContextualCardController implements ContextualCardController { final CardDatabaseHelper dbHelper = CardDatabaseHelper.getInstance(mContext); dbHelper.markContextualCardAsDismissed(mContext, card.getName()); }); showFeedbackDialog(card); } @Override public void setCardUpdateListener(ContextualCardUpdateListener listener) { mCardUpdateListener = listener; } @VisibleForTesting void showFeedbackDialog(ContextualCard card) { final String email = mContext.getString(R.string.config_contextual_card_feedback_email); if (TextUtils.isEmpty(email)) { return; } final Intent feedbackIntent = new Intent(mContext, ContextualCardFeedbackDialog.class); feedbackIntent.putExtra(ContextualCardFeedbackDialog.EXTRA_CARD_NAME, getSimpleCardName(card)); feedbackIntent.putExtra(ContextualCardFeedbackDialog.EXTRA_FEEDBACK_EMAIL, email); feedbackIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(feedbackIntent); } private String getSimpleCardName(ContextualCard card) { final String[] split = card.getName().split("/"); return split[split.length - 1]; } } Loading
AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -3044,6 +3044,9 @@ <activity android:name=".wifi.dpp.WifiDppConfiguratorActivity"/> <activity android:name=".homepage.contextualcards.ContextualCardFeedbackDialog" android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert" /> <!-- This is the longest AndroidManifest.xml ever. --> </application> </manifest>
res/values/config.xml +2 −0 Original line number Diff line number Diff line Loading @@ -160,4 +160,6 @@ android.settings.EDIT_EMERGENCY_INFO </string> <!-- Email address for the homepage contextual cards feedback --> <string name="config_contextual_card_feedback_email" translatable="false"></string> </resources>
res/values/strings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -10249,4 +10249,9 @@ <!-- Summary for low storage slice. [CHAR LIMIT=NONE] --> <string name="low_storage_summary">Storage is low. <xliff:g id="percentage" example="54%">%1$s</xliff:g> used - <xliff:g id="free_space" example="32GB">%2$s</xliff:g> free</string> <!-- Label for button in contextual card feedback dialog for users to send feedback [CHAR LIMIT=30] --> <string name="contextual_card_feedback_send">Send feedback</string> <!-- String for contextual card feedback dialog [CHAR LIMIT=NONE] --> <string name="contextual_card_feedback_confirm_message">Would you like to give us feedback on this suggestion?</string> </resources> No newline at end of file
src/com/android/settings/homepage/contextualcards/ContextualCardFeedbackDialog.java 0 → 100644 +66 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.homepage.contextualcards; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.settings.R; public class ContextualCardFeedbackDialog extends AlertActivity implements DialogInterface.OnClickListener { public static final String EXTRA_CARD_NAME = "card_name"; public static final String EXTRA_FEEDBACK_EMAIL = "feedback_email"; private static final String TAG = "CardFeedbackDialog"; private static final String SUBJECT = "Settings Contextual Card Feedback - "; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final AlertController.AlertParams alertParams = mAlertParams; alertParams.mMessage = getText(R.string.contextual_card_feedback_confirm_message); alertParams.mPositiveButtonText = getText(R.string.contextual_card_feedback_send); alertParams.mPositiveButtonListener = this; alertParams.mNegativeButtonText = getText(R.string.skip_label); setupAlert(); } @Override public void onClick(DialogInterface dialog, int which) { final String cardName = getIntent().getStringExtra(EXTRA_CARD_NAME); final String email = getIntent().getStringExtra(EXTRA_FEEDBACK_EMAIL); final Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email)); intent.putExtra(Intent.EXTRA_SUBJECT, SUBJECT + cardName); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { startActivity(intent); } catch (Exception e) { Log.e(TAG, "Send feedback failed.", e); } finish(); } }
src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardController.java +29 −3 Original line number Diff line number Diff line Loading @@ -17,11 +17,16 @@ package com.android.settings.homepage.contextualcards.slices; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import com.android.settings.homepage.contextualcards.CardContentProvider; import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.homepage.contextualcards.CardDatabaseHelper; import com.android.settings.homepage.contextualcards.ContextualCard; import com.android.settings.homepage.contextualcards.ContextualCardController; import com.android.settings.homepage.contextualcards.ContextualCardFeedbackDialog; import com.android.settings.homepage.contextualcards.ContextualCardUpdateListener; import com.android.settingslib.utils.ThreadUtils; Loading @@ -32,7 +37,8 @@ public class SliceContextualCardController implements ContextualCardController { private static final String TAG = "SliceCardController"; private Context mContext; private final Context mContext; private ContextualCardUpdateListener mCardUpdateListener; public SliceContextualCardController(Context context) { Loading @@ -51,7 +57,7 @@ public class SliceContextualCardController implements ContextualCardController { @Override public void onActionClick(ContextualCard card) { //TODO(b/113783548): Implement feedback mechanism } @Override Loading @@ -60,10 +66,30 @@ public class SliceContextualCardController implements ContextualCardController { final CardDatabaseHelper dbHelper = CardDatabaseHelper.getInstance(mContext); dbHelper.markContextualCardAsDismissed(mContext, card.getName()); }); showFeedbackDialog(card); } @Override public void setCardUpdateListener(ContextualCardUpdateListener listener) { mCardUpdateListener = listener; } @VisibleForTesting void showFeedbackDialog(ContextualCard card) { final String email = mContext.getString(R.string.config_contextual_card_feedback_email); if (TextUtils.isEmpty(email)) { return; } final Intent feedbackIntent = new Intent(mContext, ContextualCardFeedbackDialog.class); feedbackIntent.putExtra(ContextualCardFeedbackDialog.EXTRA_CARD_NAME, getSimpleCardName(card)); feedbackIntent.putExtra(ContextualCardFeedbackDialog.EXTRA_FEEDBACK_EMAIL, email); feedbackIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(feedbackIntent); } private String getSimpleCardName(ContextualCard card) { final String[] split = card.getName().split("/"); return split[split.length - 1]; } }