diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java index 7d12d433c56..b7b67b7c2eb 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java @@ -23,9 +23,12 @@ import android.text.TextUtils; import androidx.fragment.app.Fragment; import androidx.preference.Preference; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; +import com.android.settings.slices.Copyable; -public class FirmwareVersionPreferenceController extends BasePreferenceController { +public class FirmwareVersionPreferenceController extends BasePreferenceController implements + Copyable { private Fragment mFragment; @@ -61,4 +64,10 @@ public class FirmwareVersionPreferenceController extends BasePreferenceControlle public boolean isSliceable() { return true; } + + @Override + public void copy() { + Copyable.setCopyContent(mContext, getSummary(), + mContext.getText(R.string.firmware_version)); + } } diff --git a/src/com/android/settings/slices/Copyable.java b/src/com/android/settings/slices/Copyable.java index 12159d1c0c8..a480063a71c 100644 --- a/src/com/android/settings/slices/Copyable.java +++ b/src/com/android/settings/slices/Copyable.java @@ -16,6 +16,15 @@ package com.android.settings.slices; +import static android.content.Context.CLIPBOARD_SERVICE; + +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.widget.Toast; + +import com.android.settings.R; + /** * Provide the copy ability for preference controller to copy the data to the clipboard. */ @@ -25,4 +34,18 @@ public interface Copyable { * It is highly recommended to show the toast to notify users when implemented this function. */ void copy(); + + /** + * Set the copy content to the clipboard and show the toast. + */ + static void setCopyContent(Context context, CharSequence copyContent, + CharSequence messageTitle) { + final ClipboardManager clipboard = (ClipboardManager) context.getSystemService( + CLIPBOARD_SERVICE); + final ClipData clip = ClipData.newPlainText("text", copyContent); + clipboard.setPrimaryClip(clip); + + final String toast = context.getString(R.string.copyable_slice_toast, messageTitle); + Toast.makeText(context, toast, Toast.LENGTH_SHORT).show(); + } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java index fc674f0b8b0..0c74525a048 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java @@ -16,8 +16,11 @@ package com.android.settings.deviceinfo.firmwareversion; +import static android.content.Context.CLIPBOARD_SERVICE; + import static com.google.common.truth.Truth.assertThat; +import android.content.ClipboardManager; import android.content.Context; import android.os.Build; @@ -108,6 +111,17 @@ public class FirmwareVersionPreferenceControllerTest { assertThat(mController.isSliceable()).isTrue(); } + @Test + public void copy_shouldCopyVersionNumberToClipboard() { + mController.copy(); + + final Context context = RuntimeEnvironment.application; + final ClipboardManager clipboard = (ClipboardManager) context.getSystemService( + CLIPBOARD_SERVICE); + final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText(); + assertThat(data.toString()).isEqualTo(Build.VERSION.RELEASE); + } + @Implements(FirmwareVersionDialogFragment.class) public static class ShadowFirmwareVersionDialogFragment {