diff --git a/app/src/main/java/com/apkupdater/activity/MainActivity.java b/app/src/main/java/com/apkupdater/activity/MainActivity.java index 178943a2..54072440 100644 --- a/app/src/main/java/com/apkupdater/activity/MainActivity.java +++ b/app/src/main/java/com/apkupdater/activity/MainActivity.java @@ -65,6 +65,9 @@ public class MainActivity @ViewById(R.id.settings_container) FrameLayout mSettingsLayout; + @ViewById(R.id.log_container) + FrameLayout mLogLayout; + SettingsFragment mSettingsFragment; LogFragment_ mLogFragment; @@ -115,7 +118,14 @@ void init( // Add the settings fragment and configure the correct state mSettingsFragment = new SettingsFragment(); + if (!(getSupportFragmentManager().findFragmentById(R.id.settings_container) instanceof SettingsFragment)) { + getSupportFragmentManager().beginTransaction().add(R.id.settings_container, mSettingsFragment).commit(); + } + mLogFragment = new LogFragment_(); + if (!(getSupportFragmentManager().findFragmentById(R.id.log_container) instanceof LogFragment_)) { + getSupportFragmentManager().beginTransaction().add(R.id.log_container, mLogFragment).commit(); + } if (mAppState.getSettingsActive()) { switchSettings(true); @@ -126,35 +136,25 @@ void init( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - private void switchTabToFragment( + private void switchSettings( boolean b ) { if (b) { mTabLayout.setVisibility(View.GONE); mViewPager.setVisibility(View.GONE); mSettingsLayout.setVisibility(View.VISIBLE); + mLogLayout.setVisibility(View.GONE); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { mTabLayout.setVisibility(View.VISIBLE); mViewPager.setVisibility(View.VISIBLE); mSettingsLayout.setVisibility(View.GONE); + mLogLayout.setVisibility(View.GONE); getSupportActionBar().setTitle(getString(R.string.app_name)); getSupportActionBar().setDisplayHomeAsUpEnabled(false); } - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private void switchSettings( - boolean b - ) { - switchTabToFragment(b); - - if (b) { - getSupportFragmentManager().beginTransaction().replace(R.id.settings_container, mSettingsFragment).commit(); - getSupportActionBar().setTitle(getString(R.string.action_settings)); - } + getSupportActionBar().setTitle(getString(R.string.action_settings)); mAppState.setSettingsActive(b); } @@ -163,13 +163,22 @@ private void switchSettings( private void switchLog( boolean b ) { - switchTabToFragment(b); - if (b) { - getSupportFragmentManager().beginTransaction().replace(R.id.settings_container, mLogFragment).commit(); - getSupportActionBar().setTitle(getString(R.string.action_log)); + mTabLayout.setVisibility(View.GONE); + mViewPager.setVisibility(View.GONE); + mSettingsLayout.setVisibility(View.GONE); + mLogLayout.setVisibility(View.VISIBLE); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } else { + mTabLayout.setVisibility(View.VISIBLE); + mViewPager.setVisibility(View.VISIBLE); + mSettingsLayout.setVisibility(View.GONE); + mLogLayout.setVisibility(View.GONE); + getSupportActionBar().setTitle(getString(R.string.app_name)); + getSupportActionBar().setDisplayHomeAsUpEnabled(false); } + getSupportActionBar().setTitle(getString(R.string.action_log)); mAppState.setLogActive(b); } diff --git a/app/src/main/java/com/apkupdater/adapter/LogAdapter.java b/app/src/main/java/com/apkupdater/adapter/LogAdapter.java index 3468d0d7..4b8d4b9d 100644 --- a/app/src/main/java/com/apkupdater/adapter/LogAdapter.java +++ b/app/src/main/java/com/apkupdater/adapter/LogAdapter.java @@ -46,7 +46,11 @@ public LogAdapter( @AfterViews public void init( ) { - mBus.register(this); + try { + mBus.register(this); + } catch (IllegalArgumentException ignored) { + // Already registered + } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/java/com/apkupdater/fragment/LogFragment.java b/app/src/main/java/com/apkupdater/fragment/LogFragment.java index 60447ccb..7abfe54c 100644 --- a/app/src/main/java/com/apkupdater/fragment/LogFragment.java +++ b/app/src/main/java/com/apkupdater/fragment/LogFragment.java @@ -2,12 +2,16 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.support.v7.preference.PreferenceFragmentCompat; import android.widget.ListView; import com.apkupdater.R; import com.apkupdater.adapter.LogAdapter; import com.apkupdater.model.LogMessage; +import com.google.gson.Gson; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; @@ -28,17 +32,50 @@ public class LogFragment @Bean LogAdapter mAdapter; + Bundle mSavedInstance; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onCreate( + @Nullable Bundle savedInstanceState + ) { + mSavedInstance = savedInstanceState; + super.onCreate(savedInstanceState); + } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @AfterViews void init( ) { + // Try to get data from savedInstance + if (mSavedInstance != null) { + try { + LogMessage[] messages = new Gson().fromJson(mSavedInstance.getString("values"), LogMessage[].class); + for (LogMessage m : messages) { + mAdapter.add(m); + } + } catch (Exception ignored) { + } + } + mListView.setAdapter(mAdapter); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + @Override + public void onSaveInstanceState( + Bundle outState + ) { + super.onSaveInstanceState(outState); + + // Serialize to json and put it on savedinstance + outState.putString("values", new Gson().toJson(mAdapter.getValues())); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 54242416..9d27bbf0 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -49,6 +49,12 @@ android:layout_height="match_parent" android:visibility="gone" /> +