diff --git a/app/build.gradle b/app/build.gradle index 1805baa3..fe5804db 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,6 +38,7 @@ dependencies { compile "org.androidannotations:androidannotations-api:$AAVersion" compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:design:24.2.0' + compile 'com.android.support:preference-v7:24.2.0' compile 'org.jsoup:jsoup:1.9.2' compile 'com.squareup:otto:1.3.8' compile 'com.google.code.gson:gson:2.7' diff --git a/app/src/main/java/com/apkupdater/activity/MainActivity.java b/app/src/main/java/com/apkupdater/activity/MainActivity.java index e65815f8..dd559063 100644 --- a/app/src/main/java/com/apkupdater/activity/MainActivity.java +++ b/app/src/main/java/com/apkupdater/activity/MainActivity.java @@ -9,11 +9,14 @@ import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.view.View; +import android.widget.FrameLayout; import com.apkupdater.adapter.MainActivityPageAdapter; import com.apkupdater.R; import com.apkupdater.event.InstalledAppTitleChange; import com.apkupdater.event.UpdaterTitleChange; +import com.apkupdater.fragment.SettingsFragment; import com.apkupdater.receiver.BootReceiver_; import com.apkupdater.service.UpdaterService_; import com.apkupdater.util.ColorUtitl; @@ -54,12 +57,17 @@ public class MainActivity @Bean AppState mAppState; + @ViewById(R.id.settings_container) + FrameLayout mSettingsLayout; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreate( + Bundle savedInstanceState + ) { setThemeFromOptions(); + super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @@ -96,6 +104,32 @@ void init( ColorUtitl.getColorFromTheme(getTheme(), android.R.attr.windowBackground) ); } + + // Add the settings fragment and configure the correct state + getSupportFragmentManager().beginTransaction().replace(R.id.settings_container, new SettingsFragment()).commit(); + switchSettings(mAppState.getSettingsActive()); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + private void switchSettings( + boolean b + ) { + if (b) { + mTabLayout.setVisibility(View.GONE); + mViewPager.setVisibility(View.GONE); + mSettingsLayout.setVisibility(View.VISIBLE); + getSupportActionBar().setTitle(getString(R.string.action_settings)); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } else { + mTabLayout.setVisibility(View.VISIBLE); + mViewPager.setVisibility(View.VISIBLE); + mSettingsLayout.setVisibility(View.GONE); + getSupportActionBar().setTitle(getString(R.string.app_name)); + getSupportActionBar().setDisplayHomeAsUpEnabled(false); + } + + mAppState.setSettingsActive(b); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -111,7 +145,8 @@ private void checkFirstStart( new BootReceiver_().onReceive(getBaseContext(), null); // Set the first start flag to false - mAppState.setmFirstStart(false); + mAppState.setFirstStart(false); + mAppState.setSettingsActive(false); } } @@ -132,7 +167,7 @@ private void selectTab( @OptionsItem(R.id.action_settings) void onSettingsClick( ) { - SettingsActivity_.intent(this).start(); + switchSettings(!mAppState.getSettingsActive()); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -145,6 +180,14 @@ void onUpdateClick( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + @OptionsItem(android.R.id.home) + void onHomeClick( + ) { + switchSettings(!mAppState.getSettingsActive()); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/apkupdater/activity/PreferenceActivityCompat.java b/app/src/main/java/com/apkupdater/activity/PreferenceActivityCompat.java deleted file mode 100644 index eeb0ef2d..00000000 --- a/app/src/main/java/com/apkupdater/activity/PreferenceActivityCompat.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.apkupdater.activity; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -import android.content.res.Configuration; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.support.annotation.LayoutRes; -import android.support.annotation.Nullable; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatDelegate; -import android.support.v7.widget.Toolbar; -import android.view.MenuInflater; -import android.view.View; -import android.view.ViewGroup; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls - * to be used with AppCompat. - * - * This technique can be used with an {@link android.app.Activity} class, not just - * {@link android.preference.PreferenceActivity}. - */ -public abstract class PreferenceActivityCompat - extends PreferenceActivity -{ - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private AppCompatDelegate mDelegate; - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - protected void onCreate( - Bundle savedInstanceState - ) { - getDelegate().installViewFactory(); - getDelegate().onCreate(savedInstanceState); - super.onCreate(savedInstanceState); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - protected void onPostCreate( - Bundle savedInstanceState - ) { - super.onPostCreate(savedInstanceState); - getDelegate().onPostCreate(savedInstanceState); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - public ActionBar getSupportActionBar( - ) { - return getDelegate().getSupportActionBar(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - public void setSupportActionBar( - @Nullable Toolbar toolbar - ) { - getDelegate().setSupportActionBar(toolbar); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public MenuInflater getMenuInflater( - ) { - return getDelegate().getMenuInflater(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void setContentView( - @LayoutRes int layoutResID - ) { - getDelegate().setContentView(layoutResID); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void setContentView( - View view - ) { - getDelegate().setContentView(view); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void setContentView( - View view, - ViewGroup.LayoutParams params - ) { - getDelegate().setContentView(view, params); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void addContentView( - View view, - ViewGroup.LayoutParams params - ) { - getDelegate().addContentView(view, params); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - protected void onPostResume( - ) { - super.onPostResume(); - getDelegate().onPostResume(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - protected void onTitleChanged( - CharSequence title, - int color - ) { - super.onTitleChanged(title, color); - getDelegate().setTitle(title); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void onConfigurationChanged( - Configuration newConfig - ) { - super.onConfigurationChanged(newConfig); - getDelegate().onConfigurationChanged(newConfig); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - protected void onStop( - ) { - super.onStop(); - getDelegate().onStop(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - protected void onDestroy( - ) { - super.onDestroy(); - getDelegate().onDestroy(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - public void invalidateOptionsMenu( - ) { - getDelegate().invalidateOptionsMenu(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private AppCompatDelegate getDelegate() { - if (mDelegate == null) { - mDelegate = AppCompatDelegate.create(this, null); - } - return mDelegate; - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/app/src/main/java/com/apkupdater/activity/SettingsActivity.java b/app/src/main/java/com/apkupdater/activity/SettingsActivity.java deleted file mode 100644 index ff669b4d..00000000 --- a/app/src/main/java/com/apkupdater/activity/SettingsActivity.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.apkupdater.activity; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.preference.PreferenceManager; -import android.support.annotation.MainThread; -import android.support.v7.app.ActionBar; -import android.support.v7.widget.Toolbar; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -import com.apkupdater.R; -import com.apkupdater.util.AlarmUtil; -import com.apkupdater.util.ColorUtitl; -import com.apkupdater.util.ThemeUtil; - -import org.androidannotations.annotations.EActivity; - -import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@EActivity -public class SettingsActivity - extends PreferenceActivityCompat -{ - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private Context mContext; - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - SharedPreferences.OnSharedPreferenceChangeListener mChanges = new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged( - SharedPreferences sharedPreferences, - String key - ) { - // Change alarm - if (key.equals(getString(R.string.preferences_general_alarm_key))) { - AlarmUtil alarmUtil = new AlarmUtil(mContext); - alarmUtil.setAlarmFromOptions(); - } else if (key.equals(getString(R.string.preferences_general_theme_key))) { - changeTheme(); - } - } - }; - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public boolean onOptionsItemSelected( - MenuItem menuItem - ) { - // Exit activity if click on arrow - if (menuItem.getItemId() == android.R.id.home) { - finish(); - } - return super.onOptionsItemSelected(menuItem); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - protected void setupToolbar( - ) { - ViewGroup rootView = (ViewGroup)findViewById(R.id.action_bar_root); - - if (rootView != null) { - View view = getLayoutInflater().inflate(R.layout.app_toolbar, rootView, false); - rootView.addView(view, 0); - - // Configure the toolbar - Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); - toolbar.setTitle(getString(R.string.action_settings)); - toolbar.setTitleTextColor(ColorUtitl.getColorFromTheme(getTheme(), R.attr.tabIndicatorColor)); - setSupportActionBar(toolbar); - } - - // Display back arrow - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp); - upArrow.setColorFilter(ColorUtitl.getColorFromTheme(getTheme(), R.attr.tabIndicatorColor), PorterDuff.Mode.SRC_ATOP); - getSupportActionBar().setHomeAsUpIndicator(upArrow); - actionBar.setDisplayHomeAsUpEnabled(true); - } - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @MainThread - private void changeTheme( - ) { - SettingsActivity_.intent(this).flags(FLAG_ACTIVITY_CLEAR_TOP).start(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void onCreate( - Bundle savedInstanceState - ) { - mContext = getBaseContext(); - setTheme(ThemeUtil.getSettingsThemeFromOptions(mContext)); - super.onCreate(savedInstanceState); - setupToolbar(); - PreferenceManager.getDefaultSharedPreferences(mContext).registerOnSharedPreferenceChangeListener(mChanges); - addPreferencesFromResource(R.xml.preferences); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/app/src/main/java/com/apkupdater/fragment/AboutFragment.java b/app/src/main/java/com/apkupdater/fragment/AboutFragment.java index 11177350..c463083b 100644 --- a/app/src/main/java/com/apkupdater/fragment/AboutFragment.java +++ b/app/src/main/java/com/apkupdater/fragment/AboutFragment.java @@ -46,9 +46,12 @@ protected void onInit( mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { - mWebView.loadUrl( - "javascript:document.body.style.setProperty(\"color\", \"" + color + "\");" - ); + try { + mWebView.loadUrl( + "javascript:document.body.style.setProperty(\"color\", \"" + color + "\");" + ); + } catch (Exception ignored) { + } } }); } diff --git a/app/src/main/java/com/apkupdater/model/AppState.java b/app/src/main/java/com/apkupdater/model/AppState.java index c5bf9d35..1e2784d5 100644 --- a/app/src/main/java/com/apkupdater/model/AppState.java +++ b/app/src/main/java/com/apkupdater/model/AppState.java @@ -26,6 +26,7 @@ public class AppState final static String SELECTED_TAB_KEY = "selected_tab_key"; final static String CURRENT_THEME_KEY = "current_theme_key"; final static String UPDATE_LIST_KEY = "update_list_key"; + final static String SETTINGS_ACTIVE_KEY ="settings_active_key"; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -51,6 +52,13 @@ public int getSelectedTab( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + public boolean getSettingsActive( + ) { + return getSettingsActiveFromSharedPrefs(mContext); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + public boolean getFirstStart( ) { return mFirstStart; @@ -80,6 +88,14 @@ public void setSelectedTab( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + public void setSettingsActive( + boolean active + ) { + setSettingsActiveToSharedPrefs(mContext, active); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + public void setCurrentTheme( int currentTheme ) { @@ -103,7 +119,7 @@ public void clearUpdates( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - public void setmFirstStart( + public void setFirstStart( boolean firstStart ) { mFirstStart = firstStart; @@ -130,6 +146,25 @@ private void setSelectedTabToSharedPrefs( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + private boolean getSettingsActiveFromSharedPrefs( + Context context + ) { + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); + return sharedPref.getBoolean(SETTINGS_ACTIVE_KEY, false); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + private void setSettingsActiveToSharedPrefs( + Context context, + boolean active + ) { + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); + sharedPref.edit().putBoolean(SETTINGS_ACTIVE_KEY, active).apply(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + private int getCurrentThemeFromSharedPrefs( Context context ) { diff --git a/app/src/main/java/com/apkupdater/receiver/NotificationClickReceiver.java b/app/src/main/java/com/apkupdater/receiver/NotificationClickReceiver.java index 22b2849a..b61f5e19 100644 --- a/app/src/main/java/com/apkupdater/receiver/NotificationClickReceiver.java +++ b/app/src/main/java/com/apkupdater/receiver/NotificationClickReceiver.java @@ -30,7 +30,7 @@ public void onReceive( Context context, Intent intent ) { - mAppState.setmFirstStart(false); + mAppState.setFirstStart(false); mAppState.setSelectedTab(1); MainActivity_.intent(context).flags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP).start(); } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f6961ec3..54242416 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -43,6 +43,12 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fd3b22ef..ac4f1fa6 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -5,9 +5,9 @@ #0D47A1 #092b61 #6dabf7 - #6dabf7 #FFFFFF #99FFFFFF + @style/PreferenceThemeBlue