Migration to Androidx PreferenceCompat.

This commit is contained in:
Dennis Guse
2019-10-17 06:00:47 +02:00
parent 50654c6baf
commit 024dd603cb
13 changed files with 80 additions and 73 deletions
@@ -19,12 +19,12 @@ package de.dennisguse.opentracks;
import android.os.Bundle; import android.os.Bundle;
import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech;
import androidx.fragment.app.FragmentActivity; import androidx.appcompat.app.AppCompatActivity;
/** /**
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public abstract class AbstractActivity extends FragmentActivity { public abstract class AbstractActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -29,9 +29,8 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.SearchView;
import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView;
import java.util.ArrayList; import java.util.ArrayList;
@@ -208,10 +207,9 @@ public abstract class AbstractListActivity extends AbstractActivity implements C
} }
/** /**
* Gets the track recording service connection. For stopping the current * Gets the track recording service connection.
* recording if need to delete the current recording track. * For stopping the current recording if need to delete the current recording track.
*/ */
@NonNull
abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection(); abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection();
/** /**
@@ -31,13 +31,14 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.ShareActionProvider;
import android.widget.TabHost; import android.widget.TabHost;
import android.widget.TabHost.TabSpec; import android.widget.TabHost.TabSpec;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.ShareActionProvider;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.view.MenuItemCompat;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.ContentProviderUtils;
@@ -318,7 +319,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
insertPhotoMenuItem.setVisible(new Intent(MediaStore.ACTION_IMAGE_CAPTURE).resolveActivity(getPackageManager()) != null); insertPhotoMenuItem.setVisible(new Intent(MediaStore.ACTION_IMAGE_CAPTURE).resolveActivity(getPackageManager()) != null);
shareMenuItem = menu.findItem(R.id.track_detail_share); shareMenuItem = menu.findItem(R.id.track_detail_share);
ShareActionProvider shareActionProvider = (ShareActionProvider) shareMenuItem.getActionProvider(); ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem);
shareActionProvider.setShareIntent(IntentUtils.newShareFileIntent(this, new long[]{trackId})); shareActionProvider.setShareIntent(IntentUtils.newShareFileIntent(this, new long[]{trackId}));
voiceFrequencyMenuItem = menu.findItem(R.id.track_detail_voice_frequency); voiceFrequencyMenuItem = menu.findItem(R.id.track_detail_voice_frequency);
@@ -392,6 +393,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
} }
return; return;
} }
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
} }
@@ -40,12 +40,13 @@ import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView; import android.widget.ListView;
import android.widget.SearchView;
import android.widget.ShareActionProvider;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.ShareActionProvider;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.view.MenuItemCompat;
import androidx.cursoradapter.widget.ResourceCursorAdapter; import androidx.cursoradapter.widget.ResourceCursorAdapter;
import androidx.loader.app.LoaderManager; import androidx.loader.app.LoaderManager;
import androidx.loader.app.LoaderManager.LoaderCallbacks; import androidx.loader.app.LoaderManager.LoaderCallbacks;
@@ -118,7 +119,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
boolean isSingleSelection = trackIds.length == 1; boolean isSingleSelection = trackIds.length == 1;
MenuItem shareMenuItem = menu.findItem(R.id.list_context_menu_share); MenuItem shareMenuItem = menu.findItem(R.id.list_context_menu_share);
ShareActionProvider shareActionProvider = (ShareActionProvider) shareMenuItem.getActionProvider(); ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem);
shareActionProvider.setShareIntent(trackIds.length == 0 ? null : IntentUtils.newShareFileIntent(TrackListActivity.this, trackIds)); shareActionProvider.setShareIntent(trackIds.length == 0 ? null : IntentUtils.newShareFileIntent(TrackListActivity.this, trackIds));
menu.findItem(R.id.list_context_menu_edit).setVisible(isSingleSelection); menu.findItem(R.id.list_context_menu_edit).setVisible(isSingleSelection);
@@ -394,10 +395,9 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
boolean isRecording = PreferencesUtils.isRecording(recordingTrackId); boolean isRecording = PreferencesUtils.isRecording(recordingTrackId);
updateMenuItems(isGpsStarted, isRecording); updateMenuItems(isGpsStarted, isRecording);
View searchView = searchMenuItem.getActionView(); SearchView searchView = (SearchView) searchMenuItem.getActionView();
if (searchView instanceof SearchView) { searchView.setQuery("", false);
((SearchView) searchView).setQuery("", false);
}
return super.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);
} }
@@ -27,9 +27,8 @@ import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView; import android.widget.AutoCompleteTextView;
import android.widget.Spinner; import android.widget.Spinner;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.DialogPreference; import androidx.preference.DialogPreference;
import androidx.preference.PreferenceDialogFragment; import androidx.preference.PreferenceDialogFragmentCompat;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
@@ -67,7 +66,7 @@ public class ActivityTypePreference extends DialogPreference {
return R.layout.preference_activity_type; return R.layout.preference_activity_type;
} }
public static class ActivityPreferenceDialog extends PreferenceDialogFragment { public static class ActivityPreferenceDialog extends PreferenceDialogFragmentCompat {
private AutoCompleteTextView textView; private AutoCompleteTextView textView;
private Spinner spinner; private Spinner spinner;
@@ -75,7 +74,7 @@ public class ActivityTypePreference extends DialogPreference {
static ActivityPreferenceDialog newInstance(String preferenceKey) { static ActivityPreferenceDialog newInstance(String preferenceKey) {
ActivityTypePreference.ActivityPreferenceDialog dialog = new ActivityTypePreference.ActivityPreferenceDialog(); ActivityTypePreference.ActivityPreferenceDialog dialog = new ActivityTypePreference.ActivityPreferenceDialog();
final Bundle bundle = new Bundle(1); final Bundle bundle = new Bundle(1);
bundle.putString(PreferenceDialogFragment.ARG_KEY, preferenceKey); bundle.putString(PreferenceDialogFragmentCompat.ARG_KEY, preferenceKey);
dialog.setArguments(bundle); dialog.setArguments(bundle);
return dialog; return dialog;
@@ -134,10 +133,7 @@ public class ActivityTypePreference extends DialogPreference {
private void showIconSelectDialog() { private void showIconSelectDialog() {
String category = PreferencesUtils.getString(getActivity(), R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT); String category = PreferencesUtils.getString(getActivity(), R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT);
ChooseActivityTypeDialogFragment.showDialog(getActivity().getSupportFragmentManager(), category);
// TODO Remove casting when upgrading to new Androidx compat.
FragmentActivity fragmentActivity = (androidx.fragment.app.FragmentActivity) getActivity();
ChooseActivityTypeDialogFragment.showDialog(fragmentActivity.getSupportFragmentManager(), category);
} }
@Override @Override
@@ -6,7 +6,7 @@ import android.util.AttributeSet;
import android.widget.Toast; import android.widget.Toast;
import androidx.preference.DialogPreference; import androidx.preference.DialogPreference;
import androidx.preference.PreferenceDialogFragment; import androidx.preference.PreferenceDialogFragmentCompat;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.PreferencesUtils;
@@ -17,12 +17,12 @@ public class ResetDialogPreference extends DialogPreference {
super(context, attrs); super(context, attrs);
} }
public static class ResetPreferenceDialog extends PreferenceDialogFragment { public static class ResetPreferenceDialog extends PreferenceDialogFragmentCompat {
static PreferenceDialogFragment newInstance(String preferenceKey) { static PreferenceDialogFragmentCompat newInstance(String preferenceKey) {
ResetPreferenceDialog dialog = new ResetPreferenceDialog(); ResetPreferenceDialog dialog = new ResetPreferenceDialog();
final Bundle bundle = new Bundle(1); final Bundle bundle = new Bundle(1);
bundle.putString(PreferenceDialogFragment.ARG_KEY, preferenceKey); bundle.putString(PreferenceDialogFragmentCompat.ARG_KEY, preferenceKey);
dialog.setArguments(bundle); dialog.setArguments(bundle);
return dialog; return dialog;
@@ -1,13 +1,13 @@
package de.dennisguse.opentracks.settings; package de.dennisguse.opentracks.settings;
import android.app.DialogFragment;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.preference.ListPreference; import androidx.preference.ListPreference;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceFragment; import androidx.preference.PreferenceFragmentCompat;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
@@ -22,7 +22,7 @@ public class SettingsActivity extends FragmentActivity implements ChooseActivity
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, prefsFragment).commit(); getSupportFragmentManager().beginTransaction().replace(android.R.id.content, prefsFragment).commit();
} }
@Override @Override
@@ -30,7 +30,7 @@ public class SettingsActivity extends FragmentActivity implements ChooseActivity
prefsFragment.setDefaultActivity(iconValue); prefsFragment.setDefaultActivity(iconValue);
} }
public static class PrefsFragment extends PreferenceFragment { public static class PrefsFragment extends PreferenceFragmentCompat {
/* /*
* Note that sharedPreferenceChangeListener cannot be an anonymous inner class. * Note that sharedPreferenceChangeListener cannot be an anonymous inner class.
@@ -62,7 +62,7 @@ public class SettingsActivity extends FragmentActivity implements ChooseActivity
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.settings); setPreferencesFromResource(R.xml.settings, rootKey);
updateUnits(); updateUnits();
} }
+13 -12
View File
@@ -13,30 +13,31 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/list_context_menu_share" android:id="@+id/list_context_menu_share"
android:actionProviderClass="android.widget.ShareActionProvider" android:title="@string/menu_share"
android:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"
android:title="@string/menu_share" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/list_context_menu_show_on_map" android:id="@+id/list_context_menu_show_on_map"
android:icon="@drawable/ic_map_24dp" android:icon="@drawable/ic_map_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_show_on_map"
android:title="@string/menu_show_on_map" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/list_context_menu_edit" android:id="@+id/list_context_menu_edit"
android:icon="@drawable/ic_edit_24dp" android:icon="@drawable/ic_edit_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_edit"
android:title="@string/menu_edit" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/list_context_menu_delete" android:id="@+id/list_context_menu_delete"
android:icon="@drawable/ic_delete_forever_24dp" android:icon="@drawable/ic_delete_forever_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_delete"
android:title="@string/menu_delete" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/list_context_menu_select_all" android:id="@+id/list_context_menu_select_all"
android:icon="@drawable/ic_select_all_24dp" android:icon="@drawable/ic_select_all_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_select_all"
android:title="@string/menu_select_all" /> app:showAsAction="ifRoom" />
</menu> </menu>
+8 -7
View File
@@ -13,20 +13,21 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/marker_detail_show_on_map" android:id="@+id/marker_detail_show_on_map"
android:icon="@drawable/ic_map_24dp" android:icon="@drawable/ic_map_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_show_on_map"
android:title="@string/menu_show_on_map" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/marker_detail_edit" android:id="@+id/marker_detail_edit"
android:icon="@drawable/ic_edit_24dp" android:icon="@drawable/ic_edit_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_edit"
android:title="@string/menu_edit" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/marker_detail_delete" android:id="@+id/marker_detail_delete"
android:icon="@drawable/ic_delete_forever_24dp" android:icon="@drawable/ic_delete_forever_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_delete"
android:title="@string/menu_delete" /> app:showAsAction="ifRoom" />
</menu> </menu>
+7 -6
View File
@@ -13,15 +13,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/marker_list_insert_marker" android:id="@+id/marker_list_insert_marker"
android:icon="@drawable/ic_marker_show_24dp" android:icon="@drawable/ic_marker_show_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_insert_marker"
android:title="@string/menu_insert_marker" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/marker_list_search" android:id="@+id/marker_list_search"
android:actionViewClass="android.widget.SearchView" android:title="@string/menu_search"
android:showAsAction="ifRoom" app:actionViewClass="androidx.appcompat.widget.SearchView"
android:title="@string/menu_search" /> app:showAsAction="ifRoom" />
</menu> </menu>
+7 -6
View File
@@ -13,29 +13,30 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/track_detail_insert_marker" android:id="@+id/track_detail_insert_marker"
android:icon="@drawable/ic_marker_add_24dp" android:icon="@drawable/ic_marker_add_24dp"
android:orderInCategory="1" android:orderInCategory="1"
android:showAsAction="ifRoom" app:showAsAction="ifRoom"
android:title="@string/menu_insert_marker" /> android:title="@string/menu_insert_marker" />
<item <item
android:id="@+id/track_detail_insert_photo" android:id="@+id/track_detail_insert_photo"
android:icon="@drawable/ic_camera_24dp" android:icon="@drawable/ic_camera_24dp"
android:orderInCategory="2" android:orderInCategory="2"
android:showAsAction="ifRoom" app:showAsAction="ifRoom"
android:title="@string/menu_insert_photo" /> android:title="@string/menu_insert_photo" />
<item <item
android:id="@+id/track_detail_menu_show_on_map" android:id="@+id/track_detail_menu_show_on_map"
android:icon="@drawable/ic_map_24dp" android:icon="@drawable/ic_map_24dp"
android:showAsAction="ifRoom" app:showAsAction="ifRoom"
android:title="@string/menu_show_on_map" /> android:title="@string/menu_show_on_map" />
<item <item
android:id="@+id/track_detail_share" android:id="@+id/track_detail_share"
android:actionProviderClass="android.widget.ShareActionProvider" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"
android:orderInCategory="4" android:orderInCategory="4"
android:showAsAction="ifRoom" app:showAsAction="ifRoom"
android:title="@string/menu_share" /> android:title="@string/menu_share" />
<item <item
android:id="@+id/track_detail_markers" android:id="@+id/track_detail_markers"
+9 -8
View File
@@ -13,23 +13,24 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/track_list_search" android:id="@+id/track_list_search"
android:actionViewClass="android.widget.SearchView" android:title="@string/menu_search"
android:showAsAction="ifRoom" app:actionViewClass="androidx.appcompat.widget.SearchView"
android:title="@string/menu_search" /> app:showAsAction="ifRoom" />
<!-- Icon and title is overwritten by TrackListActivity --> <!-- Icon and title is overwritten by TrackListActivity -->
<item <item
android:id="@+id/track_list_start_gps" android:id="@+id/track_list_start_gps"
android:icon="@drawable/ic_gps_off_24dp" android:icon="@drawable/ic_gps_off_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_start_gps"
android:title="@string/menu_start_gps" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/track_list_markers" android:id="@+id/track_list_markers"
android:icon="@drawable/ic_marker_show_24dp" android:icon="@drawable/ic_marker_show_24dp"
android:showAsAction="ifRoom" android:title="@string/menu_markers"
android:title="@string/menu_markers" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/track_list_aggregated_statistics" android:id="@+id/track_list_aggregated_statistics"
android:icon="@drawable/ic_statistics_24dp" android:icon="@drawable/ic_statistics_24dp"
+7 -1
View File
@@ -15,7 +15,8 @@ limitations under the License.
--> -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="ThemeCustom" parent="android:Theme.Holo"> <style name="ThemeCustom" parent="Theme.AppCompat">
<!-- TODO Cleanup necessary due to change to appcompat -->
<!-- Auto generated --> <!-- Auto generated -->
<item name="android:activatedBackgroundIndicator">@drawable/activated_background_holo_dark <item name="android:activatedBackgroundIndicator">@drawable/activated_background_holo_dark
</item> </item>
@@ -30,6 +31,10 @@ limitations under the License.
<item name="android:actionBarStyle">@style/ActionBarStyleCustom</item> <item name="android:actionBarStyle">@style/ActionBarStyleCustom</item>
<item name="android:actionModeBackground">@drawable/custom_action_mode_background</item> <item name="android:actionModeBackground">@drawable/custom_action_mode_background</item>
<item name="android:alertDialogTheme">@style/CustomAlertDialogTheme</item> <item name="android:alertDialogTheme">@style/CustomAlertDialogTheme</item>
<!-- <item name="colorPrimary">TODO</item>-->
<!-- <item name="colorPrimaryDark">TODO</item>-->
<item name="android:colorAccent">@color/holo_orange_dark</item> <item name="android:colorAccent">@color/holo_orange_dark</item>
</style> </style>
@@ -43,6 +48,7 @@ limitations under the License.
<item name="android:backgroundDimEnabled">false</item> <item name="android:backgroundDimEnabled">false</item>
</style> </style>
<!-- TODO Use Theme.AppCompat.Dialog after migrating to settings to fragements -->
<style name="CustomAlertDialogTheme" parent="@android:style/Theme.Holo.Dialog"> <style name="CustomAlertDialogTheme" parent="@android:style/Theme.Holo.Dialog">
<!-- From auto generated --> <!-- From auto generated -->
<item name="android:activatedBackgroundIndicator">@drawable/activated_background_holo_dark <item name="android:activatedBackgroundIndicator">@drawable/activated_background_holo_dark