diff --git a/twidere/src/main/kotlin/org/mariotaku/chameleon/Chameleon.java b/twidere/src/main/kotlin/org/mariotaku/chameleon/Chameleon.java new file mode 100644 index 000000000..ca7dc22e8 --- /dev/null +++ b/twidere/src/main/kotlin/org/mariotaku/chameleon/Chameleon.java @@ -0,0 +1,58 @@ +package org.mariotaku.chameleon; + +/** + * Created by mariotaku on 2016/12/18. + */ + +public class Chameleon { + /** + * Created by mariotaku on 2016/12/18. + */ + + public static class Theme { + int primaryColor; + int accentColor; + int toolbarColor; + boolean toolbarColored; + + public int getAccentColor() { + return accentColor; + } + + public void setAccentColor(int accentColor) { + this.accentColor = accentColor; + } + + public int getPrimaryColor() { + return primaryColor; + } + + public void setPrimaryColor(int primaryColor) { + this.primaryColor = primaryColor; + } + + public int getToolbarColor() { + return toolbarColor; + } + + public void setToolbarColor(int toolbarColor) { + this.toolbarColor = toolbarColor; + } + + public boolean isToolbarColored() { + return toolbarColored; + } + + public void setToolbarColored(boolean toolbarColored) { + this.toolbarColored = toolbarColored; + } + } + + /** + * Created by mariotaku on 2016/12/18. + */ + + public interface Themeable { + Theme getOverrideTheme(); + } +} diff --git a/twidere/src/main/kotlin/org/mariotaku/ktextension/CookieManagerExtension.kt b/twidere/src/main/kotlin/org/mariotaku/ktextension/CookieManagerExtension.kt new file mode 100644 index 000000000..bd2387396 --- /dev/null +++ b/twidere/src/main/kotlin/org/mariotaku/ktextension/CookieManagerExtension.kt @@ -0,0 +1,31 @@ +package org.mariotaku.ktextension + +import android.annotation.TargetApi +import android.os.Build +import android.webkit.CookieManager + + +/** + * Created by mariotaku on 2016/12/18. + */ + +fun CookieManager.removeAllCookiesSupport(callback: ((Boolean) -> Unit)? = null) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + @Suppress("DEPRECATION") + removeAllCookie() + callback?.invoke(true) + return + } + CookieManagerSupportL.removeAllCookiesL(this, callback) +} + +internal object CookieManagerSupportL { + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + fun removeAllCookiesL(manager: CookieManager, callback: ((Boolean) -> Unit)?) { + if (callback != null) { + manager.removeAllCookies { callback(it) } + } else { + manager.removeAllCookies(null) + } + } +} diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BaseActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BaseActivity.kt index cd9aea415..0522d4c4f 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BaseActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BaseActivity.kt @@ -28,22 +28,18 @@ import android.content.res.Resources import android.graphics.Rect import android.nfc.NfcAdapter import android.os.Bundle +import android.support.v7.app.AppCompatActivity import android.support.v7.preference.Preference import android.support.v7.preference.PreferenceFragmentCompat import android.support.v7.preference.PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback import android.support.v7.view.menu.ActionMenuItemView -import android.support.v7.widget.Toolbar import android.support.v7.widget.TwidereActionMenuView import android.util.AttributeSet import android.view.KeyEvent import android.view.MotionEvent import android.view.View -import com.afollestad.appthemeengine.ATE -import com.afollestad.appthemeengine.ATEActivity -import com.afollestad.appthemeengine.Config -import com.afollestad.appthemeengine.customizers.ATEStatusBarCustomizer -import com.afollestad.appthemeengine.customizers.ATEToolbarCustomizer import com.squareup.otto.Bus +import org.mariotaku.chameleon.Chameleon import org.mariotaku.kpreferences.KPreferences import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.Constants @@ -62,10 +58,9 @@ import java.util.* import javax.inject.Inject @SuppressLint("Registered") -open class BaseActivity : ATEActivity(), Constants, IExtendedActivity, IThemedActivity, +open class BaseActivity : AppCompatActivity(), Constants, IExtendedActivity, IThemedActivity, IControlBarActivity, OnFitSystemWindowsListener, SystemWindowsInsetsCallback, - KeyboardShortcutCallback, OnPreferenceDisplayDialogCallback, ATEToolbarCustomizer, - ATEStatusBarCustomizer { + KeyboardShortcutCallback, OnPreferenceDisplayDialogCallback, Chameleon.Themeable { @Inject lateinit var keyboardShortcutsHandler: KeyboardShortcutsHandler @Inject @@ -260,11 +255,6 @@ open class BaseActivity : ATEActivity(), Constants, IExtendedActivity, IThemedAc override val themeBackgroundOption: String get() = ThemeUtils.getThemeBackgroundOption(this) - - override fun getATEKey(): String? { - return ThemeUtils.getATEKey(this) - } - override fun onApplyThemeResource(theme: Resources.Theme, resId: Int, first: Boolean) { super.onApplyThemeResource(theme, resId, first) if (window != null && shouldApplyWindowBackground) { @@ -350,22 +340,8 @@ open class BaseActivity : ATEActivity(), Constants, IExtendedActivity, IThemedAc return false } - override fun getStatusBarColor(): Int { - return ATE.USE_DEFAULT - } - - override fun getToolbarColor(toolbar: Toolbar?): Int { - return ATE.USE_DEFAULT - } - - override fun getLightStatusBarMode(): Int { - //noinspection WrongConstant - return ThemeUtils.getLightStatusBarMode(Config.statusBarColor(this, ateKey)) - } - - override fun getLightToolbarMode(toolbar: Toolbar?): Int { - //noinspection WrongConstant - return ThemeUtils.getLightToolbarMode(Config.toolbarColor(this, ateKey, toolbar)) + override fun getOverrideTheme(): Chameleon.Theme { + return Chameleon.Theme() } companion object { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt index f51f127f4..505e1a708 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt @@ -25,7 +25,6 @@ import android.content.Intent import android.graphics.Bitmap import android.net.Uri import android.os.AsyncTask -import android.os.Build import android.os.Bundle import android.text.TextUtils.isEmpty import android.util.Log @@ -37,6 +36,7 @@ import android.webkit.WebView import android.widget.Toast import kotlinx.android.synthetic.main.activity_browser_sign_in.* import org.attoparser.ParseException +import org.mariotaku.ktextension.removeAllCookiesSupport import org.mariotaku.microblog.library.MicroBlogException import org.mariotaku.microblog.library.twitter.TwitterOAuth import org.mariotaku.restfu.oauth.OAuthAuthorization @@ -77,11 +77,7 @@ class BrowserSignInActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_browser_sign_in) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - CookieManager.getInstance().removeAllCookie() - } else { - CookieManager.getInstance().removeAllCookies(null) - } + CookieManager.getInstance().removeAllCookiesSupport() webView.setWebViewClient(AuthorizationWebViewClient(this)) webView.isVerticalScrollBarEnabled = false webView.addJavascriptInterface(InjectorJavaScriptInterface(this), "injector") diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/MediaViewerActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/MediaViewerActivity.kt index 7711d1dad..4b5aa1bc8 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/MediaViewerActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/MediaViewerActivity.kt @@ -197,10 +197,6 @@ class MediaViewerActivity : BaseActivity(), IExtendedActivity, ATEToolbarCustomi setBarVisibility(!isBarShowing) } - override fun getATEKey(): String? { - return VALUE_THEME_NAME_DARK - } - override fun getInitialPosition(): Int { return media.indexOf(initialMedia) } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt index 0d8ce8bea..4b3388a19 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt @@ -1277,21 +1277,24 @@ class UserFragment : BaseSupportFragment(), OnClickListener, OnLinkClickListener setupBaseActionBar() } val activity = activity as BaseActivity - if (Config.coloredActionBar(activity, activity.ateKey)) { + val theme = activity.overrideTheme + primaryColor = theme.primaryColor + primaryColorDark = ThemeUtils.computeDarkColor(primaryColor) + if (theme.isToolbarColored) { primaryColor = color primaryColorDark = ThemeUtils.computeDarkColor(color) } else { - primaryColor = Config.primaryColor(activity, activity.ateKey) + primaryColor = theme.primaryColor primaryColorDark = Color.BLACK } if (actionBarBackground != null) { actionBarBackground!!.color = primaryColor } val taskColor: Int - if (Config.coloredActionBar(activity, activity.ateKey)) { + if (theme.isToolbarColored) { taskColor = color } else { - taskColor = Config.toolbarColor(activity, activity.ateKey, toolbar) + taskColor = theme.toolbarColor } if (user != null) { val name = userColorNameManager.getDisplayName(user, nameFirst) @@ -1399,11 +1402,11 @@ class UserFragment : BaseSupportFragment(), OnClickListener, OnLinkClickListener val tabContrastColor = ThemeUtils.getColorDependent(currentTabColor) toolbarTabs.setIconColor(tabContrastColor) toolbarTabs.setLabelColor(tabContrastColor) - if (Config.coloredActionBar(activity, activity.ateKey)) { + val theme = activity.overrideTheme + if (theme.isToolbarColored) { toolbarTabs.setStripColor(tabContrastColor) } else { - toolbarTabs.setStripColor(ThemeUtils.getOptimalAccentColor(uiColor, - tabContrastColor)) + toolbarTabs.setStripColor(ThemeUtils.getOptimalAccentColor(uiColor, tabContrastColor)) } toolbarTabs.updateAppearance() }