Commit e8916d7f authored by Thoren Paulson's avatar Thoren Paulson Committed by Commit Bot

[Chromecast] Generate random SN when real SN is "Unknown".

The generated serial is stored in SharedPreferences in order to keep it
consistent between reboots.

Bug: internal b/111077464
Test: look at logs
Change-Id: If988936bedd4fe9a9946ef2671a747dfc622ecf7
Reviewed-on: https://chromium-review.googlesource.com/1237524
Commit-Queue: Thoren Paulson <thoren@chromium.org>
Reviewed-by: default avatarSimeon Anfinrud <sanfin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594392}
parent 150df93f
...@@ -108,6 +108,7 @@ android_library("cast_shell_java") { ...@@ -108,6 +108,7 @@ android_library("cast_shell_java") {
"$java_src_dir/org/chromium/chromecast/shell/CastCrashUploader.java", "$java_src_dir/org/chromium/chromecast/shell/CastCrashUploader.java",
"$java_src_dir/org/chromium/chromecast/shell/CastCrashUploaderFactory.java", "$java_src_dir/org/chromium/chromecast/shell/CastCrashUploaderFactory.java",
"$java_src_dir/org/chromium/chromecast/shell/CastMetricsHelper.java", "$java_src_dir/org/chromium/chromecast/shell/CastMetricsHelper.java",
"$java_src_dir/org/chromium/chromecast/shell/CastSerialGenerator.java",
"$java_src_dir/org/chromium/chromecast/shell/CastSysInfoAndroid.java", "$java_src_dir/org/chromium/chromecast/shell/CastSysInfoAndroid.java",
"$java_src_dir/org/chromium/chromecast/shell/CastWebContentsActivity.java", "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsActivity.java",
"$java_src_dir/org/chromium/chromecast/shell/CastWebContentsComponent.java", "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsComponent.java",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chromecast.shell;
import android.content.SharedPreferences;
import android.util.Base64;
import org.chromium.base.ContextUtils;
import java.security.SecureRandom;
/**
* Helper for generating a serial number on Android.
*/
final class CastSerialGenerator {
private static final String GENERATED_SERIAL_KEY = "generated_serial";
// 20 characters in Base64, the most supported by DCS.
private static final int GENEREATED_SERIAL_BYTES = 15;
private static String getRandomSerial() {
byte[] bytes = new byte[GENEREATED_SERIAL_BYTES];
new SecureRandom().nextBytes(bytes);
return Base64.encodeToString(bytes, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
}
private static String generateSerial() {
SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
String result = prefs.getString(GENERATED_SERIAL_KEY, null);
if (result != null) return result;
result = getRandomSerial();
prefs.edit().putString(GENERATED_SERIAL_KEY, result).apply();
return result;
}
private static final String GENERATED_SERIAL = generateSerial();
public static String getGeneratedSerial() {
return GENERATED_SERIAL;
}
}
\ No newline at end of file
...@@ -20,7 +20,8 @@ public final class CastSysInfoAndroid { ...@@ -20,7 +20,8 @@ public final class CastSysInfoAndroid {
@SuppressLint("HardwareIds") @SuppressLint("HardwareIds")
@CalledByNative @CalledByNative
private static String getSerialNumber() { private static String getSerialNumber() {
return Build.SERIAL; if (!Build.SERIAL.equals(Build.UNKNOWN)) return Build.SERIAL;
return CastSerialGenerator.getGeneratedSerial();
} }
@SuppressLint("HardwareIds") @SuppressLint("HardwareIds")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment