From a726979c1caf056b53e18bee6fd6371ec0e4f8c6 Mon Sep 17 00:00:00 2001 From: Thomas Hunsaker Date: Tue, 10 Nov 2015 12:54:28 -0700 Subject: [PATCH 01/16] Things are building, though probably broken --- build.gradle | 2 +- foursquare-android-oauth | 2 +- gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- soup-pro/build.gradle | 18 +- soup-pro/soup-pro.iml | 86 ------- soup/build.gradle | 205 +++++++++-------- soup/src/main/AndroidManifest.xml | 20 +- .../com/thunsaker/soup/app/SoupAppModule.java | 2 - .../services/foursquare/FoursquarePrefs.java | 11 + .../ui/FoursquareAuthorizationActivity.java | 210 ------------------ .../com/thunsaker/soup/ui/MainActivity.java | 9 +- .../soup/ui/VenueEditHoursAddActivity.java | 6 +- .../thunsaker/soup/ui/WelcomeActivity.java | 23 +- .../thunsaker/soup/util/LocationService.java | 59 ++--- .../java/com/thunsaker/soup/util/Util.java | 40 ---- .../color/custom_calendar_text_selector.xml | 6 +- .../drawable/custom_calendar_bg_selector.xml | 14 +- .../res/layout/fragment_checkin_history.xml | 14 +- soup/src/main/res/values/colors.xml | 2 + viewpagerindicator | 2 +- 21 files changed, 195 insertions(+), 544 deletions(-) delete mode 100644 soup-pro/soup-pro.iml delete mode 100644 soup/src/main/java/com/thunsaker/soup/ui/FoursquareAuthorizationActivity.java diff --git a/build.gradle b/build.gradle index e8a01cb..ad22099 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:1.3.0' classpath 'org.robolectric:robolectric-gradle-plugin:0.12.0' } diff --git a/foursquare-android-oauth b/foursquare-android-oauth index 60edada..f6aeff5 160000 --- a/foursquare-android-oauth +++ b/foursquare-android-oauth @@ -1 +1 @@ -Subproject commit 60edadaac998fd2822afc2ee0d50207fb580a00d +Subproject commit f6aeff5add72464b1a836c9281c8d54167c09d88 diff --git a/gradle.properties b/gradle.properties index 6bd9440..4500f04 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,6 +17,6 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -DEBUG_STORE_FILE=../../../../../.android/debug.keystore -RELEASE_STORE_FILE=../../../../../dropbox/dev/project resources/my-release-key.keystore +DEBUG_STORE_FILE=~/.android/debug.keystore +RELEASE_STORE_FILE=~/release.keystore RELEASE_KEY_ALIAS=soup \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 36f5bae..4c7a11a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jul 06 22:41:28 MST 2014 +#Tue Nov 10 11:29:15 MST 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip diff --git a/soup-pro/build.gradle b/soup-pro/build.gradle index c4f60c9..cb9c101 100644 --- a/soup-pro/build.gradle +++ b/soup-pro/build.gradle @@ -19,12 +19,12 @@ gradle.taskGraph.whenReady { taskGraph -> apply plugin: 'com.android.application' android { - compileSdkVersion 19 - buildToolsVersion '20' + compileSdkVersion 23 + buildToolsVersion '23.0.1' defaultConfig { - minSdkVersion 9 - targetSdkVersion 19 + minSdkVersion 14 + targetSdkVersion 23 versionCode 3 versionName "1.2" } @@ -47,18 +47,14 @@ android { buildTypes { debug { - zipAlign true - debuggable true - runProguard false + minifyEnabled false applicationIdSuffix ".debug" versionNameSuffix "-debug" signingConfig signingConfigs.debugSigning } release { - zipAlign true - debuggable false - runProguard false + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' signingConfig signingConfigs.releaseSigning } @@ -66,5 +62,5 @@ android { } dependencies { - compile 'com.android.support:support-v4:19.+' + compile 'com.android.support:support-v4:23.1.0' } \ No newline at end of file diff --git a/soup-pro/soup-pro.iml b/soup-pro/soup-pro.iml deleted file mode 100644 index f8c6a2f..0000000 --- a/soup-pro/soup-pro.iml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/soup/build.gradle b/soup/build.gradle index c3a0d16..1aa26e8 100644 --- a/soup/build.gradle +++ b/soup/build.gradle @@ -1,78 +1,77 @@ -gradle.taskGraph.whenReady { taskGraph -> - if(taskGraph.hasTask(':soup:assembleRelease')) { - // Only execute when we are trying to assemble a release build - def pass = System.console() != null ? System.console().readPassword("\nPlease enter store passphrase: ") : "" - // readPassword returns a char[] so we need to wrap it into a string, because that's - // most likely what you need - pass = new String(pass) - // Use the pass variable here (so set signing configs here) - android.signingConfigs.release.storePassword = pass - - def pass2 = System.console() != null ? System.console().readPassword("\nPlease enter key passphrase: ") : "" - // readPassword returns a char[] so we need to wrap it into a string, because that's - // most likely what you need - pass2 = new String(pass2) - android.signingConfigs.release.keyPassword = pass2 - } -} - -// NOTE: Temp fix for Play Services (admob) from: https://code.google.com/p/android/issues/detail?id=75080 -tasks.whenTaskAdded { theTask -> - def taskName = theTask.name.toString() - if ("testDebug".toString().equals(taskName)) { - /** - * Listen for when robolectric adds the 'testDebug' task and when it does, add the -noverify - * option to that task's jvmArgs. This allows us to turn off byte code verification when - * running our unit tests. - */ - theTask.jvmArgs('-noverify') - } -} +//gradle.taskGraph.whenReady { taskGraph -> +// if(taskGraph.hasTask(':soup:assembleRelease')) { +// // Only execute when we are trying to assemble a release build +// def pass = System.console() != null ? System.console().readPassword("\nPlease enter store passphrase: ") : "" +// // readPassword returns a char[] so we need to wrap it into a string, because that's +// // most likely what you need +// pass = new String(pass) +// // Use the pass variable here (so set signing configs here) +// android.signingConfigs.release.storePassword = pass +// +// def pass2 = System.console() != null ? System.console().readPassword("\nPlease enter key passphrase: ") : "" +// // readPassword returns a char[] so we need to wrap it into a string, because that's +// // most likely what you need +// pass2 = new String(pass2) +// android.signingConfigs.release.keyPassword = pass2 +// } +//} +// +//// NOTE: Temp fix for Play Services (admob) from: https://code.google.com/p/android/issues/detail?id=75080 +//tasks.whenTaskAdded { theTask -> +// def taskName = theTask.name.toString() +// if ("testDebug".toString().equals(taskName)) { +// /** +// * Listen for when robolectric adds the 'testDebug' task and when it does, add the -noverify +// * option to that task's jvmArgs. This allows us to turn off byte code verification when +// * running our unit tests. +// */ +// theTask.jvmArgs('-noverify') +// } +//} buildscript { repositories { mavenCentral() - maven { url 'http://download.crashlytics.com/maven' } - } - dependencies { - classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.12.0' - +// maven { url 'http://download.crashlytics.com/maven' } } +// dependencies { +// classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.12.0' +// } } apply plugin: 'com.android.application' -apply plugin: 'robolectric' -apply plugin: 'crashlytics' +//apply plugin: 'robolectric' +//apply plugin: 'crashlytics' repositories { mavenCentral() - maven { url 'http://download.crashlytics.com/maven' } +// maven { url 'http://download.crashlytics.com/maven' } } android { - compileSdkVersion 19 - buildToolsVersion '19.1' + compileSdkVersion 23 + buildToolsVersion '23.0.1' defaultConfig { applicationId "com.thunsaker.soup" - minSdkVersion 9 - targetSdkVersion 19 + minSdkVersion 14 + targetSdkVersion 23 versionCode 25 versionName "2.6.4" - testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" +// testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" resConfigs "en", "es", "fr", "pt", "ru" } signingConfigs { debugSigning { - storeFile file(DEBUG_STORE_FILE) +// storeFile file(DEBUG_STORE_FILE) storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } releaseSigning { - storeFile file(RELEASE_STORE_FILE) +// storeFile file(RELEASE_STORE_FILE) storePassword "" keyAlias RELEASE_KEY_ALIAS keyPassword "" @@ -81,57 +80,55 @@ android { buildTypes { debug { - zipAlign true - debuggable true - runProguard false + minifyEnabled false applicationIdSuffix ".debug" versionNameSuffix "-debug" - signingConfig signingConfigs.debugSigning +// signingConfig signingConfigs.debugSigning ext.enableCrashlytics = false } release { - zipAlign true - debuggable false - runProguard false + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - signingConfig signingConfigs.releaseSigning +// signingConfig signingConfigs.releaseSigning } } - sourceSets { - main { - manifest.srcFile 'src/main/AndroidManifest.xml' - java.srcDirs = ['src/main/java'] - res.srcDirs = ['src/main/res'] - } - - androidTest { - setRoot('src/androidTest') - } - } -} - -robolectric { - include '**/*Test.class' - exclude '**/espresso/**/*.class' +// sourceSets { +// main { +// manifest.srcFile 'src/main/AndroidManifest.xml' +// java.srcDirs = ['src/main/java'] +// res.srcDirs = ['src/main/res'] +// } +// +// androidTest { +// setRoot('src/androidTest') +// } +// } } +// +//robolectric { +// include '**/*Test.class' +// exclude '**/espresso/**/*.class' +//} dependencies { - androidTestCompile('junit:junit:4.11') { + testCompile('junit:junit:4.11') { exclude module: 'hamcrest-core' } compile project(':foursquare-android-oauth:foursquare-oauth-library') compile project(':viewpagerindicator:library') - compile('com.doomonafireball.betterpickers:library:1.5.2') { - exclude group: 'com.android.support', module: 'support-v4' - } - compile 'com.android.support:support-v4:19.+' - compile 'com.android.support:appcompat-v7:19.+' - compile 'com.google.code.gson:gson:2.2.4' - compile 'com.google.android.gms:play-services:5.0.+' +// compile('com.doomonafireball.betterpickers:library:1.5.2') { +// exclude group: 'com.android.support', module: 'support-v4' +// } + compile 'com.code-troopers.betterpickers:library:2.2.1' + + compile 'com.android.support:support-v4:23.1.0' + compile 'com.android.support:appcompat-v7:23.1.0' + compile 'com.google.code.gson:gson:2.3' + compile 'com.google.android.gms:play-services:8.1.0' compile 'com.koushikdutta.urlimageviewhelper:urlimageviewhelper:1.0.4' - compile 'com.crashlytics.android:crashlytics:1.1.13' +// compile 'com.crashlytics.android:crashlytics:1.1.13' compile 'joda-time:joda-time:2.4' compile 'com.jakewharton:butterknife:5.1.2' compile 'de.greenrobot:eventbus:2.2.0' @@ -140,36 +137,36 @@ dependencies { compile('com.squareup.retrofit:retrofit:1.5.1') { exclude group: 'com.google.code.gson', module: 'gson' } - compile 'com.squareup:android-times-square:1.2.1@aar' + compile 'com.squareup:android-times-square:1.6.4@aar' compile 'com.tundem.aboutlibraries:library:3.0.0@aar' // Test - Robolectric provided 'com.squareup.dagger:dagger-compiler:1.2.1' - androidTestCompile('org.robolectric:robolectric:2.3') { - exclude module: 'classworlds' - exclude module: 'maven-artifact' - exclude module: 'maven-artifact-manager' - exclude module: 'maven-error-diagnostics' - exclude module: 'maven-model' - exclude module: 'maven-plugin-registry' - exclude module: 'maven-profile' - exclude module: 'maven-project' - exclude module: 'maven-settings' - exclude module: 'nekohtml' - exclude module: 'plexus-container-default' - exclude module: 'plexus-interpolation' - exclude module: 'plexus-utils' - exclude module: 'wagon-file' - exclude module: 'wagon-http-lightweight' - exclude module: 'wagon-http-shared' - exclude module: 'wagon-provider-api' - exclude module: 'commons-logging' - exclude module: 'httpclient' - } - androidTestCompile 'com.squareup:fest-android:1.0.7' - androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') { +// testCompile('org.robolectric:robolectric:2.3') { +// exclude module: 'classworlds' +// exclude module: 'maven-artifact' +// exclude module: 'maven-artifact-manager' +// exclude module: 'maven-error-diagnostics' +// exclude module: 'maven-model' +// exclude module: 'maven-plugin-registry' +// exclude module: 'maven-profile' +// exclude module: 'maven-project' +// exclude module: 'maven-settings' +// exclude module: 'nekohtml' +// exclude module: 'plexus-container-default' +// exclude module: 'plexus-interpolation' +// exclude module: 'plexus-utils' +// exclude module: 'wagon-file' +// exclude module: 'wagon-http-lightweight' +// exclude module: 'wagon-http-shared' +// exclude module: 'wagon-provider-api' +// exclude module: 'commons-logging' +// exclude module: 'httpclient' +// } + testCompile 'com.squareup:fest-android:1.0.7' + testCompile('com.jakewharton.espresso:espresso:1.1-r3') { exclude module: 'javax.inject' exclude module: 'javax.annotation:javax.annotation-api:1.2' } - androidTestCompile 'com.jakewharton.espresso:espresso-support-v4:1.1-r3' - androidTestCompile 'org.mockito:mockito-all:1.9.5' + testCompile 'com.jakewharton.espresso:espresso-support-v4:1.1-r3' + testCompile 'org.mockito:mockito-all:1.9.5' } \ No newline at end of file diff --git a/soup/src/main/AndroidManifest.xml b/soup/src/main/AndroidManifest.xml index 17b8b8f..e008f01 100644 --- a/soup/src/main/AndroidManifest.xml +++ b/soup/src/main/AndroidManifest.xml @@ -4,16 +4,16 @@ + + + + + + - - - - - - - diff --git a/soup/src/main/java/com/thunsaker/soup/app/SoupAppModule.java b/soup/src/main/java/com/thunsaker/soup/app/SoupAppModule.java index 30e9c7a..ad297ac 100644 --- a/soup/src/main/java/com/thunsaker/soup/app/SoupAppModule.java +++ b/soup/src/main/java/com/thunsaker/soup/app/SoupAppModule.java @@ -15,7 +15,6 @@ import com.thunsaker.soup.services.foursquare.SwarmService; import com.thunsaker.soup.ui.CheckinHistoryActivity; import com.thunsaker.soup.ui.CheckinHistoryFragment; -import com.thunsaker.soup.ui.FoursquareAuthorizationActivity; import com.thunsaker.soup.ui.FoursquareListFragment; import com.thunsaker.soup.ui.ListActivity; import com.thunsaker.soup.ui.ListsFragment; @@ -47,7 +46,6 @@ addsTo = AndroidApplicationModule.class, injects = { SoupApp.class, - FoursquareAuthorizationActivity.class, MainActivity.class, FoursquareTasks.class, VenueListFragment.class, diff --git a/soup/src/main/java/com/thunsaker/soup/services/foursquare/FoursquarePrefs.java b/soup/src/main/java/com/thunsaker/soup/services/foursquare/FoursquarePrefs.java index c2ebdf1..8608927 100644 --- a/soup/src/main/java/com/thunsaker/soup/services/foursquare/FoursquarePrefs.java +++ b/soup/src/main/java/com/thunsaker/soup/services/foursquare/FoursquarePrefs.java @@ -1,5 +1,9 @@ package com.thunsaker.soup.services.foursquare; +import android.content.Context; + +import com.thunsaker.soup.PreferencesHelper; + /* * Created by @thunsaker */ @@ -130,4 +134,11 @@ final public static class Limit { public static final String EDIT_VENUE_HOURS = "hours"; public static final String EDIT_VENUE_USER_LATLONG = "ll"; + + public static void clearFoursquareUser(Context myContext) { + PreferencesHelper.setFoursquareToken(myContext, ""); + PreferencesHelper.setFoursquareConnected(myContext, false); + PreferencesHelper.setFoursquareUserId(myContext, ""); + PreferencesHelper.setFoursquareSuperuserLevel(myContext, 0); + } } \ No newline at end of file diff --git a/soup/src/main/java/com/thunsaker/soup/ui/FoursquareAuthorizationActivity.java b/soup/src/main/java/com/thunsaker/soup/ui/FoursquareAuthorizationActivity.java deleted file mode 100644 index b04d57b..0000000 --- a/soup/src/main/java/com/thunsaker/soup/ui/FoursquareAuthorizationActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.thunsaker.soup.ui; - -import android.annotation.SuppressLint; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; -import android.content.Intent; -import android.graphics.Bitmap; -import android.os.AsyncTask; -import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarActivity; -import android.util.Log; -import android.view.MenuItem; -import android.view.View; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.Toast; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.thunsaker.soup.R; -import com.thunsaker.soup.PreferencesHelper; -import com.thunsaker.soup.app.BaseSoupActivity; -import com.thunsaker.soup.data.FoursquareClient; -import com.thunsaker.soup.util.QueryStringParser; -import com.thunsaker.soup.util.Util; - -/* - * Created by @thunsaker - */ -public class FoursquareAuthorizationActivity extends BaseSoupActivity { - final String TAG = "FoursquareAuthorizationActivity"; - - public static final String ACCESS_URL = "https://foursquare.com/oauth2/access_token"; - public static final String AUTHORIZE_URL = "https://foursquare.com/oauth2/authorize"; - - public static FoursquareClient mFoursquareClient; - - public ProgressDialog loadingDialog; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - if(mFoursquareClient != null) { - ActionBar ab = getSupportActionBar(); - boolean showHomeUp = true; - ab.setDisplayHomeAsUpEnabled(showHomeUp); - boolean useLogo = true; - ab.setDisplayUseLogoEnabled(useLogo); - ab.setIcon(getResources().getDrawable(R.drawable.ic_launcher_white)); - - loadingDialog = ProgressDialog.show( - FoursquareAuthorizationActivity.this, - getString(R.string.dialog_please_wait), String.format( - getString(R.string.dialog_loading), - getString(R.string.foursquare)), true, // Undefined progress - true, // Allow canceling of operation - new OnCancelListener() { - public void onCancel(DialogInterface dialog) { -// Crouton.makeText(FoursquareAuthorizationActivity.this, getString(R.string.auth_cancelled), Style.ALERT).show(); - Toast.makeText(FoursquareAuthorizationActivity.this, getString(R.string.auth_cancelled), Toast.LENGTH_SHORT).show(); - } - }); - } else { -// Crouton.makeText(this, getString(R.string.auth_failed), Style.ALERT).show(); - Toast.makeText(this, getString(R.string.auth_failed), Toast.LENGTH_SHORT).show(); - Log.i(TAG, "FoursquareClient is null. Be sure to set the foursquare client before attempting to login."); - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - finish(); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - - @SuppressLint("SetJavaScriptEnabled") - @Override - protected void onResume() { - super.onResume(); - - WebView webView = new WebView(this); - webView.getSettings().setJavaScriptEnabled(true); - webView.setVisibility(View.VISIBLE); - setContentView(webView); - - String authUrl = String.format("%s?client_id=%s&response_type=code&redirect_uri=%s", - AUTHORIZE_URL, mFoursquareClient.getClientId(), - mFoursquareClient.getCallbackUrl()); - - try { - webView.setWebViewClient(new WebViewClient() { - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - } - - @Override - public void onPageFinished(WebView view, String url) { - if (url.startsWith(mFoursquareClient.getCallbackUrl())) { - try { - if (url.indexOf("code=") != -1) { - String requestToken = extractParamFromUrl(url, - "code"); - - // Do http post here... - String accessUrl = String - .format("%s?code=%s&client_id=%s&client_secret=%s&grant_type=authorization_code&redirect_uri=%s", - ACCESS_URL, requestToken, - mFoursquareClient.getClientId(), - mFoursquareClient.getClientSecret(), - mFoursquareClient.getCallbackUrl()); - - new TokenFetcher( - FoursquareAuthorizationActivity.this.getApplicationContext(), - accessUrl, FoursquareAuthorizationActivity.this).execute(); - - view.setVisibility(View.INVISIBLE); - } else if (url.indexOf("error=") != -1) { - view.setVisibility(View.INVISIBLE); - } - } catch (Exception e) { - Log.i(TAG, "IOException: " + e.getMessage()); - e.printStackTrace(); - } - } - } - }); - - webView.loadUrl(authUrl); - webView.requestFocus(); - loadingDialog.dismiss(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - } - } - - private String extractParamFromUrl(String url,String paramName) { - String queryString = url.substring(url.indexOf("?", 0)+1,url.length()); - QueryStringParser queryStringParser = new QueryStringParser(queryString); - return queryStringParser.getQueryParamValue(paramName); - } - - public class TokenFetcher extends AsyncTask { - Context myContext; - String myUrl; - String myAccessToken = ""; - ActionBarActivity myCaller; - - public TokenFetcher(Context theContext, String theUrl, ActionBarActivity theCaller) { - myContext = theContext; - myUrl = theUrl; - myCaller = theCaller; - } - - @Override - protected Boolean doInBackground(Void... params) { - Boolean result = false; - String response = Util.getHttpResponse(myUrl, true, Util.contentType, Util.contentType); - if (response != null) { - JsonParser jParser = new JsonParser(); - JsonObject jObject = (JsonObject) jParser.parse(response); - if(jObject != null) { - String accessToken = jObject.get("access_token") != null ? jObject.get("access_token").getAsString() : ""; - - if (accessToken.length() > 0) { - result = true; - myAccessToken = accessToken.trim(); - - PreferencesHelper.setFoursquareToken(myContext, myAccessToken); - PreferencesHelper.setFoursquareConnected(myContext, result); - } else { -// Crouton.makeText(myCaller, "There was a problem authenticating, please try again.", Style.ALERT).show(); - Toast.makeText(myCaller, "There was a problem authenticating, please try again.", Toast.LENGTH_SHORT).show(); - } - } else { -// Crouton.makeText(myCaller, "There was a problem authenticating, please try again.", Style.ALERT).show(); - Toast.makeText(myCaller, "There was a problem authenticating, please try again.", Toast.LENGTH_SHORT).show(); - } - } - - return result; - } - - @Override - protected void onPostExecute(Boolean result) { - super.onPostExecute(result); - if(result) - Toast.makeText(myContext, "Foursquare Account Authorized", Toast.LENGTH_SHORT).show(); - - finish(); - startActivity(new Intent(getApplicationContext(), MainActivity.class)); - } - } - - public static void clearFoursquareUser(Context myContext) { - PreferencesHelper.setFoursquareToken(myContext, ""); - PreferencesHelper.setFoursquareConnected(myContext, false); - PreferencesHelper.setFoursquareUserId(myContext, ""); - PreferencesHelper.setFoursquareSuperuserLevel(myContext, 0); - } -} diff --git a/soup/src/main/java/com/thunsaker/soup/ui/MainActivity.java b/soup/src/main/java/com/thunsaker/soup/ui/MainActivity.java index ff62dfc..20891b3 100644 --- a/soup/src/main/java/com/thunsaker/soup/ui/MainActivity.java +++ b/soup/src/main/java/com/thunsaker/soup/ui/MainActivity.java @@ -27,13 +27,11 @@ import android.widget.ListView; import android.widget.Toast; -import com.crashlytics.android.Crashlytics; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.maps.model.LatLng; import com.thunsaker.android.common.annotations.ForApplication; -import com.thunsaker.soup.BuildConfig; import com.thunsaker.soup.PreferencesHelper; import com.thunsaker.soup.R; import com.thunsaker.soup.app.BaseSoupActivity; @@ -110,8 +108,8 @@ public class MainActivity extends BaseSoupActivity implements protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if(!BuildConfig.DEBUG) - Crashlytics.start(this); +// if(!BuildConfig.DEBUG) +// Crashlytics.start(this); mBus.register(this); @@ -154,7 +152,6 @@ public void onDrawerOpened(View drawerView) { AuthHelper.FOURSQUARE_CLIENT_ID, AuthHelper.FOURSQUARE_CLIENT_SECRET, AuthHelper.FOURSQUARE_CALLBACK_URL); - FoursquareAuthorizationActivity.mFoursquareClient = mFoursquareClient; isFoursquareConnected = PreferencesHelper .getFoursquareConnected(getApplicationContext()); @@ -386,7 +383,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { @Override public void onClick(DialogInterface dialog, int which) { - FoursquareAuthorizationActivity + FoursquarePrefs .clearFoursquareUser(getActivity() .getApplicationContext()); startActivity(new Intent(getActivity() diff --git a/soup/src/main/java/com/thunsaker/soup/ui/VenueEditHoursAddActivity.java b/soup/src/main/java/com/thunsaker/soup/ui/VenueEditHoursAddActivity.java index 40c6a6d..588c67c 100644 --- a/soup/src/main/java/com/thunsaker/soup/ui/VenueEditHoursAddActivity.java +++ b/soup/src/main/java/com/thunsaker/soup/ui/VenueEditHoursAddActivity.java @@ -19,8 +19,8 @@ import android.widget.Toast; import android.widget.ToggleButton; -import com.doomonafireball.betterpickers.timepicker.TimePickerBuilder; -import com.doomonafireball.betterpickers.timepicker.TimePickerDialogFragment.TimePickerDialogHandler; +import com.codetroopers.betterpickers.timepicker.TimePickerBuilder; +import com.codetroopers.betterpickers.timepicker.TimePickerDialogFragment; import com.thunsaker.android.common.annotations.ForApplication; import com.thunsaker.soup.R; import com.thunsaker.soup.app.BaseSoupActivity; @@ -40,7 +40,7 @@ import butterknife.OnClick; public class VenueEditHoursAddActivity extends BaseSoupActivity - implements TimePickerDialogHandler { + implements TimePickerDialogFragment.TimePickerDialogHandler { @Inject @ForApplication diff --git a/soup/src/main/java/com/thunsaker/soup/ui/WelcomeActivity.java b/soup/src/main/java/com/thunsaker/soup/ui/WelcomeActivity.java index 99d4583..6b5f880 100644 --- a/soup/src/main/java/com/thunsaker/soup/ui/WelcomeActivity.java +++ b/soup/src/main/java/com/thunsaker/soup/ui/WelcomeActivity.java @@ -1,9 +1,6 @@ package com.thunsaker.soup.ui; -import android.content.Context; import android.content.Intent; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.ActionBar; @@ -15,9 +12,10 @@ import com.foursquare.android.nativeoauth.FoursquareOAuth; import com.foursquare.android.nativeoauth.model.AccessTokenResponse; import com.foursquare.android.nativeoauth.model.AuthCodeResponse; -import com.thunsaker.soup.services.AuthHelper; import com.thunsaker.soup.PreferencesHelper; import com.thunsaker.soup.R; +import com.thunsaker.soup.services.AuthHelper; +import com.thunsaker.soup.services.foursquare.FoursquarePrefs; /* * Created by @thunsaker @@ -78,21 +76,6 @@ private void LaunchFoursquareAuthActivity() { startActivityForResult(foursquareAuth, REQUEST_FOURSQUARE_AUTH); } - // Pop foursquare web auth - public void LaunchFoursquareWebAuthActivity() { - ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); - if (activeNetworkInfo != null) { - // Launch Foursquare Auth Activity - Intent foursquareAuth = new Intent(getApplicationContext(), FoursquareAuthorizationActivity.class); - startActivity(foursquareAuth); - finish(); - } else { -// Crouton.makeText(this, getString(R.string.error_no_internets), Style.ALERT).show(); - Toast.makeText(this, getString(R.string.alert_no_internet), Toast.LENGTH_SHORT).show(); - } - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { @@ -138,7 +121,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { "Problem Authenticating: An unknown error occurred", Toast.LENGTH_SHORT).show(); } - FoursquareAuthorizationActivity.clearFoursquareUser(getApplicationContext()); + FoursquarePrefs.clearFoursquareUser(getApplicationContext()); } } diff --git a/soup/src/main/java/com/thunsaker/soup/util/LocationService.java b/soup/src/main/java/com/thunsaker/soup/util/LocationService.java index 5244810..d549ed4 100644 --- a/soup/src/main/java/com/thunsaker/soup/util/LocationService.java +++ b/soup/src/main/java/com/thunsaker/soup/util/LocationService.java @@ -1,19 +1,22 @@ package com.thunsaker.soup.util; +import android.Manifest; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.os.Binder; +import android.os.Build; import android.os.Bundle; import android.os.IBinder; import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GooglePlayServicesClient; -import com.google.android.gms.location.LocationClient; +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.location.LocationServices; import com.thunsaker.soup.data.LocationServiceError; import com.thunsaker.soup.data.events.LocationChangedEvent; @@ -22,8 +25,8 @@ import de.greenrobot.event.EventBus; public class LocationService extends Service implements - GooglePlayServicesClient.ConnectionCallbacks, - GooglePlayServicesClient.OnConnectionFailedListener{ + GoogleApiClient.ConnectionCallbacks, + GoogleApiClient.OnConnectionFailedListener { @Inject Context mContext; @@ -35,7 +38,7 @@ public class LocationService extends Service implements EventBus bus; private Binder mBinder = new LocalBinder(); - private LocationClient mLocationClient; + public static GoogleApiClient mGoogleClient; private static float lastLatitude = 33.1264583f; private static float lastLongitude = -117.3106229f; @@ -43,27 +46,20 @@ public class LocationService extends Service implements public void onCreate() { } - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - // Google Play Services - mLocationClient = new LocationClient(mContext, this, this); -// mLocationClient = new LocationClient(this, this, this); - mLocationClient.connect(); - return START_STICKY; - } - @Override public void onConnected(Bundle bundle) { - Location loc = mLocationClient.getLastLocation(); - if(loc != null) { - bus.post(new LocationChangedEvent((float)loc.getLatitude(), (float)loc.getLongitude())); + Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleClient); + if (location != null) { + bus.post( + new LocationChangedEvent( + (float) location.getLatitude(), (float) location.getLongitude())); } stopSelf(); } @Override - public void onDisconnected() { - stopSelf(); + public void onConnectionSuspended(int i) { + mGoogleClient.disconnect(); } @Override @@ -82,16 +78,11 @@ LocationService getService() { } } -// @Produce -// public LocationChangedEvent produceLocationEvent() { -// return new LocationChangedEvent(lastLatitude, lastLongitude); -// } - public final LocationListener mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location loc) { - bus.post(new LocationChangedEvent((float)loc.getLatitude(), (float)loc.getLongitude())); + bus.post(new LocationChangedEvent((float) loc.getLatitude(), (float) loc.getLongitude())); } @Override @@ -116,13 +107,29 @@ public void UseBackupProviders() { Boolean hasLocationProvider = false; mLocationManager = - (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); + (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); // Use network provider first LocationProvider networkProvider = mLocationManager.getProvider( LocationManager.NETWORK_PROVIDER); + // TODO: Address MM Permissions + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) + != PackageManager.PERMISSION_GRANTED + && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) + != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // public void requestPermissions(@NonNull String[] permissions, int requestCode) + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for Activity#requestPermissions for more details. + return; + } + } Location lastKnown = mLocationManager.getLastKnownLocation( LocationManager.PASSIVE_PROVIDER); diff --git a/soup/src/main/java/com/thunsaker/soup/util/Util.java b/soup/src/main/java/com/thunsaker/soup/util/Util.java index e4c0222..ee3c374 100644 --- a/soup/src/main/java/com/thunsaker/soup/util/Util.java +++ b/soup/src/main/java/com/thunsaker/soup/util/Util.java @@ -7,7 +7,6 @@ import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.util.DisplayMetrics; -import android.util.Log; import android.util.TypedValue; import com.google.android.gms.maps.model.LatLng; @@ -17,14 +16,6 @@ import com.thunsaker.soup.data.api.model.CompactVenue; import com.thunsaker.soup.data.api.model.Location; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.DefaultHttpClient; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -50,37 +41,6 @@ public class Util { public static String contentType = "json/application"; - public static String getHttpResponse(String url, String contentType, String accepts) { - return getHttpResponse(url, false, contentType, accepts); - } - - public static String getHttpResponse(String url, Boolean isHttpPost, String contentType, String accepts) { - String result = ""; - HttpClient httpclient = new DefaultHttpClient(); - HttpGet httpGet = new HttpGet(url); - HttpPost httpPost = new HttpPost(url); - HttpResponse response; - - try { - if(isHttpPost) - response = httpclient.execute(httpPost); - else - response = httpclient.execute(httpGet); - - HttpEntity entity = response.getEntity(); - if (entity != null) { - InputStream instream = entity.getContent(); - result = convertStreamToString(instream); - instream.close(); - } - } catch (ClientProtocolException e) { - Log.e(LOG_TAG, "There was a protocol based error", e); - } catch (IOException e) { - Log.e(LOG_TAG, "There was an IO Stream related error", e); - } - return result; - } - private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); diff --git a/soup/src/main/res/color/custom_calendar_text_selector.xml b/soup/src/main/res/color/custom_calendar_text_selector.xml index 9a06c9d..0e62822 100644 --- a/soup/src/main/res/color/custom_calendar_text_selector.xml +++ b/soup/src/main/res/color/custom_calendar_text_selector.xml @@ -4,8 +4,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> - - - + + + \ No newline at end of file diff --git a/soup/src/main/res/drawable/custom_calendar_bg_selector.xml b/soup/src/main/res/drawable/custom_calendar_bg_selector.xml index d947612..c56627d 100644 --- a/soup/src/main/res/drawable/custom_calendar_bg_selector.xml +++ b/soup/src/main/res/drawable/custom_calendar_bg_selector.xml @@ -2,15 +2,15 @@ - + - - - - - - + + + + + + diff --git a/soup/src/main/res/layout/fragment_checkin_history.xml b/soup/src/main/res/layout/fragment_checkin_history.xml index 18077b9..4647e56 100644 --- a/soup/src/main/res/layout/fragment_checkin_history.xml +++ b/soup/src/main/res/layout/fragment_checkin_history.xml @@ -42,17 +42,17 @@ android:layout_below="@+id/linearLayoutHistoryDateRangeBarWrapper" android:background="@color/white" android:visibility="visible" > + + android:layout_weight="1" /> + + + + +