diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 1848c1927..000000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -MyTracks \ No newline at end of file diff --git a/build.gradle b/build.gradle index b968460cf..b870d620e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.0' + classpath 'com.android.tools.build:gradle:3.4.1' } } diff --git a/myTracks/build.gradle b/myTracks/build.gradle index f3ab474ee..3600df7eb 100644 --- a/myTracks/build.gradle +++ b/myTracks/build.gradle @@ -21,14 +21,8 @@ android { } dependencies { - compile project(':myTracksLib') + implementation project(':myTracksLib') compile files('libs/antlib.jar') - compile files('libs/google-api-client-1.12.0-beta.jar') - compile files('libs/google-api-client-android-1.12.0-beta.jar') - compile files('libs/google-api-services-drive-v2-rev30-1.12.0-beta.jar') - compile files('libs/google-http-client-1.12.0-beta.jar') - compile files('libs/google-http-client-android-1.12.0-beta.jar') - compile files('libs/google-http-client-gson-1.12.0-beta.jar') androidTestCompile files('libs/AndroidMockGenerator.jar') androidTestCompile files('libs/robotium-solo-5.0.1.jar') diff --git a/myTracks/libs/android-support-v4.jar b/myTracks/libs/android-support-v4.jar deleted file mode 100644 index 428bdbc02..000000000 Binary files a/myTracks/libs/android-support-v4.jar and /dev/null differ diff --git a/myTracks/libs/gdata-client-1.0.jar b/myTracks/libs/gdata-client-1.0.jar deleted file mode 100644 index 2ae38cc66..000000000 Binary files a/myTracks/libs/gdata-client-1.0.jar and /dev/null differ diff --git a/myTracks/libs/gdata-client-meta-1.0.jar b/myTracks/libs/gdata-client-meta-1.0.jar deleted file mode 100644 index 362bca10d..000000000 Binary files a/myTracks/libs/gdata-client-meta-1.0.jar and /dev/null differ diff --git a/myTracks/libs/gdata-core-1.0.jar b/myTracks/libs/gdata-core-1.0.jar deleted file mode 100644 index 8c493c674..000000000 Binary files a/myTracks/libs/gdata-core-1.0.jar and /dev/null differ diff --git a/myTracks/libs/gdata-spreadsheet-3.0.jar b/myTracks/libs/gdata-spreadsheet-3.0.jar deleted file mode 100644 index 85fb7c85f..000000000 Binary files a/myTracks/libs/gdata-spreadsheet-3.0.jar and /dev/null differ diff --git a/myTracks/libs/gdata-spreadsheet-meta-3.0.jar b/myTracks/libs/gdata-spreadsheet-meta-3.0.jar deleted file mode 100644 index 7babe6c66..000000000 Binary files a/myTracks/libs/gdata-spreadsheet-meta-3.0.jar and /dev/null differ diff --git a/myTracks/libs/google-api-client-1.12.0-beta.jar b/myTracks/libs/google-api-client-1.12.0-beta.jar deleted file mode 100644 index c85862626..000000000 Binary files a/myTracks/libs/google-api-client-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-api-client-android-1.12.0-beta.jar b/myTracks/libs/google-api-client-android-1.12.0-beta.jar deleted file mode 100644 index cb7cfe8bc..000000000 Binary files a/myTracks/libs/google-api-client-android-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-api-services-drive-v2-rev30-1.12.0-beta.jar b/myTracks/libs/google-api-services-drive-v2-rev30-1.12.0-beta.jar deleted file mode 100644 index 6e17009b4..000000000 Binary files a/myTracks/libs/google-api-services-drive-v2-rev30-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-api-services-fusiontables-v1-rev16-1.12.0-beta.jar b/myTracks/libs/google-api-services-fusiontables-v1-rev16-1.12.0-beta.jar deleted file mode 100644 index 07866f15f..000000000 Binary files a/myTracks/libs/google-api-services-fusiontables-v1-rev16-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-common.jar b/myTracks/libs/google-common.jar deleted file mode 100644 index 6805898e8..000000000 Binary files a/myTracks/libs/google-common.jar and /dev/null differ diff --git a/myTracks/libs/google-http-client-1.12.0-beta.jar b/myTracks/libs/google-http-client-1.12.0-beta.jar deleted file mode 100644 index 6ff05049f..000000000 Binary files a/myTracks/libs/google-http-client-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-http-client-android-1.12.0-beta.jar b/myTracks/libs/google-http-client-android-1.12.0-beta.jar deleted file mode 100644 index 1ed253346..000000000 Binary files a/myTracks/libs/google-http-client-android-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-http-client-gson-1.12.0-beta.jar b/myTracks/libs/google-http-client-gson-1.12.0-beta.jar deleted file mode 100644 index 7a2e064e7..000000000 Binary files a/myTracks/libs/google-http-client-gson-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-http-client-jackson-1.12.0-beta.jar b/myTracks/libs/google-http-client-jackson-1.12.0-beta.jar deleted file mode 100644 index 52c2209d9..000000000 Binary files a/myTracks/libs/google-http-client-jackson-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-http-client-jackson2-1.12.0-beta.jar b/myTracks/libs/google-http-client-jackson2-1.12.0-beta.jar deleted file mode 100644 index 9415c7b23..000000000 Binary files a/myTracks/libs/google-http-client-jackson2-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-oauth-client-1.12.0-beta.jar b/myTracks/libs/google-oauth-client-1.12.0-beta.jar deleted file mode 100644 index dad2abe4f..000000000 Binary files a/myTracks/libs/google-oauth-client-1.12.0-beta.jar and /dev/null differ diff --git a/myTracks/libs/google-play-services.jar b/myTracks/libs/google-play-services.jar deleted file mode 100644 index 7839fe301..000000000 Binary files a/myTracks/libs/google-play-services.jar and /dev/null differ diff --git a/myTracks/libs/gson-2.1.jar b/myTracks/libs/gson-2.1.jar deleted file mode 100644 index 83c5c994b..000000000 Binary files a/myTracks/libs/gson-2.1.jar and /dev/null differ diff --git a/myTracks/libs/guava-jdk5-13.0.jar b/myTracks/libs/guava-jdk5-13.0.jar deleted file mode 100644 index 85881e5de..000000000 Binary files a/myTracks/libs/guava-jdk5-13.0.jar and /dev/null differ diff --git a/myTracks/libs/jackson-core-2.0.5.jar b/myTracks/libs/jackson-core-2.0.5.jar deleted file mode 100644 index 51d1fdeb4..000000000 Binary files a/myTracks/libs/jackson-core-2.0.5.jar and /dev/null differ diff --git a/myTracks/libs/jackson-core-asl-1.9.9.jar b/myTracks/libs/jackson-core-asl-1.9.9.jar deleted file mode 100644 index d75843d1c..000000000 Binary files a/myTracks/libs/jackson-core-asl-1.9.9.jar and /dev/null differ diff --git a/myTracks/libs/jsr305.jar b/myTracks/libs/jsr305.jar deleted file mode 100644 index cf5f56167..000000000 Binary files a/myTracks/libs/jsr305.jar and /dev/null differ diff --git a/myTracks/libs/libGoogleAnalytics.jar b/myTracks/libs/libGoogleAnalytics.jar deleted file mode 100644 index 78d47a72a..000000000 Binary files a/myTracks/libs/libGoogleAnalytics.jar and /dev/null differ diff --git a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java index c610fd651..bd8f9f8d5 100644 --- a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java +++ b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java @@ -15,8 +15,6 @@ */ package com.google.android.apps.mytracks.io.backup; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; - import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.test.AndroidTestCase; diff --git a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java index 1ebf39ced..03ea6270e 100644 --- a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java +++ b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java @@ -23,7 +23,6 @@ import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint.WaypointType; import com.google.android.apps.mytracks.content.WaypointCreationRequest; import com.google.android.apps.mytracks.stats.TripStatistics; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.GoogleLocationUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; diff --git a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/PolarMessageParserTest.java b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/PolarMessageParserTest.java index bcc6fe555..db1172b87 100644 --- a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/PolarMessageParserTest.java +++ b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/PolarMessageParserTest.java @@ -1,10 +1,11 @@ package com.google.android.apps.mytracks.services.sensors; import com.google.android.apps.mytracks.content.Sensor; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import junit.framework.TestCase; +import java.util.Arrays; + public class PolarMessageParserTest extends TestCase { PolarMessageParser parser = new PolarMessageParser(); @@ -16,7 +17,7 @@ public class PolarMessageParserTest extends TestCase { private byte[] buf; public void setUp() { - buf = ApiAdapterFactory.getApiAdapter().copyByteArray(originalBuf, 0, originalBuf.length); + buf = Arrays.copyOfRange(originalBuf, 0, originalBuf.length); } public void testIsValid() { diff --git a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java index 4c920bb59..48a1043d9 100644 --- a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java +++ b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java @@ -1,7 +1,6 @@ package com.google.android.apps.mytracks.services.sensors; import com.google.android.apps.mytracks.Constants; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractMyTracksActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractMyTracksActivity.java index 02015bbc9..e4c3353f0 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractMyTracksActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractMyTracksActivity.java @@ -16,9 +16,9 @@ package com.google.android.apps.mytracks; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.TrackIconUtils; +import android.app.ActionBar; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.support.v4.app.FragmentActivity; @@ -39,26 +39,18 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity { // Set volume control stream for text to speech setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM); - // Hide title must be before setContentView - if (hideTitle()) { - ApiAdapterFactory.getApiAdapter().hideTitle(this); - } - setContentView(getLayoutResId()); // Configure action bar must be after setContentView if (configureActionBarHomeAsUp()) { - ApiAdapterFactory.getApiAdapter().configureActionBarHomeAsUp(this); + ActionBar actionBar = this.getActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } } } - /** - * Returns true to hide the title. Be default, do not hide the title. - */ - protected boolean hideTitle() { - return false; - } - /** * Gets the layout resource id. */ diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java index 56d84b39a..0d575dbb2 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java @@ -24,9 +24,22 @@ import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils; import com.google.android.maps.mytracks.R; +import android.app.Activity; +import android.app.SearchManager; +import android.content.Context; import android.content.Intent; +import android.util.SparseBooleanArray; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AbsListView; +import android.widget.ListView; +import android.widget.SearchView; import android.widget.Toast; +import java.util.ArrayList; + /** * An abstract class for the following common tasks across * {@link TrackListActivity}, {@link TrackDetailActivity}, and @@ -54,14 +67,115 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv } } - /** - * Call when not able to get permission for a google service. - */ - private void onPermissionFailure() { - Toast.makeText(this, R.string.send_google_no_account_permission, Toast.LENGTH_LONG).show(); + public static void configureListViewContextualMenu(final Activity activity, final ListView listView, + final ContextualActionModeCallback contextualActionModeCallback) { + listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); + listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + mode.getMenuInflater().inflate(R.menu.list_context_menu, menu); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + contextualActionModeCallback.onPrepare( + menu, getCheckedPositions(listView), listView.getCheckedItemIds(), true); + return true; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + // Do nothing + } + + @Override + public void onItemCheckedStateChanged( + ActionMode mode, int position, long id, boolean checked) { + mode.invalidate(); + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (contextualActionModeCallback.onClick( + item.getItemId(), getCheckedPositions(listView), listView.getCheckedItemIds())) { + mode.finish(); + } + return true; + } + + /** + * Gets the checked positions in a list view. + * + * @param list the list view + */ + private int[] getCheckedPositions(ListView list) { + SparseBooleanArray positions = list.getCheckedItemPositions(); + ArrayList arrayList = new ArrayList(); + for (int i = 0; i < positions.size(); i++) { + int key = positions.keyAt(i); + if (positions.valueAt(i)) { + arrayList.add(key); + } + } + int[] result = new int[arrayList.size()]; + for (int i = 0; i < arrayList.size(); i++) { + result[i] = arrayList.get(i); + } + return result; + } + }); } - - /** + + public static void configureSearchWidget( + Activity activity, final MenuItem menuItem, final TrackController trackController) { + SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE); + SearchView searchView = (SearchView) menuItem.getActionView(); + searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName())); + searchView.setQueryRefinementEnabled(true); + searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + // Hide and show trackController when search widget has focus/no focus + if (trackController != null) { + if (hasFocus) { + trackController.hide(); + } else { + trackController.show(); + } + } + } + }); + + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + menuItem.collapseActionView(); + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + return false; + } + }); + searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { + @Override + public boolean onSuggestionSelect(int position) { + return false; + } + + @Override + public boolean onSuggestionClick(int position) { + menuItem.collapseActionView(); + return false; + } + }); + } + + /** * Delete tracks. * * @param trackIds the track ids diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/MarkerListActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/MarkerListActivity.java index bd7a6b957..db8ca2c3c 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/MarkerListActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/MarkerListActivity.java @@ -22,7 +22,6 @@ import com.google.android.apps.mytracks.content.Waypoint.WaypointType; import com.google.android.apps.mytracks.content.WaypointsColumns; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.ListItemUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; @@ -119,7 +118,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele runOnUiThread(new Runnable() { @Override public void run() { - ApiAdapterFactory.getApiAdapter().invalidMenu(MarkerListActivity.this); + MarkerListActivity.this.invalidateOptionsMenu(); } }); } @@ -192,8 +191,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele } }; listView.setAdapter(resourceCursorAdapter); - ApiAdapterFactory.getApiAdapter() - .configureListViewContextualMenu(this, listView, contextualActionModeCallback); + AbstractSendToGoogleActivity.configureListViewContextualMenu(this, listView, contextualActionModeCallback); final long firstWaypointId = myTracksProviderUtils.getFirstWaypointId(trackId); getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks() { @@ -226,7 +224,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele @Override protected void onResume() { super.onResume(); - ApiAdapterFactory.getApiAdapter().invalidMenu(this); + this.invalidateOptionsMenu(); } @Override @@ -245,7 +243,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele getMenuInflater().inflate(R.menu.marker_list, menu); insertMarkerMenuItem = menu.findItem(R.id.marker_list_insert_marker); searchMenuItem = menu.findItem(R.id.marker_list_search); - ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, null); + AbstractSendToGoogleActivity.configureSearchWidget(this, searchMenuItem, null); return super.onCreateOptionsMenu(menu); } @@ -266,7 +264,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele startActivity(intent); return true; case R.id.marker_list_search: - return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this); + return false; default: return super.onOptionsItemSelected(item); } @@ -336,9 +334,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH && searchMenuItem != null) { - if (ApiAdapterFactory.getApiAdapter().handleSearchKey(searchMenuItem)) { - return true; - } + return true; } return super.onKeyUp(keyCode, event); } diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/SearchListActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/SearchListActivity.java index 820d52cc2..9cd51361b 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/SearchListActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/SearchListActivity.java @@ -29,7 +29,6 @@ import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.Del import com.google.android.apps.mytracks.services.MyTracksLocationManager; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.stats.TripStatistics; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.ListItemUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; @@ -39,7 +38,6 @@ import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtil import com.google.android.gms.location.LocationListener; import com.google.android.maps.mytracks.R; -import android.accounts.Account; import android.app.SearchManager; import android.content.Context; import android.content.Intent; @@ -244,8 +242,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements } }; listView.setAdapter(arrayAdapter); - ApiAdapterFactory.getApiAdapter() - .configureListViewContextualMenu(this, listView, contextualActionModeCallback); + AbstractSendToGoogleActivity.configureListViewContextualMenu(this, listView, contextualActionModeCallback); handleIntent(getIntent()); } @@ -285,7 +282,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_list, menu); searchMenuItem = menu.findItem(R.id.search_list_search); - ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, null); + AbstractSendToGoogleActivity.configureSearchWidget(this, searchMenuItem, null); return super.onCreateOptionsMenu(menu); } @@ -293,7 +290,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search_list_search: - return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this); + return false; default: return super.onOptionsItemSelected(item); } @@ -321,9 +318,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH && searchMenuItem != null) { - if (ApiAdapterFactory.getApiAdapter().handleSearchKey(searchMenuItem)) { - return true; - } + return true; } return super.onKeyUp(keyCode, event); } @@ -427,7 +422,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements @Override public void run() { arrayAdapter.clear(); - ApiAdapterFactory.getApiAdapter().addAllToArrayAdapter(arrayAdapter, displayResults); + arrayAdapter.addAll(displayResults); } }); diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/TrackDetailActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/TrackDetailActivity.java index 082b06cdd..3e76ece03 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -34,7 +34,6 @@ import com.google.android.apps.mytracks.io.file.TrackFileFormat; import com.google.android.apps.mytracks.io.file.exporter.SaveActivity; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.settings.SettingsActivity; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.CalorieUtils; import com.google.android.apps.mytracks.util.CalorieUtils.ActivityType; import com.google.android.apps.mytracks.util.FileUtils; @@ -171,7 +170,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity runOnUiThread(new Runnable() { @Override public void run() { - ApiAdapterFactory.getApiAdapter().invalidMenu(TrackDetailActivity.this); + TrackDetailActivity.this.invalidateOptionsMenu(); boolean isRecording = trackId == recordingTrackId; trackController.update(isRecording, recordingTrackPaused); } @@ -246,8 +245,10 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity } // Set the background after all three tabs are added - ApiAdapterFactory.getApiAdapter().setTabBackground(tabHost.getTabWidget()); - + for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { + tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.tab_indicator_mytracks); + } + trackController = new TrackController( this, trackRecordingServiceConnection, false, recordListener, stopListener); } @@ -269,7 +270,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity trackDataHub.loadTrack(trackId); // Update UI - ApiAdapterFactory.getApiAdapter().invalidMenu(this); + this.invalidateOptionsMenu(); boolean isRecording = trackId == recordingTrackId; trackController.onResume(isRecording, recordingTrackPaused); } @@ -315,11 +316,6 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity return R.layout.track_detail; } - @Override - protected boolean hideTitle() { - return true; - } - @Override protected void onHomeSelected() { /* @@ -347,9 +343,6 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity boolean isSharedWithMe = track != null ? track.isSharedWithMe() : true; menu.findItem(R.id.track_detail_edit).setVisible(!isSharedWithMe); - menu.findItem(R.id.track_detail_help_feedback).setTitle( - ApiAdapterFactory.getApiAdapter().isGoogleFeedbackAvailable() ? R.string.menu_help_feedback - : R.string.menu_help); insertMarkerMenuItem = menu.findItem(R.id.track_detail_insert_marker); insertPhotoMenuItem = menu.findItem(R.id.track_detail_insert_photo); diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/TrackListActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/TrackListActivity.java index eeb67764d..eea08f40e 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/TrackListActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/TrackListActivity.java @@ -16,7 +16,6 @@ package com.google.android.apps.mytracks; -import android.accounts.Account; import android.app.Dialog; import android.app.SearchManager; import android.content.Context; @@ -29,6 +28,7 @@ import android.os.Bundle; import android.os.Looper; import android.os.Parcelable; import android.os.RemoteException; +import android.os.StrictMode; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; @@ -59,7 +59,6 @@ import com.google.android.apps.mytracks.services.ITrackRecordingService; import com.google.android.apps.mytracks.services.MyTracksLocationManager; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.settings.SettingsActivity; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.GoogleLocationUtils; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.ListItemUtils; @@ -173,7 +172,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F runOnUiThread(new Runnable() { @Override public void run() { - ApiAdapterFactory.getApiAdapter().invalidMenu(TrackListActivity.this); + TrackListActivity.this.invalidateOptionsMenu(); getSupportLoaderManager().restartLoader(0, null, loaderCallbacks); boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; @@ -296,7 +295,15 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F super.onCreate(savedInstanceState); if (BuildConfig.DEBUG) { - ApiAdapterFactory.getApiAdapter().enableStrictMode(); + Log.d(TAG, "Enabling strict mode"); + StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() + .detectAll() + .penaltyLog() + .build()); + StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() + .detectAll() + .penaltyLog() + .build()); } myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); @@ -361,8 +368,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F } }; listView.setAdapter(sectionResourceCursorAdapter); - ApiAdapterFactory.getApiAdapter() - .configureListViewContextualMenu(this, listView, contextualActionModeCallback); + AbstractSendToGoogleActivity.configureListViewContextualMenu(this, listView, contextualActionModeCallback); getSupportLoaderManager().initLoader(0, null, loaderCallbacks); showStartupDialogs(); @@ -387,7 +393,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F super.onResume(); // Update UI - ApiAdapterFactory.getApiAdapter().invalidMenu(this); + this.invalidateOptionsMenu(); getSupportLoaderManager().restartLoader(0, null, loaderCallbacks); boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; trackController.onResume(isRecording, recordingTrackPaused); @@ -435,7 +441,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F getMenuInflater().inflate(R.menu.track_list, menu); searchMenuItem = menu.findItem(R.id.track_list_search); - ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, trackController); + AbstractSendToGoogleActivity.configureSearchWidget(this, searchMenuItem, trackController); startGpsMenuItem = menu.findItem(R.id.track_list_start_gps); aggregatedStatisticsMenuItem = menu.findItem(R.id.track_list_aggregated_statistics); @@ -459,7 +465,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F Intent intent; switch (item.getItemId()) { case R.id.track_list_search: - return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this); + return false; case R.id.track_list_start_gps: MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager( this, Looper.myLooper(), false); @@ -494,7 +500,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F } // Update menu after starting or stopping gps - ApiAdapterFactory.getApiAdapter().invalidMenu(this); + this.invalidateOptionsMenu(); } myTracksLocationManager.close(); return true; @@ -546,9 +552,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH && searchMenuItem != null) { - if (ApiAdapterFactory.getApiAdapter().handleSearchKey(searchMenuItem)) { - return true; - } + return true; } return super.onKeyUp(keyCode, event); } diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelper.java b/myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelper.java index 11c658ffe..c94bbdca1 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelper.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelper.java @@ -16,7 +16,6 @@ package com.google.android.apps.mytracks.io.backup; import com.google.android.apps.mytracks.content.ContentTypeIds; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.maps.mytracks.R; import android.annotation.SuppressLint; @@ -133,7 +132,7 @@ public class PreferenceBackupHelper { byte typeId = reader.readByte(); readAndSetPreference(name, typeId, reader, editor); } - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + editor.apply(); } /** diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/BluetoothConnectionManager.java b/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/BluetoothConnectionManager.java index e22679bac..c39abf194 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/BluetoothConnectionManager.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/BluetoothConnectionManager.java @@ -18,7 +18,6 @@ package com.google.android.apps.mytracks.services.sensors; import com.google.android.apps.mytracks.content.Sensor; import com.google.android.apps.mytracks.content.Sensor.SensorState; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; @@ -161,11 +160,21 @@ public class BluetoothConnectionManager { setName("ConnectThread-" + device.getName()); this.bluetoothDevice = device; BluetoothSocket tmp = null; + try { - tmp = ApiAdapterFactory.getApiAdapter().getBluetoothSocket(device); + tmp = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(BluetoothConnectionManager.MY_TRACKS_UUID); } catch (IOException e) { - Log.e(TAG, "Unable to get blueooth socket.", e); + Log.d(TAG, "Unable to create insecure connection", e); } + + if (tmp == null) { + try { + tmp = bluetoothDevice.createRfcommSocketToServiceRecord(BluetoothConnectionManager.MY_TRACKS_UUID); + } catch (IOException e) { + Log.e(TAG, "Unable to get blueooth socket.", e); + } + } + bluetoothSocket = tmp; } diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/ZephyrMessageParser.java b/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/ZephyrMessageParser.java index a8354ee95..9ddbecfcf 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/ZephyrMessageParser.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/services/sensors/ZephyrMessageParser.java @@ -16,7 +16,6 @@ package com.google.android.apps.mytracks.services.sensors; import com.google.android.apps.mytracks.content.Sensor; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import java.util.Arrays; @@ -62,7 +61,7 @@ public class ZephyrMessageParser implements MessageParser { // 0x1A00316550003162 produces erroneous values for Cadence and needs // a workaround based on the stride counter. // Firmware values range from field 3 to 10 (inclusive) of the byte buffer. - byte[] hardwareFirmwareId = ApiAdapterFactory.getApiAdapter().copyByteArray(buffer, 3, 11); + byte[] hardwareFirmwareId = Arrays.copyOfRange(buffer, 3, 11); Sensor.SensorData.Builder cadence = Sensor.SensorData.newBuilder(); if (Arrays.equals(hardwareFirmwareId, CADENCE_BUG_FW_ID)) { diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java index 70497e42d..f4e5f6b2a 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java @@ -18,9 +18,9 @@ package com.google.android.apps.mytracks.settings; import com.google.android.apps.mytracks.Constants; import com.google.android.apps.mytracks.io.backup.BackupPreferencesListener; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.maps.mytracks.R; +import android.app.ActionBar; import android.content.Context; import android.os.Bundle; import android.preference.ListPreference; @@ -45,7 +45,12 @@ public class AbstractSettingsActivity extends PreferenceActivity { protected void onCreate(Bundle bundle) { super.onCreate(bundle); setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM); - ApiAdapterFactory.getApiAdapter().configureActionBarHomeAsUp(this); + + ActionBar actionBar = this.getActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } PreferenceManager preferenceManager = getPreferenceManager(); preferenceManager.setSharedPreferencesName(Constants.SETTINGS_NAME); diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api10Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api10Adapter.java deleted file mode 100644 index 9aed58e25..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api10Adapter.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.services.sensors.BluetoothConnectionManager; - -import android.annotation.TargetApi; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothSocket; -import android.util.Log; - -import java.io.IOException; - -/** - * API level 10 specific implementation of the {@link ApiAdapter}. - * - * @author Jimmy Shih - */ -@TargetApi(10) -public class Api10Adapter extends Api9Adapter { - - private static final String TAG = Api10Adapter.class.getSimpleName(); - - @Override - public BluetoothSocket getBluetoothSocket(BluetoothDevice bluetoothDevice) throws IOException { - try { - return bluetoothDevice.createInsecureRfcommSocketToServiceRecord( - BluetoothConnectionManager.MY_TRACKS_UUID); - } catch (IOException e) { - Log.d(TAG, "Unable to create insecure connection", e); - } - return bluetoothDevice.createRfcommSocketToServiceRecord(BluetoothConnectionManager.MY_TRACKS_UUID); - }; -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api11Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api11Adapter.java deleted file mode 100644 index 381eb3908..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api11Adapter.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.ContextualActionModeCallback; -import com.google.android.apps.mytracks.TrackController; -import com.google.android.maps.mytracks.R; - -import android.annotation.TargetApi; -import android.app.ActionBar; -import android.app.Activity; -import android.app.SearchManager; -import android.content.Context; -import android.util.SparseBooleanArray; -import android.view.ActionMode; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.AbsListView.MultiChoiceModeListener; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.SearchView; -import android.widget.TabWidget; - -import java.util.ArrayList; -import java.util.List; - -/** - * API level 11 specific implementation of the {@link ApiAdapter}. - * - * @author Jimmy Shih - */ -@TargetApi(11) -public class Api11Adapter extends Api10Adapter { - - @Override - public void hideTitle(Activity activity) { - // Do nothing - } - - @Override - public void configureActionBarHomeAsUp(Activity activity) { - ActionBar actionBar = activity.getActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - } - } - - @Override - public void configureListViewContextualMenu(final Activity activity, final ListView listView, - final ContextualActionModeCallback contextualActionModeCallback) { - listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); - listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { - - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - mode.getMenuInflater().inflate(R.menu.list_context_menu, menu); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - contextualActionModeCallback.onPrepare( - menu, getCheckedPositions(listView), listView.getCheckedItemIds(), true); - return true; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - // Do nothing - } - - @Override - public void onItemCheckedStateChanged( - ActionMode mode, int position, long id, boolean checked) { - mode.invalidate(); - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - if (contextualActionModeCallback.onClick( - item.getItemId(), getCheckedPositions(listView), listView.getCheckedItemIds())) { - mode.finish(); - } - return true; - } - - /** - * Gets the checked positions in a list view. - * - * @param list the list view - */ - private int[] getCheckedPositions(ListView list) { - SparseBooleanArray positions = list.getCheckedItemPositions(); - ArrayList arrayList = new ArrayList(); - for (int i = 0; i < positions.size(); i++) { - int key = positions.keyAt(i); - if (positions.valueAt(i)) { - arrayList.add(key); - } - } - int[] result = new int[arrayList.size()]; - for (int i = 0; i < arrayList.size(); i++) { - result[i] = arrayList.get(i); - } - return result; - } - }); - } - - @Override - public void configureSearchWidget( - Activity activity, MenuItem menuItem, final TrackController trackController) { - SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE); - SearchView searchView = (SearchView) menuItem.getActionView(); - searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName())); - searchView.setQueryRefinementEnabled(true); - searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { - - @Override - public void onFocusChange(View v, boolean hasFocus) { - // Hide and show trackController when search widget has focus/no focus - if (trackController != null) { - if (hasFocus) { - trackController.hide(); - } else { - trackController.show(); - } - } - } - }); - } - - @Override - public boolean handleSearchMenuSelection(Activity activity) { - // Returns false to allow the platform to expand the search widget. - return false; - } - - @Override - public void addAllToArrayAdapter(ArrayAdapter arrayAdapter, List items) { - arrayAdapter.addAll(items); - } - - @Override - public void invalidMenu(Activity activity) { - activity.invalidateOptionsMenu(); - } - - @Override - public void setTabBackground(TabWidget tabWidget) { - for (int i = 0; i < tabWidget.getChildCount(); i++) { - tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_indicator_mytracks); - } - } - - @Override - public boolean hasDialogTitleDivider() { - return true; - } - - @Override - public void setTitleAndSubtitle(Activity activity, String title, String subtitle) { - ActionBar actionBar = activity.getActionBar(); - actionBar.setTitle(title); - actionBar.setSubtitle(subtitle); - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api14Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api14Adapter.java deleted file mode 100644 index 9b5cc5f7d..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api14Adapter.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.TrackController; - -import android.annotation.TargetApi; -import android.app.ActionBar; -import android.app.Activity; -import android.view.MenuItem; -import android.widget.SearchView; - -/** - * API level 14 specific implementation of the {@link ApiAdapter}. - * - * @author Jimmy Shih - */ -@TargetApi(14) -public class Api14Adapter extends Api11Adapter { - - @Override - public void configureActionBarHomeAsUp(Activity activity) { - ActionBar actionBar = activity.getActionBar(); - if (actionBar != null) { - actionBar.setHomeButtonEnabled(true); - actionBar.setDisplayHomeAsUpEnabled(true); - } - } - - @Override - public void configureSearchWidget( - Activity activity, final MenuItem menuItem, TrackController trackController) { - super.configureSearchWidget(activity, menuItem, trackController); - SearchView searchView = (SearchView) menuItem.getActionView(); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - menuItem.collapseActionView(); - return false; - } - - @Override - public boolean onQueryTextChange(String newText) { - return false; - } - }); - searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { - @Override - public boolean onSuggestionSelect(int position) { - return false; - } - - @Override - public boolean onSuggestionClick(int position) { - menuItem.collapseActionView(); - return false; - } - }); - } - - @Override - public boolean handleSearchKey(MenuItem menuItem) { - menuItem.expandActionView(); - return true; - } - - @Override - public boolean isGoogleFeedbackAvailable() { - return true; - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api16Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api16Adapter.java deleted file mode 100644 index 1defe951b..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api16Adapter.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.widgets.TrackWidgetProvider; - -import android.annotation.TargetApi; -import android.appwidget.AppWidgetManager; -import android.os.Bundle; -import android.view.ViewTreeObserver; -import android.view.ViewTreeObserver.OnGlobalLayoutListener; - -/** - * API level 16 specific implementation of the {@link ApiAdapter}. - * - * @author Jimmy Shih - */ -@TargetApi(16) -public class Api16Adapter extends Api14Adapter { - - private static final String APP_WIDGET_SIZE_KEY = "app_widget_size_key"; - - @Override - public int getAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId) { - Bundle bundle = appWidgetManager.getAppWidgetOptions(appWidgetId); - return bundle.getInt(APP_WIDGET_SIZE_KEY, getAppWidgetSizeDefault(bundle)); - } - - @SuppressWarnings("unused") - protected int getAppWidgetSizeDefault(Bundle bundle) { - return TrackWidgetProvider.HOME_SCREEN_DEFAULT_SIZE; - } - - @Override - public void setAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId, int size) { - Bundle bundle = new Bundle(); - bundle.putInt(APP_WIDGET_SIZE_KEY, size); - appWidgetManager.updateAppWidgetOptions(appWidgetId, bundle); - } - - @Override - public void removeGlobalLayoutListener( - ViewTreeObserver observer, OnGlobalLayoutListener listener) { - observer.removeOnGlobalLayoutListener(listener); - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api17Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api17Adapter.java deleted file mode 100644 index e791ebac4..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api17Adapter.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.widgets.TrackWidgetProvider; - -import android.annotation.TargetApi; -import android.appwidget.AppWidgetManager; -import android.appwidget.AppWidgetProviderInfo; -import android.os.Bundle; - -/** - * API level 17 specific implementation of the {@link ApiAdapter}. - * - * @author Jimmy Shih - */ -@TargetApi(17) -public class Api17Adapter extends Api16Adapter { - - @Override - protected int getAppWidgetSizeDefault(Bundle bundle) { - boolean isKeyguard = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, -1) - == AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD; - return isKeyguard ? TrackWidgetProvider.KEYGUARD_DEFAULT_SIZE - : TrackWidgetProvider.HOME_SCREEN_DEFAULT_SIZE; - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api19Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api19Adapter.java deleted file mode 100644 index 9fc2f4eca..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api19Adapter.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.android.apps.mytracks.util; - -import android.annotation.TargetApi; - -/** - * API level 19 specific implementation of the {@link ApiAdapter}. - * - * @author Jimmy Shih - */ -@TargetApi(19) -public class Api19Adapter extends Api17Adapter { - - @Override - public boolean hasLocationMode() { - return true; - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api8Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api8Adapter.java deleted file mode 100644 index 83ad50ea8..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api8Adapter.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.ContextualActionModeCallback; -import com.google.android.apps.mytracks.TrackController; -import com.google.android.apps.mytracks.services.sensors.BluetoothConnectionManager; -import com.google.android.apps.mytracks.widgets.TrackWidgetProvider; -import com.google.api.client.http.HttpTransport; -import com.google.api.client.http.apache.ApacheHttpTransport; - -import android.app.Activity; -import android.appwidget.AppWidgetManager; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothSocket; -import android.content.SharedPreferences.Editor; -import android.util.Log; -import android.view.MenuItem; -import android.view.ViewTreeObserver; -import android.view.ViewTreeObserver.OnGlobalLayoutListener; -import android.view.Window; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TabWidget; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.List; - -/** - * API level 8 specific implementation of the {@link ApiAdapter}. - * - * @author Bartlomiej Niechwiej - */ -public class Api8Adapter implements ApiAdapter { - - private static final String TAG = Api8Adapter.class.getSimpleName(); - - @Override - public void applyPreferenceChanges(Editor editor) { - editor.commit(); - } - - @Override - public void enableStrictMode() { - // Not supported - } - - @Override - public byte[] copyByteArray(byte[] input, int start, int end) { - int length = end - start; - byte[] output = new byte[length]; - System.arraycopy(input, start, output, 0, length); - return output; - } - - @Override - public HttpTransport getHttpTransport() { - return new ApacheHttpTransport(); - } - - @Override - public boolean isGeoCoderPresent() { - return true; - } - - @Override - public boolean revertMenuIconColor() { - return true; - } - - @Override - public BluetoothSocket getBluetoothSocket(BluetoothDevice bluetoothDevice) throws IOException { - try { - Class c = bluetoothDevice.getClass(); - Method insecure = c.getMethod("createInsecureRfcommSocket", Integer.class); - insecure.setAccessible(true); - return (BluetoothSocket) insecure.invoke(bluetoothDevice, 1); - } catch (SecurityException e) { - Log.d(TAG, "Unable to create insecure connection", e); - } catch (NoSuchMethodException e) { - Log.d(TAG, "Unable to create insecure connection", e); - } catch (IllegalArgumentException e) { - Log.d(TAG, "Unable to create insecure connection", e); - } catch (IllegalAccessException e) { - Log.d(TAG, "Unable to create insecure connection", e); - } catch (InvocationTargetException e) { - Log.d(TAG, "Unable to create insecure connection", e); - } - return bluetoothDevice.createRfcommSocketToServiceRecord( - BluetoothConnectionManager.MY_TRACKS_UUID); - } - - @Override - public void hideTitle(Activity activity) { - activity.requestWindowFeature(Window.FEATURE_NO_TITLE); - } - - @Override - public void configureActionBarHomeAsUp(Activity activity) { - // Do nothing - } - - @Override - public void configureListViewContextualMenu(Activity activity, ListView listView, - ContextualActionModeCallback contextualActionModeCallback) { - activity.registerForContextMenu(listView); - } - - @Override - public void configureSearchWidget( - Activity activity, MenuItem menuItem, TrackController trackController) { - // Do nothing - } - - @Override - public boolean handleSearchMenuSelection(Activity activity) { - activity.onSearchRequested(); - return true; - } - - @Override - public void addAllToArrayAdapter(ArrayAdapter arrayAdapter, List items) { - for (T item : items) { - arrayAdapter.add(item); - } - } - - @Override - public void invalidMenu(Activity activity) { - // Do nothing - } - - @Override - public void setTabBackground(TabWidget tabWidget) { - // Do nothing - } - - @Override - public boolean hasDialogTitleDivider() { - return false; - } - - @Override - public void setTitleAndSubtitle(Activity activity, String title, String subtitle) { - activity.setTitle(title + " " + subtitle); - } - - @Override - public boolean handleSearchKey(MenuItem menuItem) { - // Return false and allow the framework to handle the search key. - return false; - } - - @Override - public boolean isGoogleFeedbackAvailable() { - return false; - } - - @Override - public int getAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId) { - return TrackWidgetProvider.HOME_SCREEN_DEFAULT_SIZE; - } - - @Override - public void setAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId, int size) { - // Do nothing - } - - @SuppressWarnings("deprecation") - @Override - public void removeGlobalLayoutListener( - ViewTreeObserver observer, OnGlobalLayoutListener listener) { - observer.removeGlobalOnLayoutListener(listener); - } - - @Override - public boolean hasLocationMode() { - return false; - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api9Adapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api9Adapter.java deleted file mode 100644 index 667509578..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/Api9Adapter.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.android.apps.mytracks.util; - -import com.google.api.client.http.HttpTransport; -import com.google.api.client.http.javanet.NetHttpTransport; - -import android.annotation.TargetApi; -import android.content.SharedPreferences.Editor; -import android.location.Geocoder; -import android.os.StrictMode; -import android.util.Log; - -import java.util.Arrays; - -/** - * API level 9 specific implementation of the {@link ApiAdapter}. - * - * @author Rodrigo Damazio - */ -@TargetApi(9) -public class Api9Adapter extends Api8Adapter { - - private static final String TAG = Api9Adapter.class.getSimpleName(); - - @Override - public void applyPreferenceChanges(Editor editor) { - // Apply asynchronously - editor.apply(); - } - - @Override - public void enableStrictMode() { - Log.d(TAG, "Enabling strict mode"); - StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() - .detectAll() - .penaltyLog() - .build()); - StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() - .detectAll() - .penaltyLog() - .build()); - } - - @Override - public byte[] copyByteArray(byte[] input, int start, int end) { - return Arrays.copyOfRange(input, start, end); - } - - @Override - public HttpTransport getHttpTransport() { - return new NetHttpTransport(); - } - - @Override - public boolean isGeoCoderPresent() { - return Geocoder.isPresent(); - } - - @Override - public boolean revertMenuIconColor() { - return false; - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/ApiAdapter.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/ApiAdapter.java deleted file mode 100644 index b55e10245..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/ApiAdapter.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.android.apps.mytracks.util; - -import com.google.android.apps.mytracks.ContextualActionModeCallback; -import com.google.android.apps.mytracks.TrackController; -import com.google.api.client.http.HttpTransport; - -import android.app.Activity; -import android.appwidget.AppWidgetManager; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothSocket; -import android.content.SharedPreferences; -import android.view.MenuItem; -import android.view.ViewTreeObserver; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TabWidget; - -import java.io.IOException; -import java.util.List; - -/** - * A set of methods that may be implemented differently depending on the Android - * API level. - * - * @author Bartlomiej Niechwiej - */ -public interface ApiAdapter { - - /** - * Applies all the changes done to a given preferences editor. Changes may or - * may not be applied immediately. - *

- * Due to changes in API level 9. - * - * @param editor the editor - */ - public void applyPreferenceChanges(SharedPreferences.Editor editor); - - /** - * Enables strict mode where supported, only if this is a development build. - *

- * Due to changes in API level 9. - */ - public void enableStrictMode(); - - /** - * Copies elements from an input byte array into a new byte array, from - * indexes start (inclusive) to end (exclusive). The end index must be less - * than or equal to the input length. - *

- * Due to changes in API level 9. - * - * @param input the input byte array - * @param start the start index - * @param end the end index - * @return a new array containing elements from the input byte array. - */ - public byte[] copyByteArray(byte[] input, int start, int end); - - /** - * Gets a {@link HttpTransport}. - *

- * Due to changes in API level 9. - */ - public HttpTransport getHttpTransport(); - - /** - * Returns true if GeoCoder is present. - *

- * Due to changes in API level 9. - */ - public boolean isGeoCoderPresent(); - - /** - * Returns true to revert menu icon color. - *

- * Due to changes in API level 9. - */ - public boolean revertMenuIconColor(); - - /** - * Gets a {@link BluetoothSocket}. - *

- * Due to changes in API level 10. - * - * @param bluetoothDevice - */ - public BluetoothSocket getBluetoothSocket(BluetoothDevice bluetoothDevice) throws IOException; - - /** - * Hides the title. If the platform supports the action bar, do nothing. - * Ideally, with the action bar, we would like to collapse the navigation tabs - * into the action bar. However, collapsing is not supported by the - * compatibility library. - *

- * Due to changes in API level 11. - * - * @param activity the activity - */ - public void hideTitle(Activity activity); - - /** - * Configures the action bar with the Home button as an Up button. If the - * platform doesn't support the action bar, do nothing. - *

- * Due to changes in API level 11. - * - * @param activity the activity - */ - public void configureActionBarHomeAsUp(Activity activity); - - /** - * Configures the list view context menu. - *

- * Due to changes in API level 11. - * - * @param activity the activity - * @param listView the list view - * @param contextualActionModeCallback the callback when an item is selected - * in the contextual action mode - */ - public void configureListViewContextualMenu(Activity activity, ListView listView, - ContextualActionModeCallback contextualActionModeCallback); - - /** - * Configures the search widget. - *

- * Due to changes in API level 11. - * - * @param activity the activity - * @param menuItem the search menu item - * @param trackController the track controller to hide/show when search widget - * is expanded/collapsed. Can be null - */ - public void configureSearchWidget( - Activity activity, MenuItem menuItem, TrackController trackController); - - /** - * Handles the search menu selection. Returns true if handled. - *

- * Due to changes in API level 11. - * - * @param activity the activity - */ - public boolean handleSearchMenuSelection(Activity activity); - - /** - * Adds all items to an array adapter. - *

- * Due to changes in API level 11. - * - * @param arrayAdapter the array adapter - * @param items list of items - */ - public void addAllToArrayAdapter(ArrayAdapter arrayAdapter, List items); - - /** - * Invalidates the menu. - *

- * Due to changes in API level 11. - */ - public void invalidMenu(Activity activity); - - /** - * Sets the tab background. - *

- * Due to changes in API level 11. - * - * @param tabWidget the tab widget - */ - public void setTabBackground(TabWidget tabWidget); - - /** - * Returns true if has dialog title divider. - *

- * Due to changes in API level 11. - */ - public boolean hasDialogTitleDivider(); - - /** - * Sets title and subtitle. - *

- * Due to changes in API level 11; - */ - public void setTitleAndSubtitle(Activity activity, String title, String subtitle); - - /** - * Handles the search key press. Returns true if handled. - *

- * Due to changes in API level 14. - * - * @param menu the search menu - */ - public boolean handleSearchKey(MenuItem menu); - - /** - * Returns true if Google Feedback is available. - *

- * Due to changes in ApI level 14. - */ - public boolean isGoogleFeedbackAvailable(); - - /** - * Gets the app widget size. - *

- * Due to changes in API level 16. - * - * @param appWidgetManager the app widget manager - * @param appWidgetId the app widget id - */ - public int getAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId); - - /** - * Sets the app widget size. - *

- * Due to changes in API level 16. - * - * @param appWidgetManager the app widget manager. - * @param appWidgetId the app widgit id - * @param size the size - */ - public void setAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId, int size); - - /** - * Removes the global layout listener. - *

- * Due to changes in API level 16. - * - * @param observer the observer - * @param listener the listener - */ - public void removeGlobalLayoutListener( - ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener); - - /** - * Returns true if has location mode. - *

- * Due to changes in API level 19. - */ - public boolean hasLocationMode(); -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/ApiAdapterFactory.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/ApiAdapterFactory.java deleted file mode 100644 index 7a55afd8b..000000000 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/ApiAdapterFactory.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.android.apps.mytracks.util; - -import android.os.Build; - -/** - * A factory to get the {@link ApiAdapter} for the current device. - * - * @author Rodrigo Damazio - */ -public class ApiAdapterFactory { - - private static ApiAdapter apiAdapter; - - /** - * Gets the {@link ApiAdapter} for the current device. - */ - public static ApiAdapter getApiAdapter() { - if (apiAdapter == null) { - if (Build.VERSION.SDK_INT >= 19) { - apiAdapter = new Api19Adapter(); - } else if (Build.VERSION.SDK_INT >= 17) { - apiAdapter = new Api17Adapter(); - } else if (Build.VERSION.SDK_INT >= 16) { - apiAdapter = new Api16Adapter(); - } else if (Build.VERSION.SDK_INT >= 14) { - apiAdapter = new Api14Adapter(); - } else if (Build.VERSION.SDK_INT >= 11) { - apiAdapter = new Api11Adapter(); - } else if (Build.VERSION.SDK_INT >= 10) { - apiAdapter = new Api10Adapter(); - } else if (Build.VERSION.SDK_INT >= 9) { - apiAdapter = new Api9Adapter(); - } else { - apiAdapter = new Api8Adapter(); - } - } - return apiAdapter; - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/DialogUtils.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/DialogUtils.java index 1b6b2e960..c63d1c0de 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/DialogUtils.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/util/DialogUtils.java @@ -127,36 +127,34 @@ public class DialogUtils { * @param dialog the dialog */ public static void setDialogTitleDivider(Context context, Dialog dialog) { - if (ApiAdapterFactory.getApiAdapter().hasDialogTitleDivider()) { - try { - ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView(); - if (decorView == null) { - return; - } - FrameLayout windowContentView = (FrameLayout) decorView.getChildAt(0); - if (windowContentView == null) { - return; - } - FrameLayout contentView = (FrameLayout) windowContentView.getChildAt(0); - if (contentView == null) { - return; - } - LinearLayout parentPanel = (LinearLayout) contentView.getChildAt(0); - if (parentPanel == null) { - return; - } - LinearLayout topPanel = (LinearLayout) parentPanel.getChildAt(0); - if (topPanel == null) { - return; - } - View titleDivider = topPanel.getChildAt(2); - if (titleDivider == null) { - return; - } - titleDivider.setBackgroundColor(context.getResources().getColor(R.color.holo_orange_dark)); - } catch (Exception e) { - // Can safely ignore + try { + ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView(); + if (decorView == null) { + return; } + FrameLayout windowContentView = (FrameLayout) decorView.getChildAt(0); + if (windowContentView == null) { + return; + } + FrameLayout contentView = (FrameLayout) windowContentView.getChildAt(0); + if (contentView == null) { + return; + } + LinearLayout parentPanel = (LinearLayout) contentView.getChildAt(0); + if (parentPanel == null) { + return; + } + LinearLayout topPanel = (LinearLayout) parentPanel.getChildAt(0); + if (topPanel == null) { + return; + } + View titleDivider = topPanel.getChildAt(2); + if (titleDivider == null) { + return; + } + titleDivider.setBackgroundColor(context.getResources().getColor(R.color.holo_orange_dark)); + } catch (Exception e) { + // Can safely ignore } } } diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/GoogleLocationUtils.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/GoogleLocationUtils.java index dabac6251..2b5fd7f05 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/GoogleLocationUtils.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/util/GoogleLocationUtils.java @@ -75,9 +75,7 @@ public class GoogleLocationUtils { * @param context the context */ public static String getGpsDisabledMessage(Context context) { - int id = ApiAdapterFactory.getApiAdapter().hasLocationMode() ? R.string.gps_disabled_location_mode - : R.string.gps_disabled; - return context.getString(id, getLocationSettingsName(context)); + return context.getString(R.string.gps_disabled_location_mode, getLocationSettingsName(context)); } /** @@ -86,9 +84,7 @@ public class GoogleLocationUtils { * @param context the context */ public static String getGpsDisabledMyLocationMessage(Context context) { - int id = ApiAdapterFactory.getApiAdapter().hasLocationMode() ? R.string.gps_disabled_my_location_location_mode - : R.string.gps_disabled_my_location; - return context.getString(id, getLocationSettingsName(context)); + return context.getString(R.string.gps_disabled_my_location_location_mode, getLocationSettingsName(context)); } /** @@ -113,13 +109,7 @@ public class GoogleLocationUtils { if (!isEnforceable(context)) { return true; } - if (!ApiAdapterFactory.getApiAdapter().hasLocationMode()) { - // Before KitKat - return getUseLocationForServices(context) == USE_LOCATION_FOR_SERVICES_ON; - } else { - // KitKat+ - return getUseLocationForServices(context) != USE_LOCATION_FOR_SERVICES_OFF; - } + return getUseLocationForServices(context) != USE_LOCATION_FOR_SERVICES_OFF; } /** @@ -142,13 +132,8 @@ public class GoogleLocationUtils { if (!isEnforceable(context)) { return false; } - if (!ApiAdapterFactory.getApiAdapter().hasLocationMode()) { - // Before KitKat - return true; - } else { - // KitKat+ - return getUseLocationForServices(context) == USE_LOCATION_FOR_SERVICES_OFF; - } + + return getUseLocationForServices(context) == USE_LOCATION_FOR_SERVICES_OFF; } /** diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/PreferencesUtils.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/PreferencesUtils.java index caa27dc73..9a6d96e72 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/PreferencesUtils.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/util/PreferencesUtils.java @@ -149,7 +149,7 @@ public class PreferencesUtils { Constants.SETTINGS_NAME, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); editor.putBoolean(getKey(context, keyId), value); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + editor.apply(); } /** @@ -178,7 +178,7 @@ public class PreferencesUtils { Constants.SETTINGS_NAME, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); editor.putInt(getKey(context, keyId), value); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + editor.apply(); } /** @@ -207,7 +207,7 @@ public class PreferencesUtils { Constants.SETTINGS_NAME, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); editor.putFloat(getKey(context, keyId), value); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + editor.apply(); } /** @@ -235,7 +235,7 @@ public class PreferencesUtils { Constants.SETTINGS_NAME, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); editor.putLong(getKey(context, keyId), value); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + editor.apply(); } /** @@ -264,7 +264,7 @@ public class PreferencesUtils { Constants.SETTINGS_NAME, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); editor.putString(getKey(context, keyId), value); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + editor.apply(); } /** diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackIconUtils.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackIconUtils.java index 9ad9f7720..41f7fd224 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackIconUtils.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackIconUtils.java @@ -226,12 +226,10 @@ public class TrackIconUtils { * @param menu the menu */ public static void setMenuIconColor(Menu menu) { - if (ApiAdapterFactory.getApiAdapter().revertMenuIconColor()) { - int size = menu.size(); - for (int i = 0; i < size; i++) { - MenuItem menuitem = menu.getItem(i); - revertMenuIconColor(menuitem); - } + int size = menu.size(); + for (int i = 0; i < size; i++) { + MenuItem menuitem = menu.getItem(i); + revertMenuIconColor(menuitem); } } @@ -241,9 +239,7 @@ public class TrackIconUtils { * @param menuitem the menu item */ public static void setMenuIconColor(MenuItem menuitem) { - if (ApiAdapterFactory.getApiAdapter().revertMenuIconColor()) { - revertMenuIconColor(menuitem); - } + revertMenuIconColor(menuitem); } /** diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackNameUtils.java b/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackNameUtils.java index 23b6457d8..e1959dfa3 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackNameUtils.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/util/TrackNameUtils.java @@ -91,7 +91,7 @@ public class TrackNameUtils { * @param location the location */ private static String getReverseGeoCoding(Context context, Location location) { - if (location == null || !ApiAdapterFactory.getApiAdapter().isGeoCoderPresent()) { + if (location == null || !Geocoder.isPresent()) { return null; } Geocoder geocoder = new Geocoder(context); diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java b/myTracks/src/main/java/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java index 03903795f..c392967a0 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java @@ -22,7 +22,6 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.services.ControlRecordingService; import com.google.android.apps.mytracks.stats.TripStatistics; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.StringUtils; @@ -55,6 +54,8 @@ public class TrackWidgetProvider extends AppWidgetProvider { public static final int KEYGUARD_DEFAULT_SIZE = 1; public static final int HOME_SCREEN_DEFAULT_SIZE = 2; + private static final String APP_WIDGET_SIZE_KEY = "app_widget_size_key"; + private static final int TWO_CELLS = 110; private static final int THREE_CELLS = 180; private static final int FOUR_CELLS = 250; @@ -124,9 +125,13 @@ public class TrackWidgetProvider extends AppWidgetProvider { newSize = 1; } } - int size = ApiAdapterFactory.getApiAdapter().getAppWidgetSize(appWidgetManager, appWidgetId); + int size = getAppWidgetSize(appWidgetManager, appWidgetId); + if (size != newSize) { - ApiAdapterFactory.getApiAdapter().setAppWidgetSize(appWidgetManager, appWidgetId, newSize); + Bundle bundle = new Bundle(); + bundle.putInt(APP_WIDGET_SIZE_KEY, size); + appWidgetManager.updateAppWidgetOptions(appWidgetId, bundle); + updateAppWidget(context, appWidgetManager, appWidgetId, -1L); } } @@ -142,7 +147,7 @@ public class TrackWidgetProvider extends AppWidgetProvider { */ public static void updateAppWidget( Context context, AppWidgetManager appWidgetManager, int appWidgetId, long trackId) { - int size = ApiAdapterFactory.getApiAdapter().getAppWidgetSize(appWidgetManager, appWidgetId); + int size = getAppWidgetSize(appWidgetManager, appWidgetId); RemoteViews remoteViews = getRemoteViews(context, trackId, size); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } @@ -233,6 +238,17 @@ public class TrackWidgetProvider extends AppWidgetProvider { return remoteViews; } + /** + * Gets the app widget size. + * + * @param appWidgetManager the app widget manager + * @param appWidgetId the app widget id + */ + private static int getAppWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId) { + Bundle bundle = appWidgetManager.getAppWidgetOptions(appWidgetId); + return bundle.getInt(APP_WIDGET_SIZE_KEY, HOME_SCREEN_DEFAULT_SIZE); + } + /** * Sets a widget item. *