Showing posts with label know. Show all posts
Showing posts with label know. Show all posts

Wednesday, December 14, 2016

You’re invited to submit an app to the Google Fit Developer Challenge

With the recent launch of the Google Fit platform, we hope to spur innovation in the world of fitness apps and devices that encourage users to have a more active lifestyle. To expand the ecosystem and help users get a more comprehensive view of their fitness, we’re excited to announce the Google Fit Developer Challenge in partnership with adidas, Polar, and Withings.
We’re inviting you to create and showcase an app, or update an existing app, that integrates with Google Fit. The submission deadline is February 17, 2015. Our selected judges will choose up to six new apps and six existing apps for Fit, as the winners. The judges are looking for fitness apps that are innovative, fun to use, keep users coming back, offer users real benefit, and meet the Android design and quality guidelines.

Challenge winners will be featured on Google Play in front of Android users around the world. Runners-ups will also receive prizes, in the form of smart devices from Google, adidas, Polar, and Withings, so that they can continue to tinker and improve their fitness apps with the latest hardware.

Check out the challenge website to find out how to enter*. You will also find some helpful resources to find inspiration. We encourage you to join the Google Fit Developer Community on Google+ to discuss your ideas and the challenge.

* The challenge is open to registered Google Play developers in the US, UK, France, Germany, India, Israel, Hong Kong, Singapore, South Korea, Japan, and Taiwan who are over the age of 18 (or the age of majority in their country). For the full terms and conditions, read the official rules.

Posted by Angana Ghosh, Product Manager, Google Fit
Read More..

Saturday, June 18, 2016

HTC One M9 What do we know so far


The HTC One M9 launch day is just around the corner. Weve heard a lot of rumours already and saw a different renders presenting the concepts of the incoming HTC flag-ship device. The question is - what do we really know so far?

The answer is vague. We know all, and we know nothing. Current HTC One M9 specification looks reliable, but after all we might be surprised by the HTC. So lets take a look at the most "possible" details.

The HTC One M9 model ID (MID) will start with 0PJA. Per example, its highly possible that the European WWE (401) variant will have 0PJA10000 MID number.

Screen - some said its going to be 5,5", some 5,2" but in the end it seems that HTC ended up with the same screen size as in the HTC One M8 - 5.0" with Full HD resolution and Super LCD3 technology, which seems to be a way better solution rather than using QHD display, mostly for performance reasons. Technically you have no chance to see the difference between the FHD and QHD displays in a real life. Under the microscope - sure. But in fact the QHD resolution looks better only on paper as a raw numbers. Marketing effect? Yes, sadly.
www.corninggorillaglass.com

Some sources said that the M9 screen is going to be covered with the new Corning® Gorilla® Glass 4 technology. This is a great news, because the 4th generation of the Gorilla Glass brought a couple of improvements:

• Enhanced retained strength after use
• High resistance to scratch and sharp contact damage
• Improved drop performance
• Superior surface quality

SoC - already well known Qualcomm Snapdragon 810 (MSM8994) with a CPU running at 4 x 2.0 GHz + 4 x 1.5 GHz. The Qualcomm® Snapdragon™ 810 processor is the "ultimate connected computing processor, with 64-bit computing on 8 CPU cores and leading modem capabilities, is designed to enable the most advanced connected mobile user experiences, including streaming 4K Ultra HD video, sharing top-quality digital photos, on-line 3D gaming, and virtually seamless communications, along with outstanding battery life for premium smartphones and tablets". And its now only what Qualcomm says about the new S810. Some first benchmarks already proved how powerful this SoC is. Also, keep in mind its equipped with new Adreno 430 GPU and improved Hexagon DSP multithreaded CPU architecture -  V56 DSP (up to 800MHz) vs Hexagon V50 on the HTC One M8.
RAM Memory - we already know that the HTC One M9 is going to have 3GB LPDDR4 (Low Power) RAM memory. It is a significant improvement versus HTC One M8 equipped 2 GB LPDDR3 RAM memory. Its worth to say that Snapdragon allows to use LPDDR4 1600MHz Dual-channel 64-bit (25.6GBps) memory vs. 933 MHz on the LPDDR3 technology.

ROM Memory - two variants: 32GB and 64GB. And of course a possibility to insert a microSD card. Lets hope HTC decided to use eMMC 5.0 SD 3.0 (UHS-I) this time. In the HTC One M8 - My point of (re)view I wrote that Snapdragon 801 added support for eMMC 5.0 (embedded Multi-Media Controller) storage technology but HTC decided to use older, eMMC 4.51 technology in the HTC One M8.

Communication - VoLTE, Carrier Aggregation and LTE Category 6 up to 300 Mbps for download and 50 Mbps for upload. As a comparison lets notice that the HTC One M8 is equipped with LTE modem category 4.

Rear camera - 20.7 MPx with Dual LED Flash.

Front camera - 4 MPx with UltraPixel technology

Operating system - Android 5.0.2 with a brand new HTC Sense 7.0 user interface.

Battery - we had a 2,600 mAh battery on the HTC One M8 and now we have 2840 mAh on the HTC One M9. Not a huge change, but considering the fact that the screen size is the same we might actually notice some improvement. Also, the HTC Sense 7.0 might be more battery friendly than HTC Sense 6.0.

The HTC One M9 will come with a BoomSound of course. Release date? March, the 1st!

Want to chip in?
What about Android Revolution HD for the HTC One M9? Well, I hope to start working on it as soon as possible. For that I need a HTC One M9 software (system dump) and a device itself. I cant sell my HTC One M8 so any contributions towards the upgrade are very much appreciated. If you like my work - just consider to chip in. Also thank you for your great support and letting Android Revolution HD be the most downloaded and desired custom ROM for almost 5 years! With more then 6 millions downloads on the counter I will keep working hard on the stuff you love.

Click here to lend your support to: HTC One M9 Piggy Bank and make a donation at pledgie.com !


Do you have any questions or comments? Feel free to share! Also, if you like this article, please use media sharing buttons (Twitter, G+, Facebook) below this post!


For latest news follow Android Revolution HD on popular social platforms:

Read More..

Friday, February 26, 2016

Custom InfoWindow for Google Maps Android API v2


To create Custom InfoWindow for Google Maps Android API v2:

- Make your Activity implements GoogleMap.InfoWindowAdapter.

- Override getInfoWindow(Marker marker) and getInfoContents(Marker marker).

The API will first call getInfoWindow(Marker) and if null is returned, it will then call getInfoContents(Marker). If this also returns null, then the default info window will be used.

The first of these (getInfoWindow()) allows you to provide a view that will be used for the entire info window. The second of these (getInfoContents()) allows you to just customize the contents of the window but still keep the default info window frame and background.

- setInfoWindowAdapter(this).


Modify MapsActivity.java from last example "Make GoogleMaps marker draggabe and detect moving marker".
package com.blogspot.android_er.androidstudiomapapp;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback,
GoogleMap.OnMapClickListener, GoogleMap.OnMapLongClickListener,
GoogleMap.OnMarkerDragListener, GoogleMap.InfoWindowAdapter {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

}

/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnMapClickListener(this);
mMap.setOnMapLongClickListener(this);
mMap.setOnMarkerDragListener(this);
mMap.setInfoWindowAdapter(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_addmarkers:
addMarker();
return true;
case R.id.maptypeHYBRID:
if(mMap != null){
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
return true;
}
case R.id.maptypeNONE:
if(mMap != null){
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
return true;
}
case R.id.maptypeNORMAL:
if(mMap != null){
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
return true;
}
case R.id.maptypeSATELLITE:
if(mMap != null){
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
return true;
}
case R.id.maptypeTERRAIN:
if(mMap != null){
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
return true;
}
case R.id.menu_legalnotices:
String LicenseInfo = GoogleApiAvailability
.getInstance()
.getOpenSourceSoftwareLicenseInfo(MapsActivity.this);
AlertDialog.Builder LicenseDialog =
new AlertDialog.Builder(MapsActivity.this);
LicenseDialog.setTitle("Legal Notices");
LicenseDialog.setMessage(LicenseInfo);
LicenseDialog.show();
return true;
case R.id.menu_about:
AlertDialog.Builder aboutDialogBuilder =
new AlertDialog.Builder(MapsActivity.this);
aboutDialogBuilder.setTitle("About Me")
.setMessage("http://android-er.blogspot.com");

aboutDialogBuilder.setPositiveButton("visit",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String url = "http://android-er.blogspot.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});

aboutDialogBuilder.setNegativeButton("Dismiss",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});

AlertDialog aboutDialog = aboutDialogBuilder.create();
aboutDialog.show();

return true;
}
return super.onOptionsItemSelected(item);
}

private void addMarker(){
if(mMap != null){

//create custom LinearLayout programmatically
LinearLayout layout = new LinearLayout(MapsActivity.this);
layout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
layout.setOrientation(LinearLayout.VERTICAL);

final EditText titleField = new EditText(MapsActivity.this);
titleField.setHint("Title");

final EditText latField = new EditText(MapsActivity.this);
latField.setHint("Latitude");
latField.setInputType(InputType.TYPE_CLASS_NUMBER
| InputType.TYPE_NUMBER_FLAG_DECIMAL
| InputType.TYPE_NUMBER_FLAG_SIGNED);

final EditText lonField = new EditText(MapsActivity.this);
lonField.setHint("Longitude");
lonField.setInputType(InputType.TYPE_CLASS_NUMBER
| InputType.TYPE_NUMBER_FLAG_DECIMAL
| InputType.TYPE_NUMBER_FLAG_SIGNED);

layout.addView(titleField);
layout.addView(latField);
layout.addView(lonField);

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Add Marker");
builder.setView(layout);
AlertDialog alertDialog = builder.create();

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
boolean parsable = true;
Double lat = null, lon = null;

String strLat = latField.getText().toString();
String strLon = lonField.getText().toString();
String strTitle = titleField.getText().toString();

try{
lat = Double.parseDouble(strLat);
}catch (NumberFormatException ex){
parsable = false;
Toast.makeText(MapsActivity.this,
"Latitude does not contain a parsable double",
Toast.LENGTH_LONG).show();
}

try{
lon = Double.parseDouble(strLon);
}catch (NumberFormatException ex){
parsable = false;
Toast.makeText(MapsActivity.this,
"Longitude does not contain a parsable double",
Toast.LENGTH_LONG).show();
}

if(parsable){

LatLng targetLatLng = new LatLng(lat, lon);
MarkerOptions markerOptions =
new MarkerOptions().position(targetLatLng).title(strTitle);

markerOptions.draggable(true);

mMap.addMarker(markerOptions);
mMap.moveCamera(CameraUpdateFactory.newLatLng(targetLatLng));

}
}
});
builder.setNegativeButton("Cancel", null);

builder.show();
}else{
Toast.makeText(MapsActivity.this, "Map not ready", Toast.LENGTH_LONG).show();
}
}

@Override
public void onMapClick(LatLng latLng) {
Toast.makeText(MapsActivity.this,
"onMapClick: " + latLng.latitude + " : " + latLng.longitude,
Toast.LENGTH_LONG).show();
}

@Override
public void onMapLongClick(LatLng latLng) {
Toast.makeText(MapsActivity.this,
"onMapLongClick: " + latLng.latitude + " : " + latLng.longitude,
Toast.LENGTH_LONG).show();

//Add marker on LongClick position
MarkerOptions markerOptions =
new MarkerOptions().position(latLng).title(latLng.toString());
markerOptions.draggable(true);

mMap.addMarker(markerOptions);
}


@Override
public void onMarkerDragStart(Marker marker) {
marker.setTitle(marker.getPosition().toString());
marker.showInfoWindow();
marker.setAlpha(0.5f);
}

@Override
public void onMarkerDrag(Marker marker) {
marker.setTitle(marker.getPosition().toString());
marker.showInfoWindow();
marker.setAlpha(0.5f);
}

@Override
public void onMarkerDragEnd(Marker marker) {
marker.setTitle(marker.getPosition().toString());
marker.showInfoWindow();
marker.setAlpha(1.0f);
}

@Override
public View getInfoWindow(Marker marker) {
return null;
//return prepareInfoView(marker);
}


@Override
public View getInfoContents(Marker marker) {
//return null;
return prepareInfoView(marker);

}


private View prepareInfoView(Marker marker){
//prepare InfoView programmatically
LinearLayout infoView = new LinearLayout(MapsActivity.this);
LinearLayout.LayoutParams infoViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
infoView.setOrientation(LinearLayout.HORIZONTAL);
infoView.setLayoutParams(infoViewParams);

ImageView infoImageView = new ImageView(MapsActivity.this);
//Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
Drawable drawable = getResources().getDrawable(android.R.drawable.ic_dialog_map);
infoImageView.setImageDrawable(drawable);
infoView.addView(infoImageView);

LinearLayout subInfoView = new LinearLayout(MapsActivity.this);
LinearLayout.LayoutParams subInfoViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
subInfoView.setOrientation(LinearLayout.VERTICAL);
subInfoView.setLayoutParams(subInfoViewParams);

TextView subInfoLat = new TextView(MapsActivity.this);
subInfoLat.setText("Lat: " + marker.getPosition().latitude);
TextView subInfoLnt = new TextView(MapsActivity.this);
subInfoLnt.setText("Lnt: " + marker.getPosition().longitude);
subInfoView.addView(subInfoLat);
subInfoView.addView(subInfoLnt);
infoView.addView(subInfoView);

return infoView;
}

}


Reference: https://developers.google.com/maps/documentation/android-api/infowindows

Next:
- Detect user click on InfoWindow, by implementing GoogleMap.OnInfoWindowClickListener()


~ Step-by-step of Android Google Maps Activity using Google Maps Android API v2, on Android Studio

Read More..

Monday, March 3, 2014

Pizza Hut Would Like You To Know That Real People Will Be Tossing Your Pie Dough


In what will surely be a blow to the brewing plans of our future robot overlords, Pizza Hut is touting its “new” hand-tossed pizza as the Next Big Thing In Eating Pizza. See? We don’t need your robotic tossing, machines. We humans aren’t perfect, and neither will that hand-tossed dough be, explains The Hut. Take that, armies of the artificially intelligent oppressors!


Anyway, hot off the heels of The Hut’s mind-blowing news that it was going to try that whole “selling single slices of pizza thing,” the company is now telling everyone that it’s got a new hand-tossed pizza, touched by people like me and you.


This new version of its hand-tossed pizza has a “lighter, airier crust, cheese blended with five Italian flavors and now brushed with garlic-buttery goodness,” according to the new ads (via AdAge). The sauce and topping options will stay the same.


Pizza Hut says everything about this pizza is in no way like anything else ever.


“[The new pizza is] completely different,” the chain’s Chief Marketing Officer Carrie Walsh tells AdAge. “It has imperfections. Customers definitely noticed a difference. We believe it’s a game-changer.”


Now’s the time when anyone who ever worked in a pizza joint pre-Pizza Hut/Domino’s/Papa John’s etc. (hi, Dad!) starts scoffing and saying, “Back in my day, it was ALL hand-tossed pizzas! None of this mechanical tossing by robots or whatever it is they have doing all the work these days!”


Yeah, take that, future robot overlords! We’re not going down that easy and we will defy you with pizza!


Pizza Hut Rolls Out ‘Game Changer’: Pie With Imperfections [AdAge]


/

by Mary Beth Quirk via Consumerist
Read More..