Android Wear 2.0: No more ambient notifications (peek mode)

Ambient peek mode is not just deprecated, it’s completely removed from Android Wear 2.0 onward.

Ambient mode is great, it keeps the screen always on. No need to twist your arm to see time. Especially if you have a watch with (transflective) display that doesn’t need backlight (Sony Smartwatch 3, Moto 360 Sport, Casio WSD-F10).

What can be even better? Add the last notification to that. So then you can see both time and your last notification on display (without backlight and without the need to move arm).

Now that’s gone…

.setAmbientPeekMode(WatchFaceStyle.AMBIENT_PEEK_MODE_VISIBLE)
.setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_OPAQUE)

Yep, these are the Notification Changes in Android Wear 2.0, also see comments on /r/androidwear (Reddit).

everyday-ambient-peek

There goes the great usability of my Everyday digital watch face.

So, what’s the solution? Develop user notification observing service on phone that will provide notification content as complication to watch faces? That duplicates one Android Wear feature and kind of complicates it…

Complications for (Android Wear and Apple Watch) are good in general. However in this particular use case it means that instead of two lines/methods that allowed the use of ambient peek mode, it will require way more code in two different apps.

Observing notifications on phone and providing them to complication: The issue here is that the last notification may not match the actual last notification on watch (as there may be local only notifications). Another issue is that already configured notification blacklist that is managed by Android Wear and this app will need to duplicate that (with user configuring both lists).

All My… (Xposed Tweaks) feature: Compact Volume Panel

“Compact Volume Panel” is one of many features/tweaks in my Xposed module (since version 0.4.3 this tweaks is compatible with TouchWiz devices running Android 6.0). This particular tweak trims down the size of the system volume panel. As you can see on the screenshot of Youtube (before and after), it gets rid of all the white space covering one third of watched video.

touchwiz-compact-volume-panel

There’s one downside though. If you expand the volume panel to see all (four) volume streams, there are no text labels next to them. Unfortunately TouchWiz uses the same icons for all volume streams (icons are different on CyanogenMod).

There are ways to customize the volume panel in similar way even without Xposed or root (like Noyze or SoundHUD) but it requires background running service so it won’t be as power efficient as using this tweak.

PayPal and their completely useless monthly emails

Every month PayPal sends email instructing me to view my recent transactions. There’s Log In Now button that takes me to the PayPal (video playing) homepage.

paypal-monthly

Return-Path: <bounce@mail.paypal.com>
Delivered-To: <e@mail.server>
Received: from mail.server
	by mail.server (Dovecot) with LMTP id gDmDGSyhf1eAPgAAqXVTCg
	for <e@mail.server>; Fri, 08 Jul 2016 14:48:44 +0200
Received: from localhost (localhost [127.0.0.1])
	by mail.server (Postfix) with ESMTP id 5B896611
	for <e@mail.server>; Fri,  8 Jul 2016 14:48:44 +0200 (CEST)
X-Spam-Flag: NO
X-Spam-Score: -6.215
X-Spam-Level:
X-Spam-Status: No, score=-6.215 tagged_above=-999 required=6.2
	tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
	DKIM_VALID_AU=-0.1, HTML_IMAGE_RATIO_06=0.001, HTML_MESSAGE=0.001,
	T_FILL_THIS_FORM_SHORT=0.01, URG_BIZ=0.573, USER_IN_DEF_DKIM_WL=-7.5]
	autolearn=no autolearn_force=no
Authentication-Results: mail.server (amavisd-new); dkim=pass (2048-bit key)
	header.d=mail.paypal.com
Received: from mail.server ([127.0.0.1])
	by localhost (mail.server [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id 4ZX9RklyCFml for <e@mail.server>;
	Fri,  8 Jul 2016 14:48:42 +0200 (CEST)
Received: from mta105b.pmx1.epsl1.com (mta105b.pmx1.epsl1.com [142.54.244.105])
	by mail.server (Postfix) with ESMTPS id 27AA160C
	for <e@mail.server>; Fri,  8 Jul 2016 14:48:41 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; d=mail.paypal.com; s=pp-epsilon1; c=relaxed/relaxed;
	q=dns/txt; i=@mail.paypal.com; t=1467982122;
	h=From:Subject:Date:To:MIME-Version:Content-Type;
	bh=0FJrQUoSLR/R4yQzZNUiH+PsVOliAPbMStKVnxq7PvE=;
	b=J1cKlB2l2RXPYI7lAoTxV69iRbikcvPRg6ar5+uMjb1py4d6CeDUidLeEoL8payF
	O4ICSRWV0RdNPhY/ka8bcTsMgyD1FGDd/dXuI0e+O/fjRDisq7+7wbcqZWK9vWKd
	sfxo4qD0ydPbuSGs9HGdWIga/99I97e2tdhVrUsGC6dqEZqvdcRPhcoDrjKh4iPk
	hYDnpZvBzwN5UJRoZYrrkbH/ZBo27v0V1+QI/oZizysl0JSM3fO/gwhxdBCj1ntH
	ptffhHl+ecPNy2iYhlN2d3BZFRXDXHdETIrGFtw2ytwzU3zQJQJ8d21eqDlL5UEO
	FMHH5wZfdkdzaiKQoLvLKA==;
Received: from [10.233.19.183] ([10.233.19.183:53679])
	by pc1udsmta2n20 (envelope-from <bounce@mail.paypal.com>)
	(ecelerity 3.5.0.35861 r(Momo-dev:tip)) with ECSTREAM
	id F7/F3-03462-A21AF775; Fri, 08 Jul 2016 08:48:42 -0400
List-Unsubscribe: <mailto:bounce@mail.paypal.com?subject=list-unsubscribe>
Message-ID: <HP2v200000155ca8cb6deb83955f4bbcfb648141@mail.paypal.com>
MIME-Version: 1.0
Reply-To: "noreply@mail.paypal.com"
 <noreply-HP2v200000155ca8cb6deb83955f4bbcfb648141@mail.paypal.com>
Subject: View your recent transactions now.
From: "PayPal" <paypal@mail.paypal.com>
To: e@mail.server
Date: Fri, 8 Jul 2016 12:48:42 +0000
Content-Type: multipart/alternative;
 boundary="-=Part.6982f5d.49a92c9e798c69ea.155ca8d8e15.2f7d72b4d1e48053=-"

It’s no scam, the email is genuine, it really comes from PayPal. Unfortunately there are no options to turn of these emails.

paypal-notifications

I tried contacting PayPal few times in the past. I always got confirmation email informing me they will reply within the next 24 hours and that was it, no further message. I guess it’s probably because it’s “handled” by the European branch.

OnePlus 3 has extra hardware button, so they removed scheduled “Do not Disturb”

Every Android device since version 5.0 has native support for “Do not Disturb” mode (sometimes also called Interruptions/Down time/Priority mode or Zen mode in source code). With the current version of OxygenOS, OnePlus 3 is probably the first device that comes with crippled DnD: If you use Google backup/restore to transfer data to OnePlus 3, you end up with some(how/times) starting DnD but not ending according to your schedule. OnePlus staff promises they fix the issue – DnD will not go on or off according to previously restored schedule.

oneplus-3-dnd

The fact is that OnePlus removed various DnD settings (most importantly schedule for Priority mode) and they claim it’s because the phone has extra hardware slider:

It’s hard to implement with a hardware override, basically if we allow the “normal process” to happen (say we allow a software DnD in only the “ringer” position of the alert slider) if the Alert Slider is any other position, the software DnD will not work, as the hardware button will always override the software settings. This can be very confusing from a UX perspective as a user will most likely see this feature as broken and say there is a bug. We are looking at possible implementations of it, but nothing is decided at the moment.

Source: OnePlus Staff Member reply from discussion at forums.oneplus.net

Any sane person could probably suggest possible implementation:

  • Position A – software managed, position B – Silent…
  • Position A – software managed, position B – One time triggered Silent mode until when next Priority mode ends…
  • Option to use the slider for something completely else (rotation lock, flashlight, songs switching…)

After all Apple is able to offer scheduled DnD while having hardware switch/mute.

Make NVMe bootable by modding BIOS on your 4 years old motherboard

Just like in the smartphone market, most motherboards usually receive few BIOS updates within one year and that’s it. No single new feature ever comes to old motherboard BIOS.

With my less than 4 year old motherboard (Asus P8Z77-V PRO Thunderbolt), I can upgrade to few fast non-NVMe starages on PCI-E but it won’t be as fast and efficient as NVMe. The great thing about PC modularity is that even few years old PC can get USB-C or M.2 support via PCI-E adapters (that provide enough speed and power).

However the most trivial yet most complicated thing is to get the NVMe storage in PCI-E adapter boot as system drive. As these motherboards already have UEFI and we use modern operating systems (Windows 8/8.1/10), it’s all about software. Asus introduced NVMe boot support to newer lines of motherboards and (as usual) not backported it to older lines.

The most amazing thing is that you actually can get full NVMe support in your BIOS. Just follow this [Guide] How to get full NVMe support for Intel Chipset systems from 6-Series up on how to mod and flash BIOS for your motherboard.

asus-nvme

I didn’t try that yet but based on all the feedback it seems working pretty well. Luckily this makes my setup of mentioned motherboard together with Intel i7-3770K and 32 GB DDR3 RAM less obsolete. (Thanks Asus, now I have reason to hate you too.)

How to enable SIP (VOIP) on Samsung Galaxy S6/S7

Android includes native SIP support since 4.x versions. Yet manufacturers and operators often cripple SIP system configuration/permissions or hide settings screens from users.

Take the Samsung Galaxy S5. It runs Android 6.0.1 and the “Phone” app still has “Internet call – Calling account settings”. SIP calling works perfectly fine on the latest Samsung Galaxy S7, it only needs to be configured the same way in “hidden” settings.

s7-sip

To view this settings screen, you need to start activity “com.android.phone.settings.PhoneAccountSettingsActivity” (or “com.android.phone.CallFeaturesSetting” on some other phones). You can do this in apps such as QuickShortcutMaker. Or just use my app All My that is primarily a Xposed module but it has a button dedicated to open this setting screen directly.

all-my-sip

Features come, features go

Just as it wasn’t enough that some devices come with two year update support, other with only one year and some do not receive single bump in Android version. Even buying the top of the line device doesn’t guarantee anything. Samsung two year old flagship (Galaxy S5) received updates from Android 4.4.2 -> 5.0 -> 6.0.1 while their 2014 tablet line of Galaxy Tab S only received from Android 4.4.2 -> 5.0.

So tablet Galaxy Tab S 8.4 purchased in 2015 that was the “best” available tablet only received single bump to Android 5.0 and is still stuck at “Android security patch level 2015-12-01”, wide open to multiple critical vulnerabilities.

Screenshot_2016-06-28-19-02-43

Basically manufactures want users upgrade yearly. Hardware changes and users usually get better screen and camera, faster processor and memory etc. But don’t get used to any other extra hardware functionality as when upgrading from Samsung Galaxy S5 to S6 or S7, you will lose:

  • Infrared port
  • Video out over MHL
  • Support for controlling touch screen with (regular) gloves on.

s5-s7-k920

Ok, hardware changes are actually real limitations but why are there software features that are not carried over to new model or are even lost when new update is released for a single device?

  • VOIP/SIP – Native Android feature that is available in S5 but hidden from user in S6/S7 or modified to extend it’s broken on various different devices (Lenovo)
  • Button backlight – Configurable feature that was removed (S6/S7) but is available via 3rd party app?!
  • Toggle Torch via volume button long press (not available after Android 4.4.2)
  • Configuration for notifications & LED during DND (Do Not Diturb) mode (available in early Android 4.4.2 ROMs). Do people really not want this?

Another annoying thing is that S7 contains couple of simple features that are not “backported” S5 – if you call one high level software patch from Android 6.0.1 TouchWiz device to another Android 6.0.1 TouchWiz device backporting:

  • Option to disable screen wake up when cable is inserted
  • Option to hide useless Quick Connect/S Finder buttons in notification panel
  • Torch button among other toggles
  • Theme support (like it wasn’t already there – RRO)
  • Auto restart
  • DPI change (Android N will support that, if manufactures won’t disable that)

Well, at least the new phones are shiny.

Truecaller: Replacing one kind of marketing spam with another

I finally gave in and installed Truecaller as I wanted to avoid all those annoying telemarketers. I registered with my phone number, enabled blocking of “spammers” and disabled features I didn’t feel like I needed.

The next day I received my first notification reminding me something about Truecaller. The day after that again.

tc1sm

As standard Android notifications were not enough, there was couple of custom popup’s after I received text messages.

tc2sm

That made ma look to the actual preference file of the app. It contains records such as:

    <boolean name="truecaller.alarm.notification.TYPE_1DAY.fired" value="true" />
    <boolean name="truecaller.alarm.notification.TYPE_2DAYS_NEW.fired" value="true" />
    <boolean name="truecaller.alarm.notification.TYPE_2DAYS_UPGRADED.fired" value="true" />
    <boolean name="truecaller.alarm.notification.TYPE_5DAYS.fired" value="true" />
    <boolean name="truecaller.alarm.notification.TYPE_7DAYS.fired" value="true" />
    <boolean name="truecaller.alarm.notification.TYPE_15DAYS.fired" value="false" />
    <boolean name="truecaller.alarm.notification.TYPE_20DAYS.fired" value="false" />
    <boolean name="truecaller.alarm.notification.TYPE_RESCHEDULE.fired" value="false" />
    <boolean name="truecaller.alarm.notification.TYPE_UPDATE_SPAM.fired" value="false" />
    <long name="truecaller.alarm.notification.TYPE_1DAY.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_2DAYS_NEW.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_2DAYS_UPGRADED.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_5DAYS.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_7DAYS.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_15DAYS.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_20DAYS.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_RESCHEDULE.set" value="0" />
    <long name="truecaller.alarm.notification.TYPE_UPDATE_SPAM.set" value="1466500401780" />

So Truecaller will spam you 1, 2, 5, 7, 15, and 20 days after installation with various reminders to keep you using the app, installing other Truecaller apps, start using widgets or liking/sharing.

[
  {
    "d": {
      "a": {
        "u": "https://www.youtube.com/watch?v=yrtF7WVqtiw",
        "i": "http://i.imgur.com/uIc5NZJ.png",
        "s": null,
        "t": "The Smarter Way to Make Calls"
      },
      "e": {
        "i": 1228,
        "s": 1,
        "c": 1465344000,
        "t": 4
      }
    },
    "s": 2,
    "m": 1
  },
  {
    "d": {
      "a": {
        "u": "market://details?id=com.truecaller.messenger",
        "i": "http://www.truecaller.com/img/notifications/truemessenger.png",
        "s": "Truemessenger keeps your SMS inbox spam-free. Download it today!.",
        "t": "Introducing Truemessenger"
      },
      "e": {
        "i": 1105,
        "s": 1,
        "c": 1464652800,
        "t": 4
      }
    },
    "s": 2,
    "m": 1
  },
  {
    "d": {
      "a": {
        "u": "https://youtu.be/-Ew7mKIGDxg",
        "s": "",
        "t": "Truecaller´s widget enables you to reach your super call log directly from your homescreen. Would you like to see how to add the widget?"
      },
      "e": {
        "i": 193,
        "s": 1,
        "c": 1464652800,
        "t": 4
      }
    },
    "s": 2,
    "m": 1
  },
  {
    "d": {
      "a": {
        "u": "http://m.truecaller.com/likeus.v4",
        "s": "",
        "t": "We hope you are enjoying your Truecaller experience and want to share it with your friends! Click here to like us!"
      },
      "e": {
        "i": 61,
        "s": 1,
        "c": 1464652800,
        "t": 4
      }
    },
    "s": 2,
    "m": 1
  }
]

Notifications, campaigns, feedback, ads, promo, Play Store reviews, invites, banners, premium upgrades…

    <boolean name="CAMPAIGN_USER" value="true" />
    <boolean name="featureAutoTagging" value="true" />
    <boolean name="featureEmailSource" value="true" />
    <boolean name="FEEDBACK_HAS_ASKED_AFTERCALL" value="true" />
    <boolean name="filter_filterJustActivated" value="false" />
    <boolean name="tagsDownloadedAtLeastOnce" value="true" />
    <long name="adsDisabledUntil" value="1464521755859" />
    <long name="afterCallPromoteLastShown" value="1465667134003" />
    <long name="afterCallPromoteTmTimestamp" value="1464968979540" />
    <long name="dialerPromotionStartTime" value="1465910055882" />
    <long name="dismissed_truebadge_tip_timestamp" value="1464435392963" />
    <long name="FEEDBACK_PLUS_ONE_FIRST_CHECKED" value="1464435357271" />
    <long name="GOOGLE_REVIEW_ASK_TIMESTAMP" value="1465674316127" />
    <long name="INVITE_PEOPLE_FIRST_CHECKED" value="1464435357268" />
    <long name="last_banner_dismiss_timestamp" value="1464435391718" />
    <long name="latest_seen_truebadged_call_timestamp" value="1464162369390" />
    <long name="notificationLast" value="1466234214838" />
    <long name="premiumRequests" value="0" />
    <long name="swUpdateNotificationLast" value="1465414358095" />
    <string name="TMCrossPromotionAfterCallBody1">Find out who sent that SMS</string>
    <string name="TMCrossPromotionAfterCallBody2">See their name and photo by downloading Truemessenger</string>
    <string name="TMCrossPromotionAppChooserBanner">Open with Truemessenger</string>
    <string name="TMCrossPromotionAppChooserTitle">Use a different app</string>
    <string name="TMCrossPromotionDetailsTitle">Block SMS from this contact</string>
    <string name="TMCrossPromotionSettingsTitle">Get Truecaller for SMS</string>
    <string name="TMCrossPromotionSubTitle">Download Truemessenger</string>
    
    <string name="LocalNotificationAddPhoto">Tap here to add a photo to your Truecaller profile and look professional.</string>
    <string name="LocalNotificationBlockNew">Truecaller can also block annoying spam calls for you. Tap here to open Truecaller &amp; learn more.</string>
    <string name="LocalNotificationBlockUpgrading">Truecaller can now block annoying spam calls from disturbing you. Tap here to open Truecaller &amp; learn more.</string>
    <string name="LocalNotificationEasierLife">Has Truecaller made your life easier yet? Tap here to spread the love.</string>
    <string name="LocalNotificationRegister">Tap here to sign in to Truecaller and start enjoying live Caller id.</string>
    <string name="LocalNotificationSearch">Find the name behind any phone number instantly. Tap here to open Truecaller &amp; learn more.</string>
    <string name="LocalNotificationUpdateSpam">New spam protection available, tap here to update.</string>

This is just too much for me. I only have 50 apps installed on my phone but if every app pushed notifications like that, I would go crazy.

In the end, it seems like Truecaller is (just) using www.muzutozvednout.cz anyway (at least for some numbers here in Czech Republic).

Ok, Truecaller offers “Upgrade to Professional”, but it’s monthly subscription (29 CZK = 1.2 USD per month) and it says “Remove all ads” but doesn’t specify what marketing experiments will I still be part of. I don’t care if I “Get the Pro badge on your profile”.

You don’t need bigger battery, you’re using it wrong

People complain about battery life of their phones (barely lasting single day) and demand 4000 mAh or even larger batteries from device makers.

Capacity of around 3000 mAh is plenty because it’s usually enough for 8 to 10 hours of continuous activity such as browsing web or watching videos.

Here’s a typical power consumption of my Samsung Galaxy S5 (captured about two years ago). With its 2800 mAh battery, the phone lasted little over 3 days including almost 6 hours of SOT (Screen on time).

battery-kk

Today, the same 2 years old battery drops only 3-4% overnight. There are around 50 apps installed, both WiFi and mobile networks are active. Of course the device is connected to network – Hangouts and WhatsApp are active (they use GCM) but there are also apps connected not using GCM – Nine (Exchange client) and Conversations (XMPP client).

battery-lp

I can say that I find the battery tests done by gsmarena.com accurate. If your phone is stationary and withing reasonably good WiFi / mobile network coverage, there’s no reason to have higher battery drain than 0.5% per hour.

If your battery drain is higher, you’re either in area with bad network coverage or have some rogue apps installed. Unfortunately there’s no universal way to detect the biggest offenders as Android battery usage reporting tool and even monitoring wakelocks may be misleading…

USB-C still doesn’t save us

It’s new, it’s fast, it’s better, there’s no one up side so why anyone wouldn’t want USB-C?

  • USB-C cables are significantly thicker than plain old USB 2.0 cables. You probably won’t care about cable thickness used for connecting your monitor but you may care about cable used for charging your portable devices.
  • USB-C doesn’t imply USB 3.1 Gen 2 speed (10 Gbit/s).
  • USB-C doesn’t imply USB 3.1 Gen 1 (USB 3.0) speed (5 Gbit/s). On plenty of phones, USB-C carries only USB 2.0.

macbook-adpt-usbc-dgtlavmulti-pf

The USB-C port on this adapter charges your computer, but it doesn’t transfer data.

  • Just like with this USB-C adapter from Apple, USB-C may not carry (be used for) any data at all. (RTFM!)

4K @60Hz 24-bit color (without compression) with simultaneous USB 3.1

  • Thanks to DisplayPort over USB-C, we can get both display and data links. Is DisplayPort over USB-C supported on this shiny laptop with USB-C? RTFM!
  • USB-C can be used for bidirectional power delivery/charging. Is that supported in all these brand new phones? RTFM!
  • When USB-C will be used on graphics cards, how will users understand which USB-C port is which. Maybe return to color coding?

jacks

New generation of USB connector developed to serve market for next 20 years

  • USB-C will be with us for at least some time. Hope it won’t end up like Thunderbolt/Mini DisplayPort which is only 5 years old and effectively obsolete now.

Initially I thought USB-C will allow us just connect things together and it will work. It won’t… You will need to read the manual for your device to understand what can USB-C in this particularly device can be used for.