193 lines
8.0 KiB
Java
193 lines
8.0 KiB
Java
package de.danoeh.antennapod.ui.screen.preferences;
|
|
|
|
import android.content.Intent;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.provider.Settings;
|
|
import android.util.Log;
|
|
import android.view.MenuItem;
|
|
|
|
import android.view.View;
|
|
import android.view.inputmethod.InputMethodManager;
|
|
|
|
import androidx.appcompat.app.ActionBar;
|
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import androidx.preference.PreferenceFragmentCompat;
|
|
|
|
import com.bytehamster.lib.preferencesearch.SearchPreferenceResult;
|
|
import com.bytehamster.lib.preferencesearch.SearchPreferenceResultListener;
|
|
|
|
import com.google.android.material.snackbar.Snackbar;
|
|
import de.danoeh.antennapod.R;
|
|
import de.danoeh.antennapod.ui.common.ThemeSwitcher;
|
|
|
|
import de.danoeh.antennapod.event.MessageEvent;
|
|
import de.danoeh.antennapod.ui.preferences.screen.AutoDownloadPreferencesFragment;
|
|
import de.danoeh.antennapod.ui.preferences.screen.NotificationPreferencesFragment;
|
|
import de.danoeh.antennapod.ui.preferences.screen.synchronization.SynchronizationPreferencesFragment;
|
|
import de.danoeh.antennapod.ui.preferences.databinding.SettingsActivityBinding;
|
|
import org.greenrobot.eventbus.EventBus;
|
|
import org.greenrobot.eventbus.Subscribe;
|
|
import org.greenrobot.eventbus.ThreadMode;
|
|
|
|
/**
|
|
* PreferenceActivity for API 11+. In order to change the behavior of the preference UI, see
|
|
* PreferenceController.
|
|
*/
|
|
public class PreferenceActivity extends AppCompatActivity implements SearchPreferenceResultListener {
|
|
private static final String FRAGMENT_TAG = "tag_preferences";
|
|
public static final String OPEN_AUTO_DOWNLOAD_SETTINGS = "OpenAutoDownloadSettings";
|
|
private SettingsActivityBinding binding;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
setTheme(ThemeSwitcher.getTheme(this));
|
|
super.onCreate(savedInstanceState);
|
|
|
|
ActionBar ab = getSupportActionBar();
|
|
if (ab != null) {
|
|
ab.setDisplayHomeAsUpEnabled(true);
|
|
}
|
|
|
|
binding = SettingsActivityBinding.inflate(getLayoutInflater());
|
|
setContentView(binding.getRoot());
|
|
|
|
if (getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG) == null) {
|
|
getSupportFragmentManager().beginTransaction()
|
|
.replace(binding.settingsContainer.getId(), new MainPreferencesFragment(), FRAGMENT_TAG)
|
|
.commit();
|
|
}
|
|
Intent intent = getIntent();
|
|
if (intent.getBooleanExtra(OPEN_AUTO_DOWNLOAD_SETTINGS, false)) {
|
|
openScreen(R.xml.preferences_autodownload);
|
|
}
|
|
}
|
|
|
|
private PreferenceFragmentCompat getPreferenceScreen(int screen) {
|
|
PreferenceFragmentCompat prefFragment = null;
|
|
|
|
if (screen == R.xml.preferences_user_interface) {
|
|
prefFragment = new UserInterfacePreferencesFragment();
|
|
} else if (screen == R.xml.preferences_downloads) {
|
|
prefFragment = new DownloadsPreferencesFragment();
|
|
} else if (screen == R.xml.preferences_import_export) {
|
|
prefFragment = new ImportExportPreferencesFragment();
|
|
} else if (screen == R.xml.preferences_autodownload) {
|
|
prefFragment = new AutoDownloadPreferencesFragment();
|
|
} else if (screen == R.xml.preferences_synchronization) {
|
|
prefFragment = new SynchronizationPreferencesFragment();
|
|
} else if (screen == R.xml.preferences_playback) {
|
|
prefFragment = new PlaybackPreferencesFragment();
|
|
} else if (screen == R.xml.preferences_notifications) {
|
|
prefFragment = new NotificationPreferencesFragment();
|
|
} else if (screen == R.xml.preferences_swipe) {
|
|
prefFragment = new SwipePreferencesFragment();
|
|
} else if (screen == R.xml.preferences_auto_deletion) {
|
|
prefFragment = new AutomaticDeletionPreferencesFragment();
|
|
}
|
|
return prefFragment;
|
|
}
|
|
|
|
public static int getTitleOfPage(int preferences) {
|
|
if (preferences == R.xml.preferences_downloads) {
|
|
return R.string.downloads_pref;
|
|
} else if (preferences == R.xml.preferences_autodownload) {
|
|
return R.string.pref_automatic_download_title;
|
|
} else if (preferences == R.xml.preferences_playback) {
|
|
return R.string.playback_pref;
|
|
} else if (preferences == R.xml.preferences_import_export) {
|
|
return R.string.import_export_pref;
|
|
} else if (preferences == R.xml.preferences_user_interface) {
|
|
return R.string.user_interface_label;
|
|
} else if (preferences == R.xml.preferences_synchronization) {
|
|
return R.string.synchronization_pref;
|
|
} else if (preferences == R.xml.preferences_notifications) {
|
|
return R.string.notification_pref_fragment;
|
|
} else if (preferences == R.xml.feed_settings) {
|
|
return R.string.feed_settings_label;
|
|
} else if (preferences == R.xml.preferences_swipe) {
|
|
return R.string.swipeactions_label;
|
|
} else if (preferences == R.xml.preferences_auto_deletion) {
|
|
return R.string.auto_delete_label;
|
|
}
|
|
return R.string.settings_label;
|
|
}
|
|
|
|
public PreferenceFragmentCompat openScreen(int screen) {
|
|
PreferenceFragmentCompat fragment = getPreferenceScreen(screen);
|
|
if (screen == R.xml.preferences_notifications && Build.VERSION.SDK_INT >= 26) {
|
|
Intent intent = new Intent();
|
|
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
|
|
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
|
|
startActivity(intent);
|
|
} else {
|
|
getSupportFragmentManager().beginTransaction()
|
|
.replace(binding.settingsContainer.getId(), fragment)
|
|
.addToBackStack(getString(getTitleOfPage(screen))).commit();
|
|
}
|
|
|
|
|
|
return fragment;
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
if (item.getItemId() == android.R.id.home) {
|
|
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
|
|
finish();
|
|
} else {
|
|
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
|
|
View view = getCurrentFocus();
|
|
//If no view currently has focus, create a new one, just so we can grab a window token from it
|
|
if (view == null) {
|
|
view = new View(this);
|
|
}
|
|
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
|
getSupportFragmentManager().popBackStack();
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void onSearchResultClicked(SearchPreferenceResult result) {
|
|
int screen = result.getResourceFile();
|
|
if (screen == R.xml.feed_settings) {
|
|
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this);
|
|
builder.setTitle(R.string.feed_settings_label);
|
|
builder.setMessage(R.string.pref_feed_settings_dialog_msg);
|
|
builder.setPositiveButton(android.R.string.ok, null);
|
|
builder.show();
|
|
} else if (screen == R.xml.preferences_notifications) {
|
|
openScreen(screen);
|
|
} else {
|
|
PreferenceFragmentCompat fragment = openScreen(result.getResourceFile());
|
|
result.highlight(fragment);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onStart() {
|
|
super.onStart();
|
|
EventBus.getDefault().register(this);
|
|
}
|
|
|
|
@Override
|
|
protected void onStop() {
|
|
super.onStop();
|
|
EventBus.getDefault().unregister(this);
|
|
}
|
|
|
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
|
public void onEventMainThread(MessageEvent event) {
|
|
Log.d(FRAGMENT_TAG, "onEvent(" + event + ")");
|
|
Snackbar s = Snackbar.make(binding.getRoot(), event.message, Snackbar.LENGTH_LONG);
|
|
if (event.action != null) {
|
|
s.setAction(event.actionText, v -> event.action.accept(this));
|
|
}
|
|
s.show();
|
|
}
|
|
}
|