am 4cb85319
: [Rlog15] ResearchLogger option to include account name in feedback
* commit '4cb853191ca4e515c2291779aa6b21975d5711d6': [Rlog15] ResearchLogger option to include account name in feedback
This commit is contained in:
commit
86139412df
5 changed files with 66 additions and 7 deletions
|
@ -70,6 +70,14 @@
|
||||||
android:text="@string/research_feedback_include_history_label"
|
android:text="@string/research_feedback_include_history_label"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/research_feedback_include_account_name"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_marginBottom="8dip"
|
||||||
|
android:checked="false"
|
||||||
|
android:text="@string/research_feedback_include_account_name_label"
|
||||||
|
/>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
@ -21,4 +21,6 @@
|
||||||
<!-- Contents of note explaining what data is collected and how. -->
|
<!-- Contents of note explaining what data is collected and how. -->
|
||||||
<!-- TODO: remove translatable=false attribute once text is stable -->
|
<!-- TODO: remove translatable=false attribute once text is stable -->
|
||||||
<string name="research_splash_content" translatable="false"></string>
|
<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>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -270,6 +270,9 @@
|
||||||
<!-- Text for checkbox option to include user data in feedback for research purposes [CHAR LIMIT=50] -->
|
<!-- Text for checkbox option to include user data in feedback for research purposes [CHAR LIMIT=50] -->
|
||||||
<!-- TODO: remove translatable=false attribute once text is stable -->
|
<!-- TODO: remove translatable=false attribute once text is stable -->
|
||||||
<string name="research_feedback_include_history_label" translatable="false">Include session history</string>
|
<string name="research_feedback_include_history_label" translatable="false">Include session history</string>
|
||||||
|
<!-- Text for checkbox option to include user account name in feedback for research purposes [CHAR LIMIT=50] -->
|
||||||
|
<!-- TODO: remove translatable=false attribute once text is stable -->
|
||||||
|
<string name="research_feedback_include_account_name_label" translatable="false">Include account name</string>
|
||||||
<!-- Hint to user about the text entry field where they should enter research feedback [CHAR LIMIT=40] -->
|
<!-- Hint to user about the text entry field where they should enter research feedback [CHAR LIMIT=40] -->
|
||||||
<!-- TODO: remove translatable=false attribute once text is stable -->
|
<!-- TODO: remove translatable=false attribute once text is stable -->
|
||||||
<string name="research_feedback_hint" translatable="false">Enter your feedback here.</string>
|
<string name="research_feedback_hint" translatable="false">Enter your feedback here.</string>
|
||||||
|
|
|
@ -32,7 +32,8 @@ import com.android.inputmethod.latin.R;
|
||||||
|
|
||||||
public class FeedbackFragment extends Fragment {
|
public class FeedbackFragment extends Fragment {
|
||||||
private EditText mEditText;
|
private EditText mEditText;
|
||||||
private CheckBox mCheckBox;
|
private CheckBox mIncludingHistoryCheckBox;
|
||||||
|
private CheckBox mIncludingAccountNameCheckBox;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
@ -40,7 +41,10 @@ public class FeedbackFragment extends Fragment {
|
||||||
final View view = inflater.inflate(R.layout.research_feedback_fragment_layout, container,
|
final View view = inflater.inflate(R.layout.research_feedback_fragment_layout, container,
|
||||||
false);
|
false);
|
||||||
mEditText = (EditText) view.findViewById(R.id.research_feedback_contents);
|
mEditText = (EditText) view.findViewById(R.id.research_feedback_contents);
|
||||||
mCheckBox = (CheckBox) view.findViewById(R.id.research_feedback_include_history);
|
mIncludingHistoryCheckBox = (CheckBox) view.findViewById(
|
||||||
|
R.id.research_feedback_include_history);
|
||||||
|
mIncludingAccountNameCheckBox = (CheckBox) view.findViewById(
|
||||||
|
R.id.research_feedback_include_account_name);
|
||||||
|
|
||||||
final Button sendButton = (Button) view.findViewById(
|
final Button sendButton = (Button) view.findViewById(
|
||||||
R.id.research_feedback_send_button);
|
R.id.research_feedback_send_button);
|
||||||
|
@ -49,8 +53,10 @@ public class FeedbackFragment extends Fragment {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
final Editable editable = mEditText.getText();
|
final Editable editable = mEditText.getText();
|
||||||
final String feedbackContents = editable.toString();
|
final String feedbackContents = editable.toString();
|
||||||
final boolean includeHistory = mCheckBox.isChecked();
|
final boolean isIncludingHistory = mIncludingHistoryCheckBox.isChecked();
|
||||||
ResearchLogger.getInstance().sendFeedback(feedbackContents, includeHistory);
|
final boolean isIncludingAccountName = mIncludingAccountNameCheckBox.isChecked();
|
||||||
|
ResearchLogger.getInstance().sendFeedback(feedbackContents, isIncludingHistory,
|
||||||
|
isIncludingAccountName);
|
||||||
final Activity activity = FeedbackFragment.this.getActivity();
|
final Activity activity = FeedbackFragment.this.getActivity();
|
||||||
activity.finish();
|
activity.finish();
|
||||||
ResearchLogger.getInstance().onLeavingSendFeedbackDialog();
|
ResearchLogger.getInstance().onLeavingSendFeedbackDialog();
|
||||||
|
|
|
@ -18,6 +18,8 @@ package com.android.inputmethod.research;
|
||||||
|
|
||||||
import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET;
|
import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET;
|
||||||
|
|
||||||
|
import android.accounts.Account;
|
||||||
|
import android.accounts.AccountManager;
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
@ -30,6 +32,7 @@ import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.Editor;
|
import android.content.SharedPreferences.Editor;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
@ -115,6 +118,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
|
||||||
private static final String PREF_RESEARCH_LOGGER_UUID_STRING = "pref_research_logger_uuid";
|
private static final String PREF_RESEARCH_LOGGER_UUID_STRING = "pref_research_logger_uuid";
|
||||||
|
|
||||||
private static final ResearchLogger sInstance = new ResearchLogger();
|
private static final ResearchLogger sInstance = new ResearchLogger();
|
||||||
|
private static String sAccountType = null;
|
||||||
|
private static String sAllowedAccountDomain = null;
|
||||||
// to write to a different filename, e.g., for testing, set mFile before calling start()
|
// to write to a different filename, e.g., for testing, set mFile before calling start()
|
||||||
/* package */ File mFilesDir;
|
/* package */ File mFilesDir;
|
||||||
/* package */ String mUUIDString;
|
/* package */ String mUUIDString;
|
||||||
|
@ -199,6 +204,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
|
||||||
e.apply();
|
e.apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
final Resources res = latinIME.getResources();
|
||||||
|
sAccountType = res.getString(R.string.research_account_type);
|
||||||
|
sAllowedAccountDomain = res.getString(R.string.research_allowed_account_domain);
|
||||||
mLatinIME = latinIME;
|
mLatinIME = latinIME;
|
||||||
mPrefs = prefs;
|
mPrefs = prefs;
|
||||||
mUploadIntent = new Intent(mLatinIME, UploaderService.class);
|
mUploadIntent = new Intent(mLatinIME, UploaderService.class);
|
||||||
|
@ -593,6 +601,36 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the name of the first allowed account on the device.
|
||||||
|
*
|
||||||
|
* Allowed accounts must be in the domain given by ALLOWED_ACCOUNT_DOMAIN.
|
||||||
|
*
|
||||||
|
* @return The user's account name.
|
||||||
|
*/
|
||||||
|
public String getAccountName() {
|
||||||
|
if (sAccountType == null || sAccountType.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (sAllowedAccountDomain == null || sAllowedAccountDomain.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final AccountManager manager = AccountManager.get(mLatinIME);
|
||||||
|
// Filter first by account type.
|
||||||
|
final Account[] accounts = manager.getAccountsByType(sAccountType);
|
||||||
|
|
||||||
|
for (final Account account : accounts) {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, account.name);
|
||||||
|
}
|
||||||
|
final String[] parts = account.name.split("@");
|
||||||
|
if (parts.length > 1 && parts[1].equals(sAllowedAccountDomain)) {
|
||||||
|
return parts[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
static class LogStatement {
|
static class LogStatement {
|
||||||
final String mName;
|
final String mName;
|
||||||
|
|
||||||
|
@ -626,8 +664,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final LogStatement LOGSTATEMENT_FEEDBACK =
|
private static final LogStatement LOGSTATEMENT_FEEDBACK =
|
||||||
new LogStatement("UserFeedback", false, false, "contents");
|
new LogStatement("UserFeedback", false, false, "contents", "accountName");
|
||||||
public void sendFeedback(final String feedbackContents, final boolean includeHistory) {
|
public void sendFeedback(final String feedbackContents, final boolean includeHistory,
|
||||||
|
final boolean isIncludingAccountName) {
|
||||||
if (mSavedFeedbackLogBuffer == null) {
|
if (mSavedFeedbackLogBuffer == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -635,8 +674,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
|
||||||
mSavedFeedbackLogBuffer.clear();
|
mSavedFeedbackLogBuffer.clear();
|
||||||
}
|
}
|
||||||
final LogUnit feedbackLogUnit = new LogUnit();
|
final LogUnit feedbackLogUnit = new LogUnit();
|
||||||
|
final String accountName = isIncludingAccountName ? getAccountName() : "";
|
||||||
feedbackLogUnit.addLogStatement(LOGSTATEMENT_FEEDBACK, SystemClock.uptimeMillis(),
|
feedbackLogUnit.addLogStatement(LOGSTATEMENT_FEEDBACK, SystemClock.uptimeMillis(),
|
||||||
feedbackContents);
|
feedbackContents, accountName);
|
||||||
mFeedbackLogBuffer.shiftIn(feedbackLogUnit);
|
mFeedbackLogBuffer.shiftIn(feedbackLogUnit);
|
||||||
publishLogBuffer(mFeedbackLogBuffer, mSavedFeedbackLog, true /* isIncludingPrivateData */);
|
publishLogBuffer(mFeedbackLogBuffer, mSavedFeedbackLog, true /* isIncludingPrivateData */);
|
||||||
mSavedFeedbackLog.close(new Runnable() {
|
mSavedFeedbackLog.close(new Runnable() {
|
||||||
|
|
Loading…
Reference in a new issue