diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java index 3948b1749..1f08a21fb 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java @@ -487,7 +487,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA } public void chooseActivityType(String category) { - ChooseActivityTypeDialogFragment.newInstance(category).show(getSupportFragmentManager(), ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), category); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index df4a918fd..2d6635b99 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -28,6 +28,8 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; +import androidx.annotation.NonNull; + import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.Track; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; @@ -119,9 +121,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { - ChooseActivityTypeDialogFragment.newInstance(activityType.getText().toString()).show( - getSupportFragmentManager(), - ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), activityType.getText().toString()); } return true; } @@ -130,9 +130,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { - ChooseActivityTypeDialogFragment.newInstance(activityType.getText().toString()).show( - getSupportFragmentManager(), - ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), activityType.getText().toString()); } return true; } @@ -182,7 +180,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit } @Override - public void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString(ICON_VALUE_KEY, iconValue); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java index 60e79cf26..a1a68d418 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java @@ -16,19 +16,19 @@ package de.dennisguse.opentracks.fragments; -import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; -import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentManager; import java.util.ArrayList; import java.util.List; @@ -43,53 +43,19 @@ import de.dennisguse.opentracks.util.TrackIconUtils; */ public class ChooseActivityTypeDialogFragment extends DialogFragment { - public static final String CHOOSE_ACTIVITY_TYPE_DIALOG_TAG = "chooseActivityType"; - private static final String KEY_CATEGORY = "category"; + private static final String CHOOSE_ACTIVITY_TYPE_DIALOG_TAG = "chooseActivityType"; + private final String preselectedCategory; + + private ChooseActivityTypeDialogFragment(String preselectedCategory) { + this.preselectedCategory = preselectedCategory; + } + + public static void showDialog(FragmentManager fragmentManager, String preselectedCategory) { + new ChooseActivityTypeDialogFragment(preselectedCategory).show(fragmentManager, ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + } + private ChooseActivityTypeCaller caller; - public static ChooseActivityTypeDialogFragment newInstance(String category) { - Bundle bundle = new Bundle(); - bundle.putString(KEY_CATEGORY, category); - - ChooseActivityTypeDialogFragment fragment = new ChooseActivityTypeDialogFragment(); - fragment.setArguments(bundle); - return fragment; - } - - public static Dialog getDialog(final Context context, final String category, final ChooseActivityTypeCaller caller) { - View view = LayoutInflater.from(context).inflate(R.layout.choose_activity_type, null); - GridView gridView = view.findViewById(R.id.choose_activity_type_grid_view); - - List imageIds = new ArrayList<>(); - for (String iconValue : TrackIconUtils.getAllIconValues()) { - imageIds.add(TrackIconUtils.getIconDrawable(iconValue)); - } - - final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(imageIds); - gridView.setAdapter(imageAdapter); - - final AlertDialog alertDialog = new AlertDialog.Builder(context).setTitle(R.string.track_edit_activity_type_hint).setView(view).create(); - alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface dialog) { - int position = getPosition(context, category); - if (position != -1) { - imageAdapter.setSelected(position); - imageAdapter.notifyDataSetChanged(); - } - } - }); - - gridView.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View v, int position, long id) { - caller.onChooseActivityTypeDone(TrackIconUtils.getAllIconValues().get(position)); - alertDialog.dismiss(); - } - }); - return alertDialog; - } - private static int getPosition(Context context, String category) { if (category == null) { return -1; @@ -112,7 +78,39 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - return getDialog(getActivity(), getArguments().getString(KEY_CATEGORY), caller); + Dialog dialog = super.onCreateDialog(savedInstanceState); + + dialog.setTitle(R.string.track_edit_activity_type_hint); + return dialog; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.choose_activity_type, container); + GridView gridView = view.findViewById(R.id.choose_activity_type_grid_view); + + List imageIds = new ArrayList<>(); + for (String iconValue : TrackIconUtils.getAllIconValues()) { + imageIds.add(TrackIconUtils.getIconDrawable(iconValue)); + } + + final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(imageIds); + gridView.setAdapter(imageAdapter); + + int position = getPosition(getContext(), preselectedCategory); + if (position != -1) { + imageAdapter.setSelected(position); + imageAdapter.notifyDataSetChanged(); + } + + gridView.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View v, int position, long id) { + caller.onChooseActivityTypeDone(TrackIconUtils.getAllIconValues().get(position)); + dismiss(); + } + }); + return view; } /** @@ -126,5 +124,7 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment { * Called when choose activity type is done. */ void onChooseActivityTypeDone(String iconValue); + } + } diff --git a/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java index 327d9ce75..ffc2b6fbc 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java @@ -23,7 +23,6 @@ import android.preference.Preference; import android.preference.PreferenceActivity; import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; @@ -57,17 +56,6 @@ public class RecordingSettingsActivity extends PreferenceActivity implements Cho configListPreference(R.string.auto_resume_track_timeout_key, R.array.auto_resume_track_timeout_values, metricUnits); } - @Override - protected Dialog onCreateDialog(int id, Bundle bundle) { - if (id != DIALOG_CHOOSE_ACTIVITY) { - return null; - } - - String category = PreferencesUtils.getString( - this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT); - return ChooseActivityTypeDialogFragment.getDialog(this, category, this); - } - private void configFrequencyPreference(int key, boolean metricUnits) { ListPreference preference = (ListPreference) findPreference(getString(key)); @@ -95,7 +83,7 @@ public class RecordingSettingsActivity extends PreferenceActivity implements Cho ListPreference preference = (ListPreference) findPreference(getString(key)); @Deprecated //TODO Can we make values an int array? - String[] values = getResources().getStringArray(valueArray); + String[] values = getResources().getStringArray(valueArray); String[] options = new String[values.length]; switch (key) { case R.string.min_recording_interval_key: @@ -296,6 +284,18 @@ public class RecordingSettingsActivity extends PreferenceActivity implements Cho showDialog(DIALOG_CHOOSE_ACTIVITY); } + @Override + protected Dialog onCreateDialog(int id, Bundle bundle) { + if (id != DIALOG_CHOOSE_ACTIVITY) { + return null; + } + + String category = PreferencesUtils.getString(this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT); + //TODO ATTENTION: Need to switch to FragmentActivity before this can be used. + // ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), category); + return null; + } + @Override public void onChooseActivityTypeDone(String iconValue) { activityTypePreference.updateValue(iconValue);