LightBlog

lundi 16 janvier 2017

Use Tasker to Notify when your Tethered Devices lose Internet Access

From the last article, you know that I spend quite a bit of my time on a train. It's an excellent time to write an article or two, provided I have access to the Internet to look up facts and ideas. Tethering can be tricky on the train, as reception-less areas are scattered across my route. I find it quite easy to tell that I'm about to go offline when I'm in a tunnel, but the situation is less apparent when the train cruises through the open meadows of North Yorkshire. Android's built-in tethering solution doesn't have any way to let you know that you are not going to be able to load that website for the next 5 minutes.

That's why, as a Tasker aficionado, I thought about how to solve my problem using the popular Android automation app. I've solved my problem by building a tethering 'no network' warning using Tasker. The aim of the project is to let you know when your phone no longer is in cellular network range. This will be done in 3 ways:

  • Using notification LED (best for when you tether for friends)
  • Using a smartphone icon (needs a smartwatch)
  • Using a Join push (best for personal devices -can be replaced with AutoRemote)

You can get more creative with notifications, however, I will use only discrete options as tethering is most likely to be used in public places. No one likes obnoxious notifications, right? Please bear in mind that the notifications will use an internet connection to show up on the connected device. You could use AutoRemote (via Bluetooth) to send out warnings when the network is not present. This will require the device in question to be paired via Bluetooth.

You will need:
Android version: 4.0+, Android 7.0 needed for the notification tile
Apps: Join
Plugins:  AutoWear (optional), AutoRemote (can replace Join), AutoNotification (optional)


Enable a tethering 'no network' warning with Tasker

Instead of checking if tethering is enabled, it's easier to replace a tile in the status bar with AutoNotification and set up a toggle behavior. If you are not on Android 7.0 you can use a shortcut or a widget instead.

If you have never enabled a tile with AutoNotification – you will see that this is a bit awkward. You will need to create a setup task which will convert a template tile into a tile of our choice. Place an empty tile, i.e. AutoNotification 02 onto the tiles area (click edit to edit the visible tiles).

Create a Tethering tile

Tethering tile

  Tile Setup          A1: AutoNotification Tiles [ Configuration:Tile: 2  Command: hotspottoggle  Label: Hotspot  Icon: android.resource://net.dinglisch.android.taskerm/hd_aaa_ext_signal  State: 1  Require Unlock: false  Hide Notifications: true Timeout (Seconds):60 ]           A2: Variable Set [ Name:%HotspotVariable To:0 Recurse Variables:Off Do Maths:Off Append:Off ]           A3: Variable Set [ Name:%HotspotDialog To:0 Recurse Variables:Off Do Maths:Off Append:Off ]  

You will only need to run this once to set up the tiles and variables. The tile will use a command hotspottoggle to change the state of tethering and will set it as inactive. It will also collapse the status bar once pressed. You can dress up the tile with a label of your choice and the icon.

Two more variables will be created and set to 0. %HotspotVariable will display the status of the tether (0 = no, 1 = yes) and %HotspotDialog will display a dialog asking us what device we want to notify (0 = do not show, 1 = show dialog).

Tethering toggle

Tethering toggle

  Hotspot Toggle           A1: Variable Add [ Name:%HotspotDialog Value:1 Wrap Around:2 ]           A2: AutoNotification Tiles [ Configuration:Tile: 2  Command: hotspottoggle  Label: Hotspot  Icon: android.resource://net.dinglisch.android.taskerm/hd_aaa_ext_signal  State: 999  Require Unlock: false  Hide Notifications: true Timeout (Seconds):60 ]           A3: WiFi Tether [ Set:Toggle ]           A4: Perform Task [ Name:Hotspot Dialog Priority:%priority Parameter 1 (%par1): Parameter 2 (%par2): Return Value Variable: Stop:Off ] If [ %HotspotDialog ~ 1 ]          A5: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]           A6: Variable Add [ Name:%HotspotVariable Value:1 Wrap Around:2 ]           A7: Variable Clear [ Name:%HotspotDevice Pattern Matching:Off ] If [ %HotspotVariable ~ 0 ]  

I want to display a dialog only when tethering is enabled. The dialog will show some devices I own and will allow me to set the target for the notifications. In each case, I will set my tethering phone to blink the notification LED rapidly each time the reception is poor.

When the tile is pressed, it changes the status to active. %HotspotDialog changes to 1 and it triggers the HotspotDialog task. While we select our device, the Hotspot profiles are armed by setting the variable %HotspotVariable to 1. When I press on a tile again to end tethering, the HotspotDialog returns to 0 and no longer prompts the dialog to be displayed, and the %HotspotVariable is set to the neutral value 0.

A1,A6

The action Variable Add +1 will change the value of our starting variables from 0 to 1 and will wrap it around 2. This means these variables will always take values of 1 or 0. The action placement is relevant as well, as the %HotspotDialog will control when the dialog is displayed. We are running the same task to disable and enable the tethering, but we don't want the dialog to appear each time we toggle it.

A7

While we are at it, if the task is performed to disable the tether (%HotspotVariable = 0), we want to clear the variable that stores the name of the device which gets notified by the Hotspot Dialog task.

A5

The Wait action is added to prevent the information about poor range from being displayed straight away which may happen when the hotspot setting is toggled.

A3

Simply toggle the WiFi tether action. Nothing complicated about this step.

A4

A separate task is displayed to show the AutoTools Dialog and action for the choice I've made. This will run when our dialog controlling variable %HotspotDialog = 1.

A2

When the toggle is pressed, we want to make sure that the tile toggles the state active/inactive and retains the same command: hotspottoggle. Lastly, make sure it will collapse the status bar.

Hotspot Dialog

Hotspot dialog

  Hotspot Dialog           A1: AutoTools Dialog [ Configuration:Dialog Type: List  Title: Enable poor network notification?  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png  List Type: 1  Texts: Tablet,Mobile,Computer,Watch,Laptop  Text Size: 20  Images: /storage/emulated/0/Tasker/Material Icons/ic_tablet-1.png,/storage/emulated/0/Tasker/Material Icons/ic_cellphone_android-1.png,/storage/emulated/0/Tasker/Material Icons/ic_desktop_mac-1.png,/storage/emulated/0/Tasker/Material Icons/ic_watch-1.png,/storage/emulated/0/Tasker/Material Icons/ic_laptop-1.png  Image Width: 50  Dim Background: true  Number Of Columns: 3  Top Margin: 16  Bottom Margin: 16  Bottom Buttons Top Margin: 16  Bottom Buttons Bottom Margin: 16  Close On Select: true  Separator: ,  Command Variable: atcommand  Cancelable: true  Turn Screen On: true Timeout (Seconds):60 ]           A2: Variable Set [ Name:%HotspotDevice To:%attext Recurse Variables:Off Do Maths:Off Append:Off ]   

The AutoTools dialog is used to display available devices. When the device is selected, dialog will close and set the value of the %HotspotDevice to the name of that device. This variable gets cleared each time the tethering is stopped.

Poor reception/No data

Poor reception/No data profiles

I have created 2 profiles which will check the signal strength and the Internet connection. Each one is controlled by the variable %HotspotVariable and is only active when tethering is enabled. Both profiles will trigger the same task when activated and deactivated. One contains the state context – signal strength –  and the other the mobile network. Ideally, the connection will be still present when the notification is issued. This is why I'm including the signal strength set to 1 in the profile condition.

Poor Signal

Poor signal

  Profile: Poor Reception (91)          State: Variable Value [ %HotspotVariable ~ 1 ]          State: Signal Strength [ From:0 To:1 ]  Enter: PoorSignal (89)                    A1: AutoNotification [ Configuration:Use HTML: false  Title: Poor reception  Icon: android.resource://net.dinglisch.android.taskerm/hl_device_access_network_cell  Status Bar Icon: device_access_network_cell  Status Bar Text Size: 16  Id: 55  Priority: -1  Persistent: true  Is Group Summary: false  LED Color: red  LED On: 300  LED Off: 30p  Skip Picture Cache: false  Update Notification: false  Only on Phone: true Timeout (Seconds):20 ]                     A2: Join Send Push [ Configuration:Device: Chrome@Laptop  Text: Poor range  Title: Poor reception  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png Timeout (Seconds):60 ] If [ %HotspotDevice ~ Laptop ]                    A3: Join Send Push [ Configuration:Device: Chrome@Home  Text: Poor range  Title: warning  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png Timeout (Seconds):60 ]                     A4: Join Send Push [ Configuration:Device: Tablet  Text: Poor range  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png Timeout (Seconds):60 ] If [ %HotspotDevice ~ Tablet ]          A5: AutoWear App [ Configuration:Execute Now: true  Trigger Event: true  Haptic Feedback: true  Name: App  AutoWear Elements: Show  AutoWear Element Id: poorrange  Turn Screen On: true Timeout (Seconds):60 ] If [ %HotspotDevice ~ Watch ]    Exit: Cancel (90)          A1: AutoNotification Cancel [ Configuration:Id: 55  Cancel All: false Timeout (Seconds):0 ]           A2: AutoWear App [ Configuration:Execute Now: true  Trigger Event: true  Haptic Feedback: true  Name: App  AutoWear Elements: Hide  AutoWear Element Id: poorrange  Turn Screen On: true Timeout (Seconds):60 ] If [ %HotspotDevice ~ Watch ]    Profile: No Data (92)          State: Variable Value [ %HotspotVariable ~ 1 ]          State: Mobile Network [ 2G:On 3G:Off 3G - HSPA:Off 4G:Off ]  Enter: PoorSignal (89)                    A1: AutoNotification [ Configuration:Use HTML: false  Title: Poor reception  Icon: android.resource://net.dinglisch.android.taskerm/hl_device_access_network_cell  Status Bar Icon: device_access_network_cell  Status Bar Text Size: 16  Id: 55  Priority: -1  Persistent: true  Is Group Summary: false  LED Color: red  LED On: 300  LED Off: 30p  Skip Picture Cache: false  Update Notification: false  Only on Phone: true Timeout (Seconds):20 ]                     A2: Join Send Push [ Configuration:Device: Chrome@Laptop  Text: Poor range  Title: Poor reception  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png Timeout (Seconds):60 ] If [ %HotspotDevice ~ Laptop ]                    A3: Join Send Push [ Configuration:Device: Chrome@Home  Text: Poor range  Title: warning  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png Timeout (Seconds):60 ]                     A4: Join Send Push [ Configuration:Device: Tablet  Text: Poor range  Icon: /storage/emulated/0/Tasker/Material Icons/ic_wifi.png Timeout (Seconds):60 ] If [ %HotspotDevice ~ Tablet ]          A5: AutoWear App [ Configuration:Execute Now: true  Trigger Event: true  Haptic Feedback: true  Name: App  AutoWear Elements: Show  AutoWear Element Id: poorrange  Turn Screen On: true Timeout (Seconds):60 ] If [ %HotspotDevice ~ Watch ]    Exit: Cancel          A1: AutoNotification Cancel [ Configuration:Id: 55  Cancel All: false Timeout (Seconds):0 ]           A2: AutoWear App [ Configuration:Execute Now: true  Trigger Event: true  Haptic Feedback: true  Name: App  AutoWear Elements: Hide  AutoWear Element Id: poorrange  Turn Screen On: true Timeout (Seconds):60 ] If [ %HotspotDevice ~ Watch ]  

The AutoNotification notification is created on the phone, but only to make the LED blink. Choose the other values of the notification to your personal liking and set fast LED blink (mine is 300ms on/off) in your preferred color. The idea is to display discrete information rather than a fully invasive alert when the screen wake. The notification is saved as a permanent notification with ID 55.

What follows next is a Join push for each device you own. Select a Join push for each device, and use the IF condition to match the value of %HotspotDevice variable.

Configure the Join push action to send a notification of your choice. Since these notifications will be dismissed on the target device, no other actions are needed.

SmartWatch

Smartwatch profile

  Profile: Remove Watch Icon           Event: AutoWear Command [ Configuration:Command Filter: closepoorrange  Case Insensitive: false  Exact: true  Regex: false  Variable Array: false ]  Enter: Close WearIcon (55)          A1: AutoWear App [ Configuration:Execute Now: true  Trigger Event: true  Haptic Feedback: true  Name: App  AutoWear Elements: Hide  AutoWear Element Id: poorrange  Turn Screen On: true Timeout (Seconds):60 ]   

You will notice that I have changed the way the notification works for the smartwatch. None of the above will show up on my watch. The only thing I want to show on my watch is a small icon which can be dismissed on request.

Create an icon using AutoWear Manage Floating Icons *(you have to go to the AutoWear app) and test the size and placement on your watch. The icon will draw over any screen, so make sure it contain a command on tap to close it. I used closepoorrange and named the icon poorrange. The size of my icon is 30×30 pixels and it is placed 65% to the right and 20% from the top.

Once you are happy with the size and location – use the AutoWear App action to show the icon and the IF condition to link it to the %HotspotDevice variable.

Cancel

Cancel

  Cancel (90)          A1: AutoNotification Cancel [ Configuration:Id: 55  Cancel All: false Timeout (Seconds):0 ]           A2: AutoWear App [ Configuration:Execute Now: true  Trigger Event: true  Haptic Feedback: true  Name: App  AutoWear Elements: Hide  AutoWear Element Id: poorrange  Turn Screen On: true Timeout (Seconds):60 ] If [ %HotspotDevice ~ Watch ]  

To end the LED blink and remove the floating icon from the watch, I'm going to use a simple AutoNotification Cancel action with the ID of my notification (55) to perform the AutoWear App action which hides the floating icon.

The smartwatch has an additional profile that will remove the floating icon if the icon is pressed. To do this I use the AutoWear Command event 'closepoorrange' then I run a separate task that contains pretty much the same action as the Cancel task.


We hope you enjoy this little creation of ours, and let us know if you think we can make any enhancements! As always, you can download the project by clicking the link below.

Download the Tethering 'No Network' Warning Project File here!

In order to import the tethering 'no network' warnings with Tasker project file, download the above file and save it anywhere in your internal storage. Open up Tasker and check to make sure that "beginner mode" is disabled in the preferences menu. Then, long-press on the "home" icon in the bottom left hand corner and click on "import". Find the prj.xml file you saved earlier, and select it to import it. You will now see a new tab in the bottom row containing all of the profiles and tasks we referenced in this article.



from xda-developers http://ift.tt/2jsjA9l
via IFTTT

PSA: Double Tap to Fast-Forward Rolling Out to YouTube App on Android

Some of my biggest personal pet peeves with the official YouTube app is the inability to set the video playback speed (to plow through slowew instructional videos) and the inability to skip short sections of the video to avoid irrelevant information. Although you can use the seekbar to jump around, on longer videos showcasing something like game play, even small seekbar movements can jump through large sections of the video.

One remedy that people discovered a few months back involved enabling the "Switch Access" accessibility service. Once enabled, the YouTube app would display two additional buttons on both sides of the video that allow you to skip 10 seconds forwards/backwards.

However, for those of us who prefer not to enable needless Accessibility Services, we could not use these buttons. But it appears that a server side switch on the YouTube app (as found on version 11.49.55 for us) makes this happen.

As you can see in the video below, all you need to do is double tap to initiate fast forward/rewind for a 10 second skip.

This change is rolling out via a server side switch, so have some patience.We should note we have not found this feature enabled on later versions of YouTube, such as on version 12.01.54 of the YouTube app, so don't expect to upgrade your YouTube app to gain this functionality. Though it wouldn't hurt to be on the latest version anyways.

While a very small change, this will surely help a lot of content consumers navigate quicker through a video right to the juicy bits. It is also beneficial in case you missed out on some instruction and just need a short rewind. Here's hoping Google also implements speed controls on the mobile app.

Have you received this functionality? Let us know in the comments below!



from xda-developers http://ift.tt/2iEy8lN
via IFTTT

Can Nokia’s Long-Awaited Return Bring Back Confidence and Relevance to the Brand?

Nokia, a brand that most on XDA have been touched by at some point over the years, is finally making a return to the smartphone market since its slow demise in 2011, following an agreement with Microsoft for Nokia devices to sport the Windows Phone OS exclusively.

This was a decision made with good intentions at the time, as Nokia was struggling to keep up with the leading market competitors.

Nokia worked with Microsoft until 2014 when they decided to end manufacturing, and they sold the mobile business to Microsoft, giving birth to the Lumia series which has since slowly died out itself; the line-up  could be rebuilt by a Surface Phone in 2017, as it hasn't seen the renowned success other phones – on all price brackets, running different operating systems – have seen. But now, after 4 years of having the much-beloved brand name tarnished by the rather questionable Lumia series, the license that Microsoft holds has now expired and Nokia has taken this opportunity to give exclusive licensing rights to HMD Global, a Finnish company founded in May 2016 by senior ex-Nokia staff. Since its launch, HMD has only released more basic feature phones with the Nokia brand so the decision to take advantage and make use of the very successful Android OS is going to be a very big step for them. This will not be the first time that a Nokia device will run Google's mobile operating system, due to the rather-forgotten release of the Nokia N1 tablet back in 2015 running Android 5.0, but this will be the first time a Nokia branded phone has carried the OS.

Suggested Reading: Over 100,000 People Pre-Ordered the Nokia 6

While Nokia will no longer be manufacturing the devices, they will very much be involved with the production process as the licensing agreement will keep a member on the board of executives who will set performance requirements for the brand, and help maintain the brand's reputation to prevent any more damage to the name the devices are carrying. Alongside this, HMD have also made the decision to make the new Nokia 6 an exclusive release for China, in hopes of meeting the needs of the rapidly-growing number of smartphone users (which is expected to expand by around 50 million in 2017) and will be marketed by JD.com. Even though the brand is not as popular in the region as its competitors, it holds a market where premium design and product quality are highly valued and if Nokia is known for anything, it is the solid design and reliability of their products.

Many of us living in the West have a love for Nokia that pre-dates the smartphone era, back to a time when high screen resolutions and fancy cameras were nowhere to be seen, but the same cannot be said about developing countries who adopted the mobile technology much later. Because of this, in countries such as India, there is little nostalgia for the brand as the first experience with a Nokia device the population had was alongside both Apple and Android devices that had already excelled in the mobile market by this time — and while Lumia devices were solid performers for their price, they never stood out against its faster, more premium competitors. Despite the decreased attention and popularity Nokia may receive away from the West, they are determined and driven to connect people together from all parts of the world with an ideal to transform future technology to reshape the human experience. With a focus that has always been on pushing boundaries to create new ways of connecting people it is Nokia's vision to invent and develop to create human technology that helps people thrive.

Now onto the device itself

Nokia is making its way back into the mobile market with the launch of the Nokia 6, reaching over 250,000 pre-registrations within the first 24 hours of becoming available, it seems that the love for the brand is still as strong as ever. The Nokia 6 isn't going to provide much competition for the current market leaders such as Samsung's Galaxy series, but will provide an affordable piece of tech without the loss of product quality, which is likely to fit well with the expected increase of mobile users, as newcomers to the smartphone epoch may be a little hasty and less willing to expend a large sum for a device that will, in essence, provide the same functionality as a high-end device such as Apple's iPhone.

This does not mean that we are going to see a release that will drop short of current devices — in fact, it looks like the Nokia 6 will be giving the Xiaomi Redmi 3S, released June 2016, a good run for its money with Nokia also expecting to launch with the Qualcomm Snapdragon 430 chipset, an Octa Core 1.4 GHz Cortex A53 processor and an Adreno 505 GPU. It will also match the 3,000 mAh battery however, the Nokia 6 will be boasting a 16 megapixel rear facing camera rather than the 13 megapixels Xiaomi has to offer. The Nokia device will also be providing 64GB of storage and 4GB RAM over the 2GB from the Redmi 3S and give us a ½" more in the size of the display running a 5.5" full HD Gorilla Glass screen. The release price announced by retailer JD.com is CNY 1699 (about $250), looking to accommodate new users to smartphones, and will be available on January 19.

As new devices from competitors reach the shelves, however, the Nokia 6 might begin looking less appealing — Nokia just got onboard a populated market with cut-throat competition, as the affordable segment has seen some of the biggest developments in recent smartphone history. Today, affordable smartphones are fiercely marketed and have gotten good enough to seriously attract the mainstream, even eating away at "affordable flagships" just a tier or two above them in the price hierarchy. Only time will tell to see if this new release and rekindled approach to licensing and phone production will help stamp Nokia back on the map in the mobile industry, prompting for only more of the products we have come to know and love from the beginning of the mobile phone age.

Do you think Nokia and its Nokia 6 have what it takes to make the brand relevant again? Discuss below!



from xda-developers http://ift.tt/2iup3xi
via IFTTT

Google App Prepares to add Support for making Payments through Google Assistant

Google Assistant is proving to be rather useful with its robust Google services integration. Plus, with the expanding availability of third-party APIs, the platform is shaping up to make for a killer Home Assistant. But the success of Google Assistant does not lie with its more complex functionality, rather it begins and ends with how it can handle the most basic tasks.

Currently, the service lacks the ability to handle to-do lists, reading notifications/texts from your phone, or adding events to your calendar. But from what we can discern from an APK teardown of the latest versions of the Google App, Google's fledgling Home Assistant service seems to be adding one key functionality in the near future: the ability to directly make payments.

Although a teardown can provide valuable information regarding upcoming features, it is entirely possible that these features may not make their way into the final product. Do not take these teardowns as proof that a feature will be added, but rather as a hint of what could be coming.


Making Payments through Google Assistant

Google App version 6.11.13 beta is now rolling out (which you can grab over at APKMirror), but the strings found below have existed for a few versions before this one. Currently, the only functionality that is available to users can be found in the Google Home app, and as you can see – making payments is not one of them.

But as shown in strings reproduced below, the Google Assistant is preparing to add support for making payments through the service.

Google App Teardown

    <string name="assistant_payments_preference">assistantPayments</string>    <string name="assistant_settings_payments_add_new_address">Add new address</string>  <string name="assistant_settings_payments_address_address_line1">Address line 1</string>  <string name="assistant_settings_payments_address_address_line2">Address line 2 (Optional)</string>  <string name="assistant_settings_payments_address_gate_code">Gate code (Optional)</string>  <string name="assistant_settings_payments_address_gate_code_too_long">Max %1$d characters</string>  <string name="assistant_settings_payments_address_list_title">Delivery address</string>  <string name="assistant_settings_payments_address_phone_number">Phone number</string>  <string name="assistant_settings_payments_address_required_field">Required field</string>  <string name="assistant_settings_payments_address_save_error">Error saving address.</string>  <string name="assistant_settings_payments_device_title">Shared devices</string>  <string name="assistant_settings_payments_done_button_text">Done</string>  <string name="assistant_settings_payments_edit_address">Edit address</string>  <string name="assistant_settings_payments_enabled_title">Pay through your Assistant</string>  <string name="assistant_settings_payments_instrument_item_disabled">Disabled</string>  <string name="assistant_settings_payments_instrument_item_expired">Expired</string>  <string name="assistant_settings_payments_instrument_item_inapplicable">Inapplicable</string>  <string name="assistant_settings_payments_instrument_item_needs_fix">Needs fix</string>  <string name="assistant_settings_payments_instrument_item_unknown">Unknown</string>  <string name="assistant_settings_payments_instrument_list_title">Payment method</string>  <string name="assistant_settings_payments_oos_screen_description">Need help? Contact the Google Support Team for assistance</string>  <string name="assistant_settings_payments_oos_screen_title">"Payments isn't currently available on the Google Assistant"</string>  <string name="assistant_settings_payments_save_button_text">Save</string>  <string name="assistant_settings_payments_setup_accept_button_label">Accept</string>  <string name="assistant_settings_payments_setup_device_description_p1">"You'll soon be able to pay for things when you use Google Assistant, including on the following shared devices."</string>  <string name="assistant_settings_payments_setup_device_description_p2">Customize which of your shared devices are allowed to help you with payments and other personal tasks, like your calendar and services. You can also turn "Personal results" on or off later in your Assistant settings. <a href="http://ift.tt/2iumv2f">Learn more</a></string>  <string name="assistant_settings_payments_setup_devices_title">Confirm shared devices</string>  <string name="assistant_settings_payments_setup_instrument_list_title">Choose card</string>  <string name="assistant_settings_payments_setup_next_button_label">Next</string>  <string name="assistant_settings_payments_setup_shipping_address_title">Choose address</string>  <string name="assistant_settings_payments_setup_splash_screen_button_label">Get started</string>  <string name="assistant_settings_payments_setup_splash_screen_subtitle">Set up payment info and addresses for your packages, groceries, and other purchases</string>  <string name="assistant_settings_payments_setup_splash_screen_title">Set up payment &amp; delivery info</string>  <string name="assistant_settings_payments_setup_terms_of_service_title">Terms of Service</string>  <string name="assistant_settings_payments_summary">Manage payment methods and addresses</string>  <string name="assistant_settings_payments_title">Payments</string>  <string name="assistant_settings_payments_update_error">Error while updating payments settings. Please try again.</string>    <string name="common_device_personal_info_permission_summary">Allow this Google Home to read out your private info like your calendar and flights, display your photos on TV, and help you with orders, reservations, and payments</string>    

The string "you'll soon be able to pay for things" when you use Google Assistant indicates the service is not yet live (as none of us using Assistant have found evidence of the service being live), but it soon will be. Plus, you'll be able to specify which Assistant-connected devices will be able to participate in making payments.

In order to make payments, of course, you need to specify what specify a delivery address for your items. Billing is of course handled through Google's APIs for adding payment methods. It'll be interesting to see exactly how this functionality will work – but we're hoping it will work as well as Amazon's Alexa when placing orders through voice.

We have also found evidence that this functionality is at least partially implemented in the APK file, as we have found numerous references to layout files that set up the payment interface. It is possible that the functionality is baked in, but Google is still working on the back end to make the service work before rolling it out to everybody.



from xda-developers http://ift.tt/2jhhyHe
via IFTTT

Google Play Revenue Grew 82% in Q4 2016 YoY; Line and Tinder Dominate Revenue Charts

Apps on our smartphones are essential ingredients of what makes our phones smart in the first place.  Apps and App Stores are big money too. The sheer popularity and usage of smartphones and applications have driven up our needs and as a result, the revenue streams of people involved behind popular apps.

App marketing agency Sensor Tower have released their 'Top Apps of 2016' report, giving us insight into the current top dogs in terms of downloads and revenue. This data is also presented on a combined as well as individual basis.

The report notes that Q4 2016 was a healthy period for app and game developers for iOS and Android who chose to distribute their offerings through the Apple App Store and Google Play Store. This period saw an increase of 67% in net revenue worldwide year-on-year, growing from ~$5.2 Billion in Q4 2015 to ~$8.7 Billion in Q4 2016. Individually, the 60% growth rate for the Apple App Store was lower compared to the 82% growth rate for the Google Play Store, but actual revenue still stood higher for App Store at $5.4 Billion versus the $3.3 Billion for Play Store. A whooping 19.2 Billion downloads were also completed across both the platforms just in Q4 2016!

For the Top Earners of Q4 2016 within the category of "apps" (non-games), the crown is held by popular messaging app LINE. LINE's revenue streams evolve from its core messaging use to a wide gamut of add-on services like sticker packs, social games and even a music streaming service. LINE is the top earner overall and in Play Store, and ranks in on number 2 on the App Store. The second spot on the Play Store is held by Tinder, the popular casual 'dating' app. Apple App Store's highest earner is Netflix, which surprisingly comes out at number 9 on the Play Store. This divide is likely caused by the differences in revenue sharing with Apple and with Google as the Apple App Store is a lot more restrictive on the mediums that apps can use for monetization.

Top Downloads of Q4 2016 are unsurprisingly, some of the most common apps that one can see around. Facebook, WhatsApp, Messenger, Instagram, Snapchat hog the top few spots. Some of the entries on the top list of the Google Play Store should not ideally be as popular due to their borderline-malware nature and detrimentl use-case scenarios. Also (not so) surprisingly, MyJio grabs a spot on the list. MyJio is the app needed to get a free Jio sim card in India (you need to generate a barcode for the sim card request, through the app). This is in line with the vast demand that Reliance Jio did see in India post the demonetization move in the country.

The situation of Q4 2016 with regards revenue and downloads largely extends on to the entire year of 2016. For Google Play download numbers, it's worth noting that pre-installed apps and their subsequent updates are not counted, which is why we do not see any Google-made app not making it to the Play Store top charts list from Sensor Tower.


The insights provided in the report shed light on how the platforms differ from each other and how tightly/loosely they are controlled by the companies in charge. App Store users usually downloaded social media based apps, while Play Store users install vile apps like CM Security and Clean Master, apps that can do more harm than good under the pretext of improving devices. Says a lot, doesn't it?

What are your thoughts on the report? Let us know in the comments below!

Source: Sensor Tower



from xda-developers http://ift.tt/2j0yYqE
via IFTTT

dimanche 15 janvier 2017

XDA-Developers Urges OnePlus to Comply with GPLv2 and Release Kernel Sources

While XDA-Developers, and a large sector of its user base, have been routinely impressed by OnePlus' commitment to supporting the developer community, we've been anxiously awaiting the release of kernel sources for the OnePlus 3/3T since the release of Android Nougat on December 31, 2016.

OnePlus has not provided such sources even though they've already rolled out the release of the official OTA on several countries, and users have been using VPNs or manually installing the update to upgrade their devices as well. While the company was extremely swift in its original release of kernel sources shortly after the device launch, they haven't been as keen to upload their sources since. This isn't a mere inconvenience for the developer community, it's also reprehensible as OnePlus is effectively violating the General Public License by not providing the GPLv2 licensed source code in a timely manner.

Suggested reading: XDA-Developers and the GPL

We are fond of the GPLv2 at the XDA, and I have personally made it my task to call out OEMs who do not comply, from repeat-offenders like Xiaomi to the more disappointing cases like Motorola (and Lenovo). We also do give credit where credit is due, but a late release of the necessary source code does not correct the fact that the sources should be made available as soon as possible. The GPLv2 'requires' companies to release any modifications to the 'GPLed' code base (the Linux kernel) that they ship to their customers. That requirement is what allows communities like XDA to thrive, and the viral nature of the GPLv2 has made Android what it is.. Releasing sources is not just part of the spirit of Android nor for the benefit of developers only, as OnePlus itself has benefited by developing a kind of "developer-friendly" reputation with its devices, the latest of which are informally dubbed the "successor to the Nexus line" by vast numbers of users. While OnePlus has worked with XDA in looking for ways to expand developer support for their devices, as well as helping developers get their hands on hardware, we see this latest behavior on their end as something that goes against the interests of the community and, quite frankly, OnePlus'  best interests as well.

READ: Francisco Franco's Full Statement Regarding OnePlus and Sources

The Linux Kernel is under an utilization license called GPLv2, which, among other rules, requires anyone who modifies, or links proprietary code to GPL licensed functions, and releases the Kernel binary to the public, to release the source code. Any Android OEM is bound by this rule and MUST release the exact same code tree they ship the binary with.

The majority of the OEMs do not comply with this simple rule, and we've fought for years, but little has changed. Names like Meizu, Xiaomi are among the worse. Others release the source code in tarballs, HTC, Samsung and LG. The source code is there, but we have no commit history, no commit messages, no nothing. We can't see in detail what they've done, and bugs introduced are hard to find/fix because we have no context. The best ones are Motorola, Sony. They provide the entire tree + commit history + detailed commit messages, and everything is offered on github so anyone can easily fork/inspect what they've done. Google isn't an OEM, but it's the undisputed champion. They are VERY detailed in what they do and release the sources in a timely fashion. It's just perfect.

One Plus is a mixed bag. They do release their Kernel sources on github, but it's not without its faults:
1 – They usually take some sweet time to update their trees when there's an update. They say it's because the otas aren't yet 100% globally released, so they won't commit before that. It's a very lame excuse;
2 – They have the entire commit history from Qualcomm/CodeAurora, but all their modifications are a big stash of their changes, provide no information what-so-ever, so we have to read their, sometimes, big 50k line commit to understand what they've done. It's bad;
3 – They barely follow any Linux Kernel code standards and sometimes it's hard to read or understand their goals. There are clear and written code practices for Linux open source contributions, they should make an effort to follow them;
4 – They say they are a development friendly company and they pledged for Zero-day Kernel source drops, but they really just go half way, while they do have _extraordinary_ developer support with free hardware, their open source shenanigans hinder it and leave us hanging while they decide it's a good time to publish the source code (or not). It's frustrating needing to constantly remind them about this;

At this point you might think "Why do you care so much?". For starters they gave me free hardware, so I want to work on it. Then their devices (specially the One Plus One and the 3 and 3T) are really amazing. The OPO was being worked on by the Cyanogen OS team, and they really did a terrific job with their open source contributions. They even pushed patches before the otas were released, gave us time to test, get community feedback and sometimes even send them bug reports before the production otas were released. The 3 and 3T are terrific devices, with A LOT of users, and we want One Plus to keep working on new fantastic devices, while being as developer friendly as they think they are.

I sent them, privately, a list with suggestions on how to tackle the points above, which I'll try to condense below:
1 – Kernel source needs to be publicly released as soon as the otas are released, it doesn't matter if it's a 5% roll-out, or 100%. New public binary is out, source needs to be out, period, end of story;
2 – For every code they work on they SHOULD write detailed and separate commits with detailed messages explaining what the code changes are, what they are for, what they fixed/improved and if needed, comparisions of pre-post patch (if it's warranted like power consumption reductions, or performance improvements). Without this we're basically just left in the dark trying to guess what was the goal of the code;
3 – Easy, read the Linux Kernel "how to contribute" docs and follow them. Not only it helps them maintaining better code quality, but it helps us understand the code better;
4 – Stop pretending everything is amazing on their open source movement, and start acting on it. There are a lot of good people trying to work on their products, if you support us with hardware, then do your best with the software too;

I do have to end with a positive note, I can't thank them enough for providing me and others with free hardware. Barely any OEM does this and I hope they keep doing it since that's a differentiation point and gives them a lot of value.

– Francisco Franco

Prominent developers with many followers are speaking out against OnePlus' lack of source releases, with a notable example being XDA Recognized Developer franciscofranco of Franco Kernel fame. He has voiced his frustration on Twitter , and he's not alone — we've also reached out to OnePlus in order to pressure them into releasing the Nougat sources, but there was little our direct contacts could do past passing on the pressure to internal teams. You can read the full statement Francisco Franco provided to XDA by expanding the toggle above. We haven't heard much in the way of explanations from OnePlus, only excuses and expected responses, which is typically the kind of comeback we hear when OEMs are pinned down on why they aren't complying with the GPLv2, which they implicitly agree to follow in exchange for the ability to use the licensed base. If we are to be specific, it doesn't matter whether the Nougat OTA/release has reached global saturation, nor any other excuse, just like it didn't matter that Xiaomi's source code could have tipped future devices; OnePlus is compelled to make GPLv2-licensed sources available upon request, and many members of the Android community have been asking for it.

We can't know for sure what's taking them so long to upload their due sources – after all, the software is already built and released – and the optimist in me hopes that the code will be provided alongside the camera blobs we've been waiting for. That said, we know not to get our expectations up, and OnePlus' actions have been damaging the tremendous progress the OnePlus 3 and 3T have made in terms of developer support. Without Nougat sources, for example, we won't get an official Nougat TWRP ironed out, custom kernels for OxygenOS 4 ROMs won't become available and custom ROM diversity will stagnate and suffer. Moreover, much of the trust and enthusiasm OnePlus has built behind their devices will get irreparably harmed, particularly if the issue persists or such reluctance to comply with the GPLv2 manifests itself in the future.

We hope OnePlus manages to provide their due sources swiftly. While we initially hesitated to publish this article due to the unpredictable nature of this matter, after speaking to key contacts we have reached the conclusion that this might not be reversed without a consolidated outcry from the community. We might be very fond of OnePlus' hardware and many of their practices and community outreach attempts, but we are determined to call out any OEMs' dangerous practices and poor decisions — OnePlus is no different. While we appreciate the quick response times and turnarounds they've provided in the past, this is one of the most sensitive topics for the XDA community and our patience has worn thin.

XDA encourages readers and OnePlus 3/3T users to help make the voice of the community heard through submitting feedback via their form or the OnePlus community app and by messaging OnePlus representatives inquiring about the matter. Please keep all requests respectful, but if you do care about the GPLv2, the spirit of Android, the development community of your OnePlus 3/3T or the company's future among enthusiast circles, please help us out by carrying the message.

Further reading:



from xda-developers http://ift.tt/2jyHe1C
via IFTTT

XDA Spotlight: Abusive Gym Reminder, an Open-Source App that Yells at you if you don’t Workout

Do you like being yelled at? Are army training boot camps your idea of a good time? Does being screamed at make you more motivated? Then we have have just the app for you. Say hello to the open-source Abusive Gym Reminder.

This is an an application whose sole purpose is to send you abusive notifications everyday you do NOT go to the gym. Surprisingly, it actually works – just not how I thought the developer intended it.


Preferences Screen

The Workout Reminder for Masochists

The application is quite simple to use. It starts you off by requesting you to place a marker on Google Maps designating the location of your gym (after the initial setup is complete, you can always return to the settings page and add more gyms if you want.) Next, the application asks you how many days a week you aim to go to the gym. Once you've completed the set-up process, the application will begin monitoring your location to see if you are keeping up on your promise to actually go workout.

Abusive Gym Reminder works by using creating a geo-fence around your gym(s) of choice. The location that you chose during setup acts as the center point of the geo-fence. When your device enters the geo-fence, that tells the application that your device (and by extension, you) has arrived at the gym. The application allows you to specify the radius of the geo-fence circle in the settings; I lowered the default down from 200m to 150m because 200m seemed like a bit overkill considering the size of my gym.

Daily Gym Attendance

When you enter one of the defined geo-fences, the application logs both how many times you enter the area as well as how long you have been present in that area. The application then provides a nice summary of all your historic gym data including your longest gym attendance streaks and the most days you have missed in a row. You can also checkout individual days to see how many times you went to the gym on a given day.

But when you actually miss a gym day is where the real fun begins. As its name implies, the Abusive Gym Reminder will send you a notification with a pre-defined "abusive" message in it that chastises you for neglecting a promised workout. The messages are displayed as notifications and are also displayed in the application's "Inbox". You can also send a "Test" message when you start the application for the first time to see an example. I noticed immediately how customized the notification messages seemed, and it definitely gave the application a very polished feel. Apparently, the messages are taken from an internal database of crowd-sourced verbally abusive comments. You can even submit your own insults on the developer's Github page.

I personally found that the abusive notifications were not too intrusive – only 1 message per day for each day you missed the gym.  The notifications are rather humorous, and after checking out the settings I was pleasantly surprised to find that I could even set the level of "Abuse" that I received each day I forgot to workout. Of course, I set it to the most abusive level because if you are going to abuse someone to go workout – I say do it properly. When I thought about this feature in some detail, I recognized that it's rather cleverly implemented. If, for example, you have kids who are old enough to read, you don't want your phone displaying a string of profanity as long as your mother's arm to ruin their innocence.

The settings for the level of abusiveness are as follows:

  • Passive Aggressive
  • Abusive
  • Abusive (Mature)

Pipit, the developer of this application, has a great sense of humor as when you set the application to its most abusive level the screen text changes to match the new "Mature"  mode as shown below:

You can also customize when you get the notification which nicely coincides with when you were supposed to go the gym – you know for that 'kick 'em while they are down' affect. On a more practical note though, not everyone goes to the gym at the same time so having the message pop up in the morning when you usually go the gym in the evening wouldn't make sense, but the settings are there so if you want some abuse in the morning to motivate your afternoon or evening gym sessions then Abusive Gym Reminders has got your back.


Hard to Take Seriously

Weekly Details Screen – A Bit Confusing

There are a few usability issues that I had with "Abusive Gym Reminder" application though. For instance, you can edit gym data for the current day and specify if it was a gym day or not – however it isn't immediately obvious how to do so. I accidentally discovered that you need to tap on the circle day icons on the main screen. When you do so, up pops a little box that allows you to change values, however on my test device (the Nexus 6P) –  the text is quite small and you have to tap just right to get the values to change. I also noticed that no matter what day I tapped on – be it Wednesday or Thursday – only Friday's box would show. At the time of writing it was a Friday, which makes sense but was a little confusing at first.

Overall, I enjoyed using this application – but sadly for the wrong reasons. I started missing the gym on purpose and setting up "Fake" gyms in countries that I would not be visiting just so I could see what the next message would say. It was a laugh to see your phone giving you some abusive message and I thoroughly enjoyed it. In a weird way, it made my phone feel like one of those old grandpa characters on television – yelling at the kids to get off the lawn. I ended up setting the application to send the messages before I was supposed to go to the gym, so it kinda worked as a kick in the butt to get myself down to the gym that day, rather than its intended purpose which is to berate me for already missing my workout. But hey, at least it gets you to the gym, right?

I'll wrap this XDA Spotlight up by saying you should definitely check this application out if you are a serial gym procrastinator. It does indeed give you a little extra push to get yourself to the gym, at least in my experience. If you are big into fitness and you regularly go to the gym already, then this application will probably only serve to give you a chuckle each day. It doesn't store enough detailed information about your gym visits to be any value to gym rats, but for us mortals who have trouble just getting out of bed on a wet cold day, it could give us just the right amount of motivation to make it to the gym.


Download Abusive Gym Reminder from the Google Play Store!



from xda-developers http://ift.tt/2iukgHc
via IFTTT