2019-02-07 22:39:33 +01:00
|
|
|
package com.beemdevelopment.aegis.ui;
|
2016-09-30 01:07:56 +02:00
|
|
|
|
|
|
|
import android.os.Bundle;
|
2020-05-24 15:09:54 +02:00
|
|
|
import android.view.MenuItem;
|
2016-09-30 01:07:56 +02:00
|
|
|
|
2022-10-10 22:32:30 +02:00
|
|
|
import androidx.annotation.NonNull;
|
2020-07-08 11:18:40 +02:00
|
|
|
import androidx.fragment.app.Fragment;
|
2022-10-10 22:32:30 +02:00
|
|
|
import androidx.fragment.app.FragmentManager;
|
2021-01-13 21:03:14 +01:00
|
|
|
import androidx.preference.Preference;
|
|
|
|
import androidx.preference.PreferenceFragmentCompat;
|
|
|
|
|
|
|
|
import com.beemdevelopment.aegis.R;
|
2022-02-06 19:00:01 +01:00
|
|
|
import com.beemdevelopment.aegis.ui.fragments.preferences.MainPreferencesFragment;
|
|
|
|
import com.beemdevelopment.aegis.ui.fragments.preferences.PreferencesFragment;
|
2021-01-13 21:03:14 +01:00
|
|
|
|
|
|
|
public class PreferencesActivity extends AegisActivity implements
|
|
|
|
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
|
2020-07-08 11:18:40 +02:00
|
|
|
private Fragment _fragment;
|
2022-10-14 16:42:43 +02:00
|
|
|
private CharSequence _prefTitle;
|
2018-05-10 21:20:16 +02:00
|
|
|
|
2016-09-30 01:07:56 +02:00
|
|
|
@Override
|
2017-12-24 21:42:08 +01:00
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
2016-09-30 01:07:56 +02:00
|
|
|
super.onCreate(savedInstanceState);
|
2022-02-06 19:00:01 +01:00
|
|
|
if (abortIfOrphan(savedInstanceState)) {
|
|
|
|
return;
|
|
|
|
}
|
2021-01-17 13:12:43 +01:00
|
|
|
setContentView(R.layout.activity_preferences);
|
|
|
|
setSupportActionBar(findViewById(R.id.toolbar));
|
2022-10-10 22:32:30 +02:00
|
|
|
getSupportFragmentManager()
|
|
|
|
.registerFragmentLifecycleCallbacks(new FragmentResumeListener(), true);
|
2017-08-26 21:15:53 +02:00
|
|
|
|
2020-05-24 15:09:54 +02:00
|
|
|
if (getSupportActionBar() != null) {
|
|
|
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
|
|
getSupportActionBar().setDisplayShowHomeEnabled(true);
|
|
|
|
}
|
|
|
|
|
2020-05-11 17:13:46 +02:00
|
|
|
if (savedInstanceState == null) {
|
2021-01-13 21:03:14 +01:00
|
|
|
_fragment = new MainPreferencesFragment();
|
2020-05-11 17:13:46 +02:00
|
|
|
_fragment.setArguments(getIntent().getExtras());
|
2021-01-13 21:03:14 +01:00
|
|
|
|
2022-10-10 22:32:30 +02:00
|
|
|
getSupportFragmentManager().beginTransaction()
|
2021-01-17 13:12:43 +01:00
|
|
|
.replace(R.id.content, _fragment)
|
2021-01-13 21:03:14 +01:00
|
|
|
.commit();
|
|
|
|
|
|
|
|
PreferencesFragment requestedFragment = getRequestedFragment();
|
|
|
|
if (requestedFragment != null) {
|
|
|
|
_fragment = requestedFragment;
|
|
|
|
showFragment(_fragment);
|
|
|
|
}
|
2020-05-11 17:13:46 +02:00
|
|
|
} else {
|
2021-04-11 13:54:05 +02:00
|
|
|
_fragment = getSupportFragmentManager().findFragmentById(R.id.content);
|
2022-10-14 16:42:43 +02:00
|
|
|
_prefTitle = savedInstanceState.getCharSequence("prefTitle");
|
|
|
|
if (_prefTitle != null) {
|
|
|
|
setTitle(_prefTitle);
|
|
|
|
}
|
2020-05-11 17:13:46 +02:00
|
|
|
}
|
2017-12-24 21:42:08 +01:00
|
|
|
}
|
|
|
|
|
2020-06-13 12:45:02 +02:00
|
|
|
@Override
|
2022-10-10 22:32:30 +02:00
|
|
|
protected void onRestoreInstanceState(@NonNull final Bundle inState) {
|
2020-07-08 11:18:40 +02:00
|
|
|
if (_fragment instanceof PreferencesFragment) {
|
|
|
|
// pass the stored result intent back to the fragment
|
|
|
|
if (inState.containsKey("result")) {
|
|
|
|
((PreferencesFragment) _fragment).setResult(inState.getParcelable("result"));
|
|
|
|
}
|
2018-05-11 21:30:15 +02:00
|
|
|
}
|
|
|
|
super.onRestoreInstanceState(inState);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2022-10-10 22:32:30 +02:00
|
|
|
protected void onSaveInstanceState(@NonNull final Bundle outState) {
|
2020-07-08 11:18:40 +02:00
|
|
|
if (_fragment instanceof PreferencesFragment) {
|
|
|
|
// save the result intent of the fragment
|
|
|
|
// this is done so we don't lose anything if the fragment calls recreate on this activity
|
|
|
|
outState.putParcelable("result", ((PreferencesFragment) _fragment).getResult());
|
|
|
|
}
|
2022-10-14 16:42:43 +02:00
|
|
|
outState.putCharSequence("prefTitle", _prefTitle);
|
2018-05-11 21:30:15 +02:00
|
|
|
super.onSaveInstanceState(outState);
|
|
|
|
}
|
2020-05-24 15:09:54 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
2021-01-13 21:03:14 +01:00
|
|
|
if (item.getItemId() == android.R.id.home) {
|
2022-10-16 13:27:20 +02:00
|
|
|
getOnBackPressedDispatcher().onBackPressed();
|
2021-01-13 21:03:14 +01:00
|
|
|
} else {
|
|
|
|
return super.onOptionsItemSelected(item);
|
2020-05-24 15:09:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2021-01-13 21:03:14 +01:00
|
|
|
|
|
|
|
@Override
|
2022-10-10 22:32:30 +02:00
|
|
|
public boolean onPreferenceStartFragment(@NonNull PreferenceFragmentCompat caller, Preference pref) {
|
2020-07-08 11:18:40 +02:00
|
|
|
_fragment = getSupportFragmentManager().getFragmentFactory().instantiate(getClassLoader(), pref.getFragment());
|
2021-01-13 21:03:14 +01:00
|
|
|
_fragment.setArguments(pref.getExtras());
|
|
|
|
_fragment.setTargetFragment(caller, 0);
|
|
|
|
showFragment(_fragment);
|
|
|
|
|
2022-10-14 16:42:43 +02:00
|
|
|
_prefTitle = pref.getTitle();
|
|
|
|
setTitle(_prefTitle);
|
2021-01-13 21:03:14 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2020-07-08 11:18:40 +02:00
|
|
|
private void showFragment(Fragment fragment) {
|
2021-01-13 21:03:14 +01:00
|
|
|
getSupportFragmentManager().beginTransaction()
|
|
|
|
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
|
2021-01-17 13:12:43 +01:00
|
|
|
.replace(R.id.content, fragment)
|
2021-01-13 21:03:14 +01:00
|
|
|
.addToBackStack(null)
|
|
|
|
.commit();
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
private PreferencesFragment getRequestedFragment() {
|
|
|
|
Class<? extends PreferencesFragment> fragmentType = (Class<? extends PreferencesFragment>) getIntent().getSerializableExtra("fragment");
|
|
|
|
if (fragmentType == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
return fragmentType.newInstance();
|
|
|
|
} catch (IllegalAccessException | InstantiationException e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
2022-10-10 22:32:30 +02:00
|
|
|
|
|
|
|
private class FragmentResumeListener extends FragmentManager.FragmentLifecycleCallbacks {
|
|
|
|
@Override
|
|
|
|
public void onFragmentStarted(@NonNull FragmentManager fm, @NonNull Fragment f) {
|
|
|
|
if (f instanceof MainPreferencesFragment) {
|
|
|
|
setTitle(R.string.action_settings);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-09-30 01:07:56 +02:00
|
|
|
}
|