Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68f37a19 authored by Yi-Ling Chuang's avatar Yi-Ling Chuang
Browse files

Add contextual card feedback email mechanism.

When users dismiss a card, ask them for feedback.

Bug: 113783548
Test: robotests
Change-Id: I4f53f89ff8377b0dae8c1fc13c6e474456f90c2f
parent 926571dc
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -3032,6 +3032,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>
+2 −0
Original line number Diff line number Diff line
@@ -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>
+5 −0
Original line number Diff line number Diff line
@@ -10351,4 +10351,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
+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();
    }
}
+29 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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) {
@@ -51,7 +57,7 @@ public class SliceContextualCardController implements ContextualCardController {

    @Override
    public void onActionClick(ContextualCard card) {
        //TODO(b/113783548): Implement feedback mechanism

    }

    @Override
@@ -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