From 479e697e6dc7d557e3bcc3d722f1fbcf09d47894 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 23 Oct 2016 15:39:06 +0800 Subject: [PATCH] Experimental support for demo users TODO: Untested code. Need to find out how to activate demo users. Fix #950 nevertheless. --- .../shadowsocks/ProfileManagerActivity.scala | 5 ++-- .../shadowsocks/ShadowsocksSettings.scala | 23 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala index e7ba61b8..5edded94 100644 --- a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala @@ -7,7 +7,7 @@ import android.content._ import android.content.pm.PackageManager import android.nfc.NfcAdapter.CreateNdefMessageCallback import android.nfc.{NdefMessage, NdefRecord, NfcAdapter, NfcEvent} -import android.os.{Bundle, Handler} +import android.os.{Build, Bundle, Handler, UserManager} import android.provider.Settings import android.support.v7.app.{AlertDialog, AppCompatActivity} import android.support.v7.widget.RecyclerView.ViewHolder @@ -86,7 +86,7 @@ final class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClic val builder = new SpannableStringBuilder val tx = item.tx + txTotal val rx = item.rx + rxTotal - builder.append(item.name) + builder.append(if (isDemoMode) "Profile #" + item.id else item.name) if (tx != 0 || rx != 0) { val start = builder.length builder.append(getString(R.string.stat_profiles, @@ -186,6 +186,7 @@ final class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClic private var undoManager: UndoSnackbarManager[Profile] = _ private lazy val clipboard = getSystemService(Context.CLIPBOARD_SERVICE).asInstanceOf[ClipboardManager] + private lazy val isDemoMode = Build.VERSION.SDK_INT >= 25 && getSystemService(classOf[UserManager]).isDemoUser private var nfcAdapter : NfcAdapter = _ private var nfcShareItem: Array[Byte] = _ diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index a52753e1..1d44fd9c 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -5,7 +5,7 @@ import java.util.Locale import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.content.{Intent, SharedPreferences} import android.net.Uri -import android.os.Bundle +import android.os.{Build, Bundle, UserManager} import android.support.design.widget.Snackbar import android.support.v14.preference.SwitchPreference import android.support.v7.app.AlertDialog @@ -41,13 +41,21 @@ object ShadowsocksSettings { pref.asInstanceOf[SwitchPreference].setChecked(value) } - def updatePreference(pref: Preference, name: String, profile: Profile) { + def updatePreference(pref: Preference, name: String, profile: Profile, demo: Boolean = false) { name match { - case Key.name => updateEditTextPreference(pref, profile.name) - case Key.host => updateEditTextPreference(pref, profile.host) - case Key.remotePort => updateNumberPickerPreference(pref, profile.remotePort) + case Key.name => + updateEditTextPreference(pref, profile.name) + pref.setSummary(if (demo) "Profile #" + profile.id else "%s") + case Key.host => + updateEditTextPreference(pref, profile.host) + pref.setSummary(if (demo) "shadowsocks.example.org" else "%s") + case Key.remotePort => + updateNumberPickerPreference(pref, profile.remotePort) + pref.setSummary(if (demo) "1337" else "%d") case Key.localPort => updateNumberPickerPreference(pref, profile.localPort) - case Key.password => updateEditTextPreference(pref, profile.password) + case Key.password => + updateEditTextPreference(pref, profile.password) + pref.setSummary(if (demo) "\u2022" * 32 else "%s") case Key.method => updateDropDownPreference(pref, profile.method) case Key.route => updateDropDownPreference(pref, profile.route) case Key.proxyApps => updateSwitchPreference(pref, profile.proxyApps) @@ -248,6 +256,7 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan var profile: Profile = _ def setProfile(profile: Profile) { this.profile = profile - for (name <- Array(PROXY_PREFS, FEATURE_PREFS).flatten) updatePreference(findPreference(name), name, profile) + val demo = Build.VERSION.SDK_INT >= 25 && activity.getSystemService(classOf[UserManager]).isDemoUser + for (name <- Array(PROXY_PREFS, FEATURE_PREFS).flatten) updatePreference(findPreference(name), name, profile, demo) } }