diff --git a/app/build.gradle b/app/build.gradle index 1a166cd..72f336d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,15 +1,44 @@ apply plugin: 'com.android.application' +apply plugin: 'io.fabric' -android { - compileSdkVersion 20 - buildToolsVersion '26.0.2' +buildscript { + repositories { + maven { url 'https://maven.fabric.io/public' } + } + + dependencies { + classpath 'io.fabric.tools:gradle:1.+' + } +} +repositories { + maven { url 'https://maven.fabric.io/public' } +} + +android { + compileSdkVersion 26 + buildToolsVersion "26.0.2" defaultConfig { applicationId "com.ubidots.ubidots" - minSdkVersion 14 - targetSdkVersion 20 + minSdkVersion 19 + targetSdkVersion 26 versionCode 1 versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + multiDexEnabled true + } + useLibrary 'org.apache.http.legacy' + packagingOptions { + exclude 'META-INF/DEPENDENCIES.txt' + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/NOTICE.txt' + exclude 'META-INF/NOTICE' + exclude 'META-INF/LICENSE' + exclude 'META-INF/DEPENDENCIES' + exclude 'META-INF/notice.txt' + exclude 'META-INF/license.txt' + exclude 'META-INF/dependencies.txt' + exclude 'META-INF/LGPL2.1' } buildTypes { release { @@ -20,8 +49,17 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.google.android.gms:play-services:5.0.89' - compile 'com.android.support:support-v4:20.0.+' - compile 'com.google.code.gson:gson:2.2.4' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.google.android.gms:play-services-maps:11.4.2' + compile 'com.google.android.gms:play-services-location:11.4.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2' + compile 'org.apache.httpcomponents:httpclient-android:4.3.5' + compile('com.crashlytics.sdk.android:answers:1.4.1@aar') { + transitive = true; + } } diff --git a/app/fabric.properties b/app/fabric.properties new file mode 100644 index 0000000..c960705 --- /dev/null +++ b/app/fabric.properties @@ -0,0 +1,3 @@ +#Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public. +#Mon Oct 23 19:44:05 CDT 2017 +apiSecret= diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 52f6c61..ba4ad01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,11 @@ - + package="com.ubidots.ubidots"> + @@ -20,18 +24,15 @@ - - + @@ -47,10 +48,19 @@ android:name=".UbidotsActivity" android:label="@string/title_activity_ubidots" > - + + android:name="com.google.android.geo.API_KEY" + android:value="@string/google_maps_key" /> + + - - + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/ubidots/ubidots/MainActivity.java b/app/src/main/java/com/ubidots/ubidots/MainActivity.java index a481d16..f97229e 100644 --- a/app/src/main/java/com/ubidots/ubidots/MainActivity.java +++ b/app/src/main/java/com/ubidots/ubidots/MainActivity.java @@ -3,31 +3,40 @@ import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; +import android.app.FragmentTransaction; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatActivity; import com.ubidots.ubidots.fragments.BrowserFragment; import com.ubidots.ubidots.fragments.MainFragment; +import com.crashlytics.android.answers.Answers; +import io.fabric.sdk.android.Fabric; + +//public class MainActivity extends AppCompatActivity implements MainFragment.MainFragmentButtonsInterface { public class MainActivity extends Activity implements MainFragment.MainFragmentButtonsInterface { // We want to know if the user has logged in before private SharedPreferences mSharedPreferences; private boolean mUserFirstTime; + private boolean isUserLoggedIn; private FragmentManager mFragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Fabric.with(this, new Answers()); setContentView(R.layout.activity_main); mFragmentManager = getFragmentManager(); // Get the preference to check if the user has logged in previously mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); mUserFirstTime = mSharedPreferences.getBoolean(Constants.FIRST_TIME, true); + //isUserLoggedIn = mSharedPreferences.getBoolean(Constants.FIRST_TIME, false); - if (savedInstanceState == null) { + /* if (savedInstanceState == null) { if (mUserFirstTime) { MainFragment mainFragment = new MainFragment(); getFragmentManager() @@ -39,7 +48,37 @@ protected void onCreate(Bundle savedInstanceState) { startActivity(ubidotsIntent); finish(); } + }*/ + /*if (savedInstanceState == null) { + if(!isUserLoggedIn) { + MainFragment mainFragment = new MainFragment(); + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.add(R.id.fragment_container, mainFragment); + fragmentTransaction.commit(); + Intent ubidotsIntent = new Intent(this, UbidotsActivity.class); + ubidotsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(ubidotsIntent); + finish(); + } + + } +*/ + if (savedInstanceState == null) { + if (mUserFirstTime) { + MainFragment mainFragment = new MainFragment(); + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.add(R.id.fragment_container, mainFragment); + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); + } else { + Intent ubidotsIntent = new Intent(this, UbidotsActivity.class); + startActivity(ubidotsIntent); + finish(); + } } + } // Method from MainFragment diff --git a/app/src/main/java/com/ubidots/ubidots/UbidotsActivity.java b/app/src/main/java/com/ubidots/ubidots/UbidotsActivity.java index cfc10fd..d65b3b0 100644 --- a/app/src/main/java/com/ubidots/ubidots/UbidotsActivity.java +++ b/app/src/main/java/com/ubidots/ubidots/UbidotsActivity.java @@ -3,7 +3,6 @@ import android.app.ActionBar; import android.app.Activity; import android.app.DialogFragment; - import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; @@ -20,9 +19,10 @@ import android.net.ConnectivityManager; import android.net.Uri; import android.os.Bundle; - import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -31,13 +31,16 @@ import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; +import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; +import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.ubidots.ubidots.fragments.ChangePushTimeFragment; @@ -45,8 +48,7 @@ import java.lang.reflect.Field; -public class UbidotsActivity extends Activity implements - ChangePushTimeFragment.DialogListener { +public class UbidotsActivity extends AppCompatActivity implements ChangePushTimeFragment.DialogListener,OnMapReadyCallback { // Preferences private SharedPreferences mSharedPreferences; private SharedPreferences.Editor mEditor; @@ -102,10 +104,8 @@ protected void onCreate(Bundle savedInstanceState) { mEditor = mSharedPreferences.edit(); // Get preferences variables - boolean firstTime = - mSharedPreferences.getBoolean(Constants.FIRST_TIME, true); - mAlreadyRunning = - mSharedPreferences.getBoolean(Constants.SERVICE_RUNNING, false); + boolean firstTime = mSharedPreferences.getBoolean(Constants.FIRST_TIME, true); + mAlreadyRunning = mSharedPreferences.getBoolean(Constants.SERVICE_RUNNING, false); mTimeToPush = mSharedPreferences.getInt(Constants.PUSH_TIME, 1); // Set the text at the left of the Switch @@ -124,8 +124,39 @@ protected void onCreate(Bundle savedInstanceState) { // Check if Google Maps is installed if (isGoogleMapsInstalled()) { // Instantiate the fragment containing the map in the layout - mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); - + //mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); + //mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)); + MapFragment mapFragment = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)); + final UbidotsActivity activity = this; + mapFragment.getMapAsync(this); + + mapFragment.getMapAsync(new OnMapReadyCallback() + { + @Override + public void onMapReady(GoogleMap googleMap) + { + mGoogleMap = googleMap; + if (mGoogleMap == null) + { + Toast.makeText(getApplicationContext(), "Unable to open Google map. Unable to continue", Toast.LENGTH_LONG).show(); + return; + } + try + { + //For customizing styles tweak res/raw/style_json.json https://mapstyle.withgoogle.com/ + boolean success = mGoogleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(activity, R.raw.style_json)); + if (!success) + { + //dbglog.Log("Style parsing failed."); + System.out.println("Style parsing failed."); + } + } catch (Exception e) + { + //dbglog.Log("Style parsing failed."); + System.out.println("Style parsing failed."); + } + } + }); // Get the location given by the system LocationManager location = (LocationManager) getSystemService(LOCATION_SERVICE); @@ -152,7 +183,11 @@ public void onProviderDisabled(String provider) { } }; // Set the listener to the location manager - location.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); + try { + location.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); + } catch (SecurityException e) { + e.printStackTrace(); + } } // Update the text inside the button with the time to push @@ -341,4 +376,20 @@ public void onReceive(Context context, Intent intent) { } } } + + + @Override + public void onMapReady(GoogleMap map) { + // DO WHATEVER YOU WANT WITH GOOGLEMAP + map.setMapType(GoogleMap.MAP_TYPE_HYBRID); + try { + map.setMyLocationEnabled(true); + } catch (SecurityException e) { + e.printStackTrace(); + } + map.setTrafficEnabled(true); + map.setIndoorEnabled(true); + map.setBuildingsEnabled(true); + map.getUiSettings().setZoomControlsEnabled(true); + } } diff --git a/app/src/main/java/com/ubidots/ubidots/VerificationActivity.java b/app/src/main/java/com/ubidots/ubidots/VerificationActivity.java index 436e908..c98de0d 100644 --- a/app/src/main/java/com/ubidots/ubidots/VerificationActivity.java +++ b/app/src/main/java/com/ubidots/ubidots/VerificationActivity.java @@ -3,10 +3,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; -import android.widget.Button; import android.widget.ImageView; diff --git a/app/src/main/java/com/ubidots/ubidots/fragments/BrowserFragment.java b/app/src/main/java/com/ubidots/ubidots/fragments/BrowserFragment.java index 178fa3f..a6d273a 100644 --- a/app/src/main/java/com/ubidots/ubidots/fragments/BrowserFragment.java +++ b/app/src/main/java/com/ubidots/ubidots/fragments/BrowserFragment.java @@ -1,10 +1,10 @@ package com.ubidots.ubidots.fragments; +import android.app.Fragment; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; -import android.app.Fragment; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; @@ -13,9 +13,9 @@ import android.webkit.WebView; import android.webkit.WebViewClient; -import com.ubidots.ApiClient; -import com.ubidots.DataSource; -import com.ubidots.Variable; +import com.ubidots.ubidots.ApiClient; +import com.ubidots.ubidots.DataSource; +import com.ubidots.ubidots.Variable; import com.ubidots.ubidots.Constants; import com.ubidots.ubidots.R; import com.ubidots.ubidots.VerificationActivity; diff --git a/app/src/main/java/com/ubidots/ubidots/fragments/MainFragment.java b/app/src/main/java/com/ubidots/ubidots/fragments/MainFragment.java index 8fb5f4f..dca7e37 100644 --- a/app/src/main/java/com/ubidots/ubidots/fragments/MainFragment.java +++ b/app/src/main/java/com/ubidots/ubidots/fragments/MainFragment.java @@ -1,14 +1,15 @@ package com.ubidots.ubidots.fragments; import android.app.Activity; -import android.os.Bundle; import android.app.Fragment; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import com.ubidots.ubidots.R; + public class MainFragment extends Fragment { public interface MainFragmentButtonsInterface { public void onLoginButtonClick(Fragment fragment); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3b40208..0923b82 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,11 @@ \ No newline at end of file + tools:ignore="MergeRootFrame"> + + \ No newline at end of file diff --git a/app/src/main/res/menu/ubidots.xml b/app/src/main/res/menu/ubidots.xml index dbe1584..a6e2467 100644 --- a/app/src/main/res/menu/ubidots.xml +++ b/app/src/main/res/menu/ubidots.xml @@ -1,14 +1,15 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + tools:context="com.ubidots.ubidots.UbidotsActivity"> + app:showAsAction="collapseActionView" /> + app:showAsAction="collapseActionView" /> diff --git a/app/src/main/res/raw/fontawesome.ttf b/app/src/main/res/raw/fontawesome.ttf new file mode 100644 index 0000000..e89738d Binary files /dev/null and b/app/src/main/res/raw/fontawesome.ttf differ diff --git a/app/src/main/res/raw/icomoon.ttf b/app/src/main/res/raw/icomoon.ttf new file mode 100644 index 0000000..b71c7ee Binary files /dev/null and b/app/src/main/res/raw/icomoon.ttf differ diff --git a/app/src/main/res/raw/style_json.json b/app/src/main/res/raw/style_json.json new file mode 100644 index 0000000..decf590 --- /dev/null +++ b/app/src/main/res/raw/style_json.json @@ -0,0 +1,11 @@ +[ + { + "featureType": "poi", + "elementType": "labels", + "stylers": [ + { + "visibility": "off" + } + ] + } +] \ No newline at end of file diff --git a/app/src/main/res/values/google_maps_api.xml b/app/src/main/res/values/google_maps_api.xml new file mode 100644 index 0000000..0006c76 --- /dev/null +++ b/app/src/main/res/values/google_maps_api.xml @@ -0,0 +1,7 @@ + + + + diff --git a/build.gradle b/build.gradle index 21eeba9..f3b8a90 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + repositories { + google() jcenter() } dependencies { @@ -14,6 +16,11 @@ buildscript { allprojects { repositories { + google() jcenter() } } + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/ubidots-android-app.iml b/ubidots-android-app.iml deleted file mode 100644 index 0bb6048..0000000 --- a/ubidots-android-app.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/ubidots-android-gps-tracker.iml b/ubidots-android-gps-tracker.iml new file mode 100644 index 0000000..09e9b8d --- /dev/null +++ b/ubidots-android-gps-tracker.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + \ No newline at end of file