package link.infra.sslsocks.gui; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import java.util.Objects; import link.infra.sslsocks.BuildConfig; import link.infra.sslsocks.R; import link.infra.sslsocks.service.StunnelProcessManager; public class AdvancedSettingsActivity extends AppCompatActivity { private MutableLiveData<String> stunnelVersionStringMutable = new MutableLiveData<>(); private LiveData<String> stunnelVersionString = stunnelVersionStringMutable; private Thread checkVersionThread = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_advanced_settings); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); checkVersionThread = new Thread(new Runnable() { @Override public void run() { stunnelVersionStringMutable.postValue(new StunnelProcessManager().checkStunnelVersion(AdvancedSettingsActivity.this)); } }); checkVersionThread.start(); } public static class AdvancedSettingsActivityFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.advanced_settings, rootKey); Preference appVersionPreference = findPreference("version"); if (appVersionPreference != null) { final String versionString = BuildConfig.VERSION_NAME + " (" + BuildConfig.VERSION_CODE + ")"; appVersionPreference.setSummaryProvider(new Preference.SummaryProvider<Preference>() { @Override public CharSequence provideSummary(Preference preference) { return versionString; } }); } } @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final Preference stunnelVersionPreference = findPreference("stunnelVersion"); final AdvancedSettingsActivity asa = (AdvancedSettingsActivity) getActivity(); if (stunnelVersionPreference != null && asa != null) { asa.stunnelVersionString.observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(String s) { stunnelVersionPreference.setSummary(s); } }); } return super.onCreateView(inflater, container, savedInstanceState); } } @Override protected void onDestroy() { checkVersionThread.interrupt(); super.onDestroy(); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } }