OSDN Git Service

Settings: Hidden option to view Device ID
authorJanet Sun <jsun@cyngn.com>
Fri, 5 Aug 2016 23:41:16 +0000 (16:41 -0700)
committerGerrit Code Review <gerrit@cyanogenmod.org>
Thu, 8 Sep 2016 20:43:09 +0000 (13:43 -0700)
On tapping 7 times, show the device ID and copy it
to clipboard.
CYNGNOS-3232

Change-Id: I1f18874be20671d66ccbe9132bce5d772be14dd9

res/values/cm_strings.xml
src/com/android/settings/DeviceInfoSettings.java

index 7f7b290..9879df7 100644 (file)
      limitations under the License.
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to show Device Id -->
+    <plurals name="show_device_id_countdown_cm">
+        <item quantity="one">You are now <xliff:g id="step_count">%1$d</xliff:g> step away from querying Device ID.</item>
+        <item quantity="other">You are now <xliff:g id="step_count">%1$d</xliff:g> steps away from querying Device ID.</item>
+    </plurals>
+    <!--  Device Info screen. Confirmation that Device ID is copied to clipboard -->
+    <string name="show_device_id_copied_cm">Device ID:[<xliff:g id="device_id">%1$s</xliff:g>] copied to clipboard</string>
+    <!--  Device Info screen. Confirmation that Device ID is not available -->
+    <string name="show_device_id_failed_cm">Device ID is not available on this build</string>
+    <!-- [CHAR LIMIT=NONE] Device Info screen. Label for the deviceID text put to clipboard -->
+    <string name="show_device_id_clipboard_label">Device ID</string>
+
     <!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
     <plurals name="show_dev_countdown_cm">
         <item quantity="one">You are now <xliff:g id="step_count">%1$d</xliff:g> step away from enabling development settings.</item>
index 6a7d970..39eaa5a 100644 (file)
@@ -17,6 +17,8 @@
 package com.android.settings;
 
 import android.app.Activity;
+import android.content.ClipData;
+import android.content.ClipboardManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -43,6 +45,7 @@ import android.text.format.DateFormat;
 import android.util.Log;
 import android.widget.Toast;
 
+import cyanogenmod.hardware.CMHardwareManager;
 import com.android.internal.logging.MetricsLogger;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Index;
@@ -91,10 +94,13 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
     private static final String KEY_CM_UPDATES = "cm_updates";
 
     static final int TAPS_TO_BE_A_DEVELOPER = 7;
+    static final int TAPS_TO_SHOW_DEVICEID = 7;
 
     long[] mHits = new long[3];
     int mDevHitCountdown;
+    int mDevIdCountdown;
     Toast mDevHitToast;
+    Toast mDevIdToast;
 
     @Override
     protected int getMetricsCategory() {
@@ -134,7 +140,10 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
         setStringSummary(KEY_DEVICE_MODEL, Build.MODEL);
         setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY);
         findPreference(KEY_BUILD_NUMBER).setEnabled(true);
-        findPreference(KEY_KERNEL_VERSION).setSummary(getFormattedKernelVersion());
+
+        final Preference kernelPref = findPreference(KEY_KERNEL_VERSION);
+        kernelPref.setEnabled(true);
+        kernelPref.setSummary(getFormattedKernelVersion());
         findPreference(KEY_MOD_VERSION).setSummary(
                 cyanogenmod.os.Build.CYANOGENMOD_DISPLAY_VERSION);
         findPreference(KEY_MOD_VERSION).setEnabled(true);
@@ -227,6 +236,8 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
                 Context.MODE_PRIVATE).getBoolean(DevelopmentSettings.PREF_SHOW,
                         android.os.Build.TYPE.equals("eng")) ? -1 : TAPS_TO_BE_A_DEVELOPER;
         mDevHitToast = null;
+        mDevIdCountdown = TAPS_TO_SHOW_DEVICEID;
+        mDevIdToast = null;
     }
 
     @Override
@@ -263,6 +274,42 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
                     Log.e(LOG_TAG, "Unable to start activity " + intent.toString());
                 }
             }
+        } else if (preference.getKey().equals(KEY_KERNEL_VERSION)) {
+
+            mDevIdCountdown --;
+            if (mDevIdCountdown == 0) {
+                final CMHardwareManager hwMgr = CMHardwareManager.getInstance(getActivity().getApplicationContext());
+                final String deviceID = hwMgr.getUniqueDeviceId();
+                CharSequence msg;
+                if (deviceID == null) {
+                    msg = getText(R.string.show_device_id_failed_cm);
+                }
+                else {
+                    final ClipboardManager clipboardMgr = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+                    clipboardMgr.setPrimaryClip(ClipData.newPlainText(getResources().
+                                    getString(R.string.show_device_id_clipboard_label),
+                            deviceID));
+                    msg = getResources().getString(
+                            R.string.show_device_id_copied_cm, deviceID);
+                }
+
+                mDevIdToast = Toast.makeText(getActivity(), msg,
+                        Toast.LENGTH_LONG);
+                mDevIdToast.show();
+                mDevIdCountdown = TAPS_TO_SHOW_DEVICEID;
+            }
+            else if (mDevIdCountdown > 0
+                    && mDevIdCountdown < (TAPS_TO_SHOW_DEVICEID-2)) {
+
+                if (mDevIdToast != null) {
+                    mDevIdToast.cancel();
+                }
+                mDevIdToast = Toast.makeText(getActivity(), getResources().getQuantityString(
+                        R.plurals.show_device_id_countdown_cm, mDevIdCountdown, mDevIdCountdown),
+                        Toast.LENGTH_SHORT);
+                mDevIdToast.show();
+            }
+
         } else if (preference.getKey().equals(KEY_BUILD_NUMBER)) {
             // Don't enable developer options for secondary users.
             if (UserHandle.myUserId() != UserHandle.USER_OWNER) return true;