Loading packages/EasterEgg/src/com/android/egg/neko/Cat.java +39 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import java.util.Random; import java.util.concurrent.ThreadLocalRandom; import com.android.egg.R; import com.android.internal.logging.MetricsLogger; public class Cat extends Drawable { public static final long[] PURR = {0, 40, 20, 40, 20, 40, 20, 40, 20, 40, 20, 40}; Loading @@ -37,6 +38,8 @@ public class Cat extends Drawable { private long mSeed; private String mName; private int mBodyColor; private int mFootType; private boolean mBowTie; private synchronized Random notSoRandom(long seed) { if (mNotSoRandom == null) { Loading Loading @@ -66,6 +69,15 @@ public class Cat extends Drawable { return a[i+1]; } public static final int getColorIndex(int q, int[] a) { for(int i = 1; i < a.length; i+=2) { if (a[i] == q) { return i/2; } } return -1; } public static final int[] P_BODY_COLORS = { 180, 0xFF212121, // black 180, 0xFFFFFFFF, // white Loading Loading @@ -155,14 +167,19 @@ public class Cat extends Drawable { tint(0xFF000000, D.mouth, D.nose); } mFootType = 0; if (nsr.nextFloat() < 0.25f) { mFootType = 4; tint(0xFFFFFFFF, D.foot1, D.foot2, D.foot3, D.foot4); } else { if (nsr.nextFloat() < 0.25f) { mFootType = 2; tint(0xFFFFFFFF, D.foot1, D.foot2); } else if (nsr.nextFloat() < 0.25f) { mFootType = 3; // maybe -2 would be better? meh. tint(0xFFFFFFFF, D.foot3, D.foot4); } else if (nsr.nextFloat() < 0.1f) { mFootType = 1; tint(0xFFFFFFFF, (Drawable) choose(nsr, D.foot1, D.foot2, D.foot3, D.foot4)); } } Loading @@ -175,7 +192,8 @@ public class Cat extends Drawable { final int collarColor = chooseP(nsr, P_COLLAR_COLORS); tint(collarColor, D.collar); tint((nsr.nextFloat() < 0.1f) ? collarColor : 0, D.bowtie); mBowTie = nsr.nextFloat() < 0.1f; tint(mBowTie ? collarColor : 0, D.bowtie); } public static Cat create(Context context) { Loading Loading @@ -290,6 +308,26 @@ public class Cat extends Drawable { return mBodyColor; } public void logAdd(Context context) { logCatAction(context, "egg_neko_add"); } public void logRemove(Context context) { logCatAction(context, "egg_neko_remove"); } public void logShare(Context context) { logCatAction(context, "egg_neko_share"); } private void logCatAction(Context context, String prefix) { MetricsLogger.count(context, prefix, 1); MetricsLogger.histogram(context, prefix +"_color", getColorIndex(mBodyColor, P_BODY_COLORS)); MetricsLogger.histogram(context, prefix + "_bowtie", mBowTie ? 1 : 0); MetricsLogger.histogram(context, prefix + "_feet", mFootType); } public static class CatParts { public Drawable leftEar; public Drawable rightEar; Loading packages/EasterEgg/src/com/android/egg/neko/NekoActivationActivity.java +4 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import android.content.pm.PackageManager; import android.util.Log; import android.widget.Toast; import com.android.internal.logging.MetricsLogger; public class NekoActivationActivity extends Activity { private void toastUp(String s) { Toast toast = Toast.makeText(this, s, Toast.LENGTH_SHORT); Loading @@ -39,6 +41,7 @@ public class NekoActivationActivity extends Activity { } pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); MetricsLogger.histogram(this, "egg_neko_enable", 0); toastUp("\uD83D\uDEAB"); } else { if (NekoLand.DEBUG) { Loading @@ -46,6 +49,7 @@ public class NekoActivationActivity extends Activity { } pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); MetricsLogger.histogram(this, "egg_neko_enable", 1); toastUp("\uD83D\uDC31"); } finish(); Loading packages/EasterEgg/src/com/android/egg/neko/NekoDialog.java +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.egg.R; import com.android.internal.logging.MetricsLogger; import java.util.ArrayList; Loading @@ -51,6 +52,7 @@ public class NekoDialog extends Dialog { if (currentState == 0 && food.getType() != 0) { NekoService.registerJob(getContext(), food.getInterval(getContext())); } MetricsLogger.histogram(getContext(), "egg_neko_offered_food", food.getType()); prefs.setFoodState(food.getType()); dismiss(); } Loading packages/EasterEgg/src/com/android/egg/neko/NekoLand.java +9 −3 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.widget.TextView; import com.android.egg.R; import com.android.egg.neko.PrefState.PrefsListener; import com.android.internal.logging.MetricsLogger; import java.io.File; import java.io.FileOutputStream; Loading Loading @@ -79,7 +80,8 @@ public class NekoLand extends Activity implements PrefsListener { mAdapter = new CatAdapter(); recyclerView.setAdapter(mAdapter); recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); updateCats(); int numCats = updateCats(); MetricsLogger.histogram(this, "egg_neko_visit_gallery", numCats); } @Override Loading @@ -88,7 +90,7 @@ public class NekoLand extends Activity implements PrefsListener { mPrefs.setListener(null); } private void updateCats() { private int updateCats() { Cat[] cats; if (CAT_GEN) { cats = new Cat[50]; Loading @@ -99,6 +101,7 @@ public class NekoLand extends Activity implements PrefsListener { cats = mPrefs.getCats().toArray(new Cat[0]); } mAdapter.setCats(cats); return cats.length; } private void onCatClick(Cat cat) { Loading @@ -115,11 +118,12 @@ public class NekoLand extends Activity implements PrefsListener { } private void onCatRemove(Cat cat) { cat.logRemove(this); mPrefs.removeCat(cat); } private void showNameDialog(final Cat cat) { Context context = new ContextThemeWrapper(this, final Context context = new ContextThemeWrapper(this, android.R.style.Theme_Material_Light_Dialog_NoActionBar); // TODO: Move to XML, add correct margins. View view = LayoutInflater.from(context).inflate(R.layout.edit_text, null); Loading @@ -134,6 +138,7 @@ public class NekoLand extends Activity implements PrefsListener { .setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MetricsLogger.count(context, "egg_neko_rename_cat", 1); cat.setName(text.getText().toString().trim()); mPrefs.addCat(cat); } Loading Loading @@ -244,6 +249,7 @@ public class NekoLand extends Activity implements PrefsListener { intent.putExtra(Intent.EXTRA_SUBJECT, cat.getName()); intent.setType("image/png"); startActivity(Intent.createChooser(intent, null)); cat.logShare(this); } catch (IOException e) { Log.e("NekoLand", "save: error: " + e); } Loading packages/EasterEgg/src/com/android/egg/neko/NekoService.java +1 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ public class NekoService extends JobService { if (cats.size() == 0 || rng.nextFloat() <= new_cat_prob) { cat = Cat.create(this); prefs.addCat(cat); cat.logAdd(this); Log.v(TAG, "A new cat is here: " + cat.getName()); } else { cat = cats.get(rng.nextInt(cats.size())); Loading Loading
packages/EasterEgg/src/com/android/egg/neko/Cat.java +39 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import java.util.Random; import java.util.concurrent.ThreadLocalRandom; import com.android.egg.R; import com.android.internal.logging.MetricsLogger; public class Cat extends Drawable { public static final long[] PURR = {0, 40, 20, 40, 20, 40, 20, 40, 20, 40, 20, 40}; Loading @@ -37,6 +38,8 @@ public class Cat extends Drawable { private long mSeed; private String mName; private int mBodyColor; private int mFootType; private boolean mBowTie; private synchronized Random notSoRandom(long seed) { if (mNotSoRandom == null) { Loading Loading @@ -66,6 +69,15 @@ public class Cat extends Drawable { return a[i+1]; } public static final int getColorIndex(int q, int[] a) { for(int i = 1; i < a.length; i+=2) { if (a[i] == q) { return i/2; } } return -1; } public static final int[] P_BODY_COLORS = { 180, 0xFF212121, // black 180, 0xFFFFFFFF, // white Loading Loading @@ -155,14 +167,19 @@ public class Cat extends Drawable { tint(0xFF000000, D.mouth, D.nose); } mFootType = 0; if (nsr.nextFloat() < 0.25f) { mFootType = 4; tint(0xFFFFFFFF, D.foot1, D.foot2, D.foot3, D.foot4); } else { if (nsr.nextFloat() < 0.25f) { mFootType = 2; tint(0xFFFFFFFF, D.foot1, D.foot2); } else if (nsr.nextFloat() < 0.25f) { mFootType = 3; // maybe -2 would be better? meh. tint(0xFFFFFFFF, D.foot3, D.foot4); } else if (nsr.nextFloat() < 0.1f) { mFootType = 1; tint(0xFFFFFFFF, (Drawable) choose(nsr, D.foot1, D.foot2, D.foot3, D.foot4)); } } Loading @@ -175,7 +192,8 @@ public class Cat extends Drawable { final int collarColor = chooseP(nsr, P_COLLAR_COLORS); tint(collarColor, D.collar); tint((nsr.nextFloat() < 0.1f) ? collarColor : 0, D.bowtie); mBowTie = nsr.nextFloat() < 0.1f; tint(mBowTie ? collarColor : 0, D.bowtie); } public static Cat create(Context context) { Loading Loading @@ -290,6 +308,26 @@ public class Cat extends Drawable { return mBodyColor; } public void logAdd(Context context) { logCatAction(context, "egg_neko_add"); } public void logRemove(Context context) { logCatAction(context, "egg_neko_remove"); } public void logShare(Context context) { logCatAction(context, "egg_neko_share"); } private void logCatAction(Context context, String prefix) { MetricsLogger.count(context, prefix, 1); MetricsLogger.histogram(context, prefix +"_color", getColorIndex(mBodyColor, P_BODY_COLORS)); MetricsLogger.histogram(context, prefix + "_bowtie", mBowTie ? 1 : 0); MetricsLogger.histogram(context, prefix + "_feet", mFootType); } public static class CatParts { public Drawable leftEar; public Drawable rightEar; Loading
packages/EasterEgg/src/com/android/egg/neko/NekoActivationActivity.java +4 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import android.content.pm.PackageManager; import android.util.Log; import android.widget.Toast; import com.android.internal.logging.MetricsLogger; public class NekoActivationActivity extends Activity { private void toastUp(String s) { Toast toast = Toast.makeText(this, s, Toast.LENGTH_SHORT); Loading @@ -39,6 +41,7 @@ public class NekoActivationActivity extends Activity { } pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); MetricsLogger.histogram(this, "egg_neko_enable", 0); toastUp("\uD83D\uDEAB"); } else { if (NekoLand.DEBUG) { Loading @@ -46,6 +49,7 @@ public class NekoActivationActivity extends Activity { } pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); MetricsLogger.histogram(this, "egg_neko_enable", 1); toastUp("\uD83D\uDC31"); } finish(); Loading
packages/EasterEgg/src/com/android/egg/neko/NekoDialog.java +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.egg.R; import com.android.internal.logging.MetricsLogger; import java.util.ArrayList; Loading @@ -51,6 +52,7 @@ public class NekoDialog extends Dialog { if (currentState == 0 && food.getType() != 0) { NekoService.registerJob(getContext(), food.getInterval(getContext())); } MetricsLogger.histogram(getContext(), "egg_neko_offered_food", food.getType()); prefs.setFoodState(food.getType()); dismiss(); } Loading
packages/EasterEgg/src/com/android/egg/neko/NekoLand.java +9 −3 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.widget.TextView; import com.android.egg.R; import com.android.egg.neko.PrefState.PrefsListener; import com.android.internal.logging.MetricsLogger; import java.io.File; import java.io.FileOutputStream; Loading Loading @@ -79,7 +80,8 @@ public class NekoLand extends Activity implements PrefsListener { mAdapter = new CatAdapter(); recyclerView.setAdapter(mAdapter); recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); updateCats(); int numCats = updateCats(); MetricsLogger.histogram(this, "egg_neko_visit_gallery", numCats); } @Override Loading @@ -88,7 +90,7 @@ public class NekoLand extends Activity implements PrefsListener { mPrefs.setListener(null); } private void updateCats() { private int updateCats() { Cat[] cats; if (CAT_GEN) { cats = new Cat[50]; Loading @@ -99,6 +101,7 @@ public class NekoLand extends Activity implements PrefsListener { cats = mPrefs.getCats().toArray(new Cat[0]); } mAdapter.setCats(cats); return cats.length; } private void onCatClick(Cat cat) { Loading @@ -115,11 +118,12 @@ public class NekoLand extends Activity implements PrefsListener { } private void onCatRemove(Cat cat) { cat.logRemove(this); mPrefs.removeCat(cat); } private void showNameDialog(final Cat cat) { Context context = new ContextThemeWrapper(this, final Context context = new ContextThemeWrapper(this, android.R.style.Theme_Material_Light_Dialog_NoActionBar); // TODO: Move to XML, add correct margins. View view = LayoutInflater.from(context).inflate(R.layout.edit_text, null); Loading @@ -134,6 +138,7 @@ public class NekoLand extends Activity implements PrefsListener { .setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MetricsLogger.count(context, "egg_neko_rename_cat", 1); cat.setName(text.getText().toString().trim()); mPrefs.addCat(cat); } Loading Loading @@ -244,6 +249,7 @@ public class NekoLand extends Activity implements PrefsListener { intent.putExtra(Intent.EXTRA_SUBJECT, cat.getName()); intent.setType("image/png"); startActivity(Intent.createChooser(intent, null)); cat.logShare(this); } catch (IOException e) { Log.e("NekoLand", "save: error: " + e); } Loading
packages/EasterEgg/src/com/android/egg/neko/NekoService.java +1 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ public class NekoService extends JobService { if (cats.size() == 0 || rng.nextFloat() <= new_cat_prob) { cat = Cat.create(this); prefs.addCat(cat); cat.logAdd(this); Log.v(TAG, "A new cat is here: " + cat.getName()); } else { cat = cats.get(rng.nextInt(cats.size())); Loading