Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ dependencies {
})
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:recyclerview-v7:25.0.1'
// TODO (3) Add play-services-places and play-services-location dependencies
compile 'com.google.android.gms:play-services-places:9.8.0'
compile 'com.google.android.gms:play-services-location:9.8.0'
testCompile 'junit:junit:4.12'
}
8 changes: 5 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">

<!-- TODO (1) Add meta-data tag with API key -->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="insert-your-api-key-here" />

<activity android:name="com.example.android.shushme.MainActivity">
<intent-filter>
Expand All @@ -25,6 +27,6 @@

</application>

<!-- TODO (2) Add uses-permission tags for INTERNET and ACCESS_FINE_LOCATION -->

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
100 changes: 94 additions & 6 deletions app/src/main/java/com/example/android/shushme/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,33 @@
* limitations under the License.
*/

import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.places.Places;

public class MainActivity extends AppCompatActivity implements
ConnectionCallbacks,
OnConnectionFailedListener {

// Constants
public static final String TAG = MainActivity.class.getSimpleName();
private static final int PERMISSIONS_REQUEST_FINE_LOCATION = 111;

// Member variables
private PlaceListAdapter mAdapter;
Expand All @@ -46,12 +64,82 @@ protected void onCreate(Bundle savedInstanceState) {
mAdapter = new PlaceListAdapter(this);
mRecyclerView.setAdapter(mAdapter);

// TODO (4) Create a GoogleApiClient with the LocationServices API and GEO_DATA_API

// Build up the LocationServices API client
// Uses the addApi method to request the LocationServices API
// Also uses enableAutoManage to automatically when to connect/suspend the client
GoogleApiClient client = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.enableAutoManage(this, this)
.build();

}

/***
* Called when the Google API Client is successfully connected
*
* @param connectionHint Bundle of data provided to clients by Google Play services
*/
@Override
public void onConnected(@Nullable Bundle connectionHint) {
Log.i(TAG, "API Client Connection Successful!");
}

/***
* Called when the Google API Client is suspended
*
* @param cause cause The reason for the disconnection. Defined by constants CAUSE_*.
*/
@Override
public void onConnectionSuspended(int cause) {
Log.i(TAG, "API Client Connection Suspended!");
}

/***
* Called when the Google API Client failed to connect to Google Play Services
*
* @param result A ConnectionResult that can be used for resolving the error
*/
@Override
public void onConnectionFailed(@NonNull ConnectionResult result) {
Log.e(TAG, "API Client Connection Failed!");
}

// TODO (5) Override onConnected, onConnectionSuspended and onConnectionFailed for GoogleApiClient
// TODO (7) Override onResume and inside it initialize the location permissions checkbox
// TODO (8) Implement onLocationPermissionClicked to handle the CheckBox click event
// TODO (9) Implement the Add Place Button click event to show a toast message with the permission status
/***
* Button Click event handler to handle clicking the "Add new location" Button
*
* @param view
*/
public void onAddPlaceButtonClicked(View view) {
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, getString(R.string.need_location_permission_message), Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(this, getString(R.string.location_permissions_granted_message), Toast.LENGTH_LONG).show();
}

@Override
public void onResume() {
super.onResume();

// Initialize location permissions checkbox
CheckBox locationPermissions = (CheckBox) findViewById(R.id.location_permission_checkbox);
if (ActivityCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
locationPermissions.setChecked(false);
} else {
locationPermissions.setChecked(true);
locationPermissions.setEnabled(false);
}
}

public void onLocationPermissionClicked(View view) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSIONS_REQUEST_FINE_LOCATION);
}
}
39 changes: 37 additions & 2 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,49 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</LinearLayout>

<!-- TODO (6) Add a LinearLayout that contains a checkbox to grant the location permissions
and set the checkbox click listener to call onLocationPermissionClicked -->
<LinearLayout
Copy link

@bernatik bernatik Jun 2, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One little optimization.
We can use just a Checkbox without any Layout

<CheckBox android:id="@+id/location_permission_checkbox" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/checkbox_location_permission" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:layout_marginTop="12dp" android:button="@null" android:drawablePadding="8dp" android:drawableLeft="@drawable/ic_my_location_primary_24dp" android:drawableStart="@drawable/ic_my_location_primary_24dp" android:drawableRight="?android:attr/listChoiceIndicatorMultiple" android:drawableEnd="?android:attr/listChoiceIndicatorMultiple" android:onClick="onLocationPermissionClicked"/>

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="4dp"
android:paddingRight="8dp"
android:paddingTop="4dp"
android:src="@drawable/ic_my_location_primary_24dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/location_permissions"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@android:color/black" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<CheckBox
android:id="@+id/location_permission_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp"
android:onClick="onLocationPermissionClicked" />

</RelativeLayout>
</LinearLayout>


<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:background="@color/colorPrimary"
android:onClick="onAddPlaceButtonClicked"
android:text="@string/add_new_location"
android:textAppearance="@style/TextAppearance.AppCompat.Button"
android:textColor="@android:color/white" />
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
<string name="app_name">ShushMe</string>
<string name="add_new_location">Add new location</string>
<string name="location_list">Locations</string>
<string name="need_location_permission_message">You need to enable location permissions first</string>
<string name="location_permissions_granted_message">Location Permissions Granted</string>
<string name="setting_enabled" translatable="false">EnabledSetting</string>
<string name="settings_label">Settings</string>
<string name="location_permissions">Location Permissions</string>
<string name="enable_geofences">Enable Geofences</string>
</resources>