diff --git a/java/res/values/research_strings.xml b/java/res/values/research_strings.xml
index 2d9dad1ccc0400e23f7d9330fcd38011220bd789..f67943eee82027c5cfb4ac1979d1e22510a8d6c3 100644
--- a/java/res/values/research_strings.xml
+++ b/java/res/values/research_strings.xml
@@ -23,4 +23,7 @@
     <string name="research_splash_content" translatable="false"></string>
     <string name="research_account_type" translatable="false"></string>
     <string name="research_allowed_account_domain" translatable="false"></string>
+    <!-- Message informing the user that the feedback string must not be empty [CHAR LIMIT=100] -->
+    <!-- TODO: remove translatable=false attribute once text is stable -->
+    <string name="research_feedback_empty_feedback_error_message" translatable="false">The feedback field must not be empty.</string>
 </resources>
diff --git a/java/src/com/android/inputmethod/research/FeedbackFragment.java b/java/src/com/android/inputmethod/research/FeedbackFragment.java
index 11a833a85e02e75a6ebbc149e972cfb40ce4a773..69ddf82eab6ab27525172df1b841bec91e63a208 100644
--- a/java/src/com/android/inputmethod/research/FeedbackFragment.java
+++ b/java/src/com/android/inputmethod/research/FeedbackFragment.java
@@ -20,6 +20,7 @@ import android.app.Activity;
 import android.app.Fragment;
 import android.os.Bundle;
 import android.text.Editable;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -28,6 +29,7 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
+import android.widget.Toast;
 
 import com.android.inputmethod.latin.R;
 
@@ -96,12 +98,18 @@ public class FeedbackFragment extends Fragment implements OnClickListener {
         } else if (view == mSendButton) {
             final Editable editable = mEditText.getText();
             final String feedbackContents = editable.toString();
-            final boolean isIncludingAccountName = isIncludingAccountName();
-            researchLogger.sendFeedback(feedbackContents,
-                    false /* isIncludingHistory */, isIncludingAccountName, hasUserRecording());
-            getActivity().finish();
-            researchLogger.setFeedbackDialogBundle(null);
-            researchLogger.onLeavingSendFeedbackDialog();
+            if (TextUtils.isEmpty(feedbackContents)) {
+                Toast.makeText(getActivity(),
+                        R.string.research_feedback_empty_feedback_error_message,
+                        Toast.LENGTH_LONG).show();
+            } else {
+                final boolean isIncludingAccountName = isIncludingAccountName();
+                researchLogger.sendFeedback(feedbackContents,
+                        false /* isIncludingHistory */, isIncludingAccountName, hasUserRecording());
+                getActivity().finish();
+                researchLogger.setFeedbackDialogBundle(null);
+                researchLogger.onLeavingSendFeedbackDialog();
+            }
         } else if (view == mCancelButton) {
             Log.d(TAG, "Finishing");
             getActivity().finish();