diff --git a/resources/Twidere Icon Assets.sketch b/resources/Twidere Icon Assets.sketch index ad6dd9273..81df01477 100644 Binary files a/resources/Twidere Icon Assets.sketch and b/resources/Twidere Icon Assets.sketch differ diff --git a/twidere/build.gradle b/twidere/build.gradle index 591f18895..838eb79c7 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -87,6 +87,7 @@ dependencies { compile 'com.android.support:recyclerview-v7:23.2.1' compile 'com.android.support:preference-v7:23.2.1' compile 'com.android.support:preference-v14:23.2.1' + compile('com.github.afollestad:app-theme-engine:1.0.1@aar') { transitive = true } compile 'com.twitter:twitter-text:1.13.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.squareup:otto:1.3.8' @@ -106,7 +107,6 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.4' compile 'commons-primitives:commons-primitives:1.0' compile 'com.bluelinelabs:logansquare:1.3.7' - compile 'org.jraf:android-switch-backport:2.0.1' compile 'com.makeramen:roundedimageview:2.1.1' compile 'com.soundcloud.android:android-crop:1.0.1@aar' compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.2' diff --git a/twidere/proguard-rules.pro b/twidere/proguard-rules.pro index 5627fa662..23dea42ce 100644 --- a/twidere/proguard-rules.pro +++ b/twidere/proguard-rules.pro @@ -43,6 +43,6 @@ private android.graphics.drawable.Drawable mWindowContentOverlay; } --keepclassmembers class org.mariotaku.twidere.activity.support.BrowserSignInActivity.InjectorJavaScriptInterface { +-keepclassmembers class org.mariotaku.twidere.activity.BrowserSignInActivity.InjectorJavaScriptInterface { public *; } \ No newline at end of file diff --git a/twidere/src/androidTest/java/org/mariotaku/twidere/activity/support/ImagePageFragmentTest.java b/twidere/src/androidTest/java/org/mariotaku/twidere/activity/ImagePageFragmentTest.java similarity index 95% rename from twidere/src/androidTest/java/org/mariotaku/twidere/activity/support/ImagePageFragmentTest.java rename to twidere/src/androidTest/java/org/mariotaku/twidere/activity/ImagePageFragmentTest.java index 564e39f24..b47e47ac9 100644 --- a/twidere/src/androidTest/java/org/mariotaku/twidere/activity/support/ImagePageFragmentTest.java +++ b/twidere/src/androidTest/java/org/mariotaku/twidere/activity/ImagePageFragmentTest.java @@ -1,8 +1,9 @@ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.net.Uri; import org.junit.Test; +import org.mariotaku.twidere.activity.MediaViewerActivity; import static org.junit.Assert.assertEquals; diff --git a/twidere/src/debug/java/org/mariotaku/twidere/util/DebugModeUtils.java b/twidere/src/debug/java/org/mariotaku/twidere/util/DebugModeUtils.java index 7f2efba54..ac4a58e28 100644 --- a/twidere/src/debug/java/org/mariotaku/twidere/util/DebugModeUtils.java +++ b/twidere/src/debug/java/org/mariotaku/twidere/util/DebugModeUtils.java @@ -33,7 +33,7 @@ import com.squareup.leakcanary.RefWatcher; import com.squareup.leakcanary.ServiceHeapDumpListener; import org.mariotaku.twidere.BuildConfig; -import org.mariotaku.twidere.activity.support.ComposeActivity; +import org.mariotaku.twidere.activity.ComposeActivity; import org.mariotaku.twidere.util.net.NoIntercept; import java.io.IOException; diff --git a/twidere/src/main/AndroidManifest.xml b/twidere/src/main/AndroidManifest.xml index 1a4ed77cf..44f970a21 100644 --- a/twidere/src/main/AndroidManifest.xml +++ b/twidere/src/main/AndroidManifest.xml @@ -139,7 +139,7 @@ @@ -193,10 +193,10 @@ + android:value=".activity.HomeActivity"/> @@ -219,7 +219,7 @@ @@ -232,7 +232,7 @@ @@ -244,15 +244,15 @@ + android:value=".activity.HomeActivity"/> @@ -262,17 +262,17 @@ + android:value=".activity.HomeActivity"/> @@ -284,7 +284,7 @@ + android:value=".activity.HomeActivity"/> @@ -306,7 +306,7 @@ @@ -332,7 +332,7 @@ @@ -369,7 +369,7 @@ @@ -384,15 +384,15 @@ android:label="@string/settings_wizard" android:theme="@style/Theme.Twidere"/> diff --git a/twidere/src/main/java/android/support/v7/app/ThemedAppCompatDelegateFactory.java b/twidere/src/main/java/android/support/v7/app/ThemedAppCompatDelegateFactory.java deleted file mode 100644 index 616280289..000000000 --- a/twidere/src/main/java/android/support/v7/app/ThemedAppCompatDelegateFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2015 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package android.support.v7.app; - -import android.app.Activity; -import android.content.Context; -import android.os.Build; -import android.support.annotation.NonNull; -import android.support.v4.view.LayoutInflaterCompat; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.Window; - -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory; - -/** - * Created by mariotaku on 15/4/22. - */ -public class ThemedAppCompatDelegateFactory implements Constants { - - - /** - * Create a {@link android.support.v7.app.AppCompatDelegate} to use with {@code activity}. - * - * @param callback An optional callback for AppCompat specific events - */ - public static ThemedAppCompatDelegate create(@NonNull final IThemedActivity themed, - @NonNull final AppCompatCallback callback) { - final Activity activity = (Activity) themed; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - return new ThemedAppCompatDelegate(themed, activity, activity.getWindow(), callback); - } else { - throw new UnsupportedOperationException(); - } - } - - public static final class ThemedAppCompatDelegate extends AppCompatDelegateImplV14 { - - private final IThemedActivity themed; - private KeyListener keyListener; - - private ThemedAppCompatDelegate(@NonNull final IThemedActivity themed, @NonNull final Context context, - @NonNull final Window window, @NonNull final AppCompatCallback callback) { - super(context, window, callback); - this.themed = themed; - } - - @Override - public void installViewFactory() { - final LayoutInflater inflater = LayoutInflater.from(mContext); - if (inflater.getFactory() == null) { - LayoutInflaterCompat.setFactory(inflater, new ThemedLayoutInflaterFactory(themed, this)); - } - } - - @Override - boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyListener != null && keyListener.onKeyDown(keyCode, event)) return true; - return super.onKeyDown(keyCode, event); - } - - @Override - boolean onKeyUp(int keyCode, KeyEvent event) { - if (keyListener != null && keyListener.onKeyUp(keyCode, event)) return true; - return super.onKeyUp(keyCode, event); - } - - public void setKeyListener(KeyListener listener) { - keyListener = listener; - } - } - - public interface KeyListener { - - boolean onKeyDown(int keyCode, KeyEvent event); - - boolean onKeyUp(int keyCode, KeyEvent event); - } -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/APIEditorActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/APIEditorActivity.java index 83fccadf5..791adeedd 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/APIEditorActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.app.Dialog; import android.content.Context; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/AccountSelectorActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/AccountSelectorActivity.java index 9276c4f70..d1bb9949f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/AccountSelectorActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.app.LoaderManager.LoaderCallbacks; import android.content.CursorLoader; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ActivityPickerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ActivityPickerActivity.java similarity index 98% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/ActivityPickerActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/ActivityPickerActivity.java index 2087c7e86..6ecafdda3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ActivityPickerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ActivityPickerActivity.java @@ -1,4 +1,4 @@ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.Intent; import android.content.pm.ResolveInfo; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/AssistLauncherActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/AssistLauncherActivity.java index f24bfa286..2f8803d2b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/AssistLauncherActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/AssistLauncherActivity.java @@ -5,7 +5,6 @@ import android.content.Intent; import android.os.Bundle; import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.activity.support.ComposeActivity; import org.mariotaku.twidere.util.SharedPreferencesWrapper; public class AssistLauncherActivity extends Activity implements Constants { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseAppCompatActivity.java similarity index 98% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/BaseAppCompatActivity.java index 215ed1b25..77f578d54 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseAppCompatActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.annotation.SuppressLint; import android.graphics.Rect; @@ -29,6 +29,7 @@ import android.view.MotionEvent; import com.squareup.otto.Bus; import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.activity.ThemedAppCompatActivity; import org.mariotaku.twidere.activity.iface.IControlBarActivity; import org.mariotaku.twidere.activity.iface.IExtendedActivity; import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java deleted file mode 100644 index f831be098..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.activity; - -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.support.annotation.NonNull; -import android.view.KeyEvent; - -import org.mariotaku.twidere.BuildConfig; -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.ActivityTracker; -import org.mariotaku.twidere.util.KeyboardShortcutsHandler; -import org.mariotaku.twidere.util.StrictModeUtils; -import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.Utils; -import org.mariotaku.twidere.util.dagger.GeneralComponentHelper; -import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle; - -import javax.inject.Inject; - -public abstract class BasePreferenceActivity extends PreferenceActivity implements Constants, - IThemedActivity, KeyboardShortcutsHandler.KeyboardShortcutCallback { - - // Data fields - private int mCurrentThemeColor; - private int mCurrentThemeBackgroundAlpha; - @ShapeStyle - private int mProfileImageStyle; - private String mCurrentThemeBackgroundOption; - @Inject - protected KeyboardShortcutsHandler mKeyboardShortcutsHandler; - private String mCurrentThemeFontFamily; - @Inject - protected ActivityTracker mActivityTracker; - private int mMetaState; - - @Override - public String getCurrentThemeFontFamily() { - return mCurrentThemeFontFamily; - } - - @Override - public int getCurrentThemeBackgroundAlpha() { - return mCurrentThemeBackgroundAlpha; - } - - @Override - public String getCurrentThemeBackgroundOption() { - return mCurrentThemeBackgroundOption; - } - - @Override - public int getCurrentThemeColor() { - return mCurrentThemeColor; - } - - @Override - public int getThemeBackgroundAlpha() { - return ThemeUtils.getUserThemeBackgroundAlpha(this); - } - - @Override - public String getThemeBackgroundOption() { - return ThemeUtils.getThemeBackgroundOption(this); - } - - @Override - public String getThemeFontFamily() { - return ThemeUtils.getThemeFontFamily(this); - } - - @Override - @ShapeStyle - public int getCurrentProfileImageStyle() { - return mProfileImageStyle; - } - - @Override - public final void restart() { - Utils.restartActivity(this); - } - - @Override - public boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event, int metaState) { - return false; - } - - @Override - public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event, int metaState) { - return false; - } - - @Override - protected void onCreate(final Bundle savedInstanceState) { - if (BuildConfig.DEBUG) { - StrictModeUtils.detectAllVmPolicy(); - StrictModeUtils.detectAllThreadPolicy(); - } - super.onCreate(savedInstanceState); - GeneralComponentHelper.build(this).inject(this); - } - - @Override - public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) { - if (KeyEvent.isModifierKey(keyCode)) { - mMetaState &= ~KeyboardShortcutsHandler.getMetaStateForKeyCode(keyCode); - } - if (handleKeyboardShortcutSingle(mKeyboardShortcutsHandler, keyCode, event, mMetaState)) - return true; - return super.onKeyUp(keyCode, event); - } - - @Override - public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { - if (KeyEvent.isModifierKey(keyCode)) { - mMetaState |= KeyboardShortcutsHandler.getMetaStateForKeyCode(keyCode); - } - if (handleKeyboardShortcutRepeat(mKeyboardShortcutsHandler, keyCode, event.getRepeatCount(), event, mMetaState)) - return true; - return super.onKeyDown(keyCode, event); - } - - @Override - protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resId, boolean first) { - mCurrentThemeColor = getThemeColor(); - mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); - mProfileImageStyle = Utils.getProfileImageStyle(this); - mCurrentThemeBackgroundOption = getThemeBackgroundOption(); - mCurrentThemeFontFamily = getThemeFontFamily(); - super.onApplyThemeResource(theme, resId, first); - - if (shouldApplyWindowBackground()) { - ThemeUtils.applyWindowBackground(this, getWindow(), - mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha); - } - } - - - @Override - public void onConfigurationChanged(Configuration newConfig) { - ThemeUtils.fixNightMode(getResources(), newConfig); - super.onConfigurationChanged(newConfig); - } - - protected boolean shouldApplyWindowBackground() { - return true; - } - - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseSupportDialogActivity.java similarity index 97% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/BaseSupportDialogActivity.java index 5da9af097..704512415 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseSupportDialogActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.annotation.SuppressLint; import android.content.res.Configuration; @@ -33,6 +33,7 @@ import android.view.View; import android.view.ViewGroup; import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.activity.ThemedFragmentActivity; import org.mariotaku.twidere.util.ThemeUtils; @SuppressLint("Registered") diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BrowserSignInActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/BrowserSignInActivity.java index 26cd8cc40..71d4a96e5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/BrowserSignInActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.annotation.SuppressLint; import android.app.Activity; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ColorPickerDialogActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ColorPickerDialogActivity.java similarity index 95% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/ColorPickerDialogActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/ColorPickerDialogActivity.java index 465111862..cbfd5a1c3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ColorPickerDialogActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ColorPickerDialogActivity.java @@ -17,12 +17,13 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; +import org.mariotaku.twidere.activity.BaseSupportDialogActivity; import org.mariotaku.twidere.fragment.support.ColorPickerDialogFragment; import org.mariotaku.twidere.fragment.support.ColorPickerDialogFragment.Callback; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ComposeActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/ComposeActivity.java index cd6c2c94e..90bbc3833 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ComposeActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.Manifest; import android.app.Activity; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/CustomTabEditorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/CustomTabEditorActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/CustomTabEditorActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/CustomTabEditorActivity.java index 35e3c346d..aae163ef3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/CustomTabEditorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/CustomTabEditorActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.app.AlertDialog; import android.app.Dialog; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/DataExportActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/DataExportActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/DataExportActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/DataExportActivity.java index b67896bb2..810657b40 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/DataExportActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/DataExportActivity.java @@ -1,4 +1,4 @@ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.Intent; import android.os.AsyncTask; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/DataImportActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/DataImportActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/DataImportActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/DataImportActivity.java index d9d5357b9..ac718340c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/DataImportActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/DataImportActivity.java @@ -1,4 +1,4 @@ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.Intent; import android.os.AsyncTask; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/FileSelectorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/FileSelectorActivity.java similarity index 98% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/FileSelectorActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/FileSelectorActivity.java index c9baa41c8..792560347 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/FileSelectorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/FileSelectorActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.Manifest; import android.content.Intent; @@ -31,6 +31,7 @@ import android.support.v4.app.DialogFragment; import android.widget.Toast; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.activity.BaseSupportDialogActivity; import org.mariotaku.twidere.fragment.support.FileSelectorDialogFragment; import org.mariotaku.twidere.util.PermissionUtils; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/HomeActivity.java similarity index 90% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/HomeActivity.java index 879ada975..0ed98d96a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/HomeActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.app.PendingIntent; import android.app.SearchManager; @@ -27,24 +27,22 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.database.ContentObserver; -import android.graphics.Color; -import android.graphics.PorterDuff.Mode; import android.graphics.Rect; import android.net.Uri; import android.os.AsyncTask; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceActivity; import android.support.annotation.NonNull; +import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.NotificationCompat; import android.support.v4.view.GravityCompat; -import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayoutAccessor; +import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.util.SparseIntArray; import android.view.Gravity; @@ -56,16 +54,12 @@ import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.view.Window; -import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import com.squareup.otto.Subscribe; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.SettingsActivity; -import org.mariotaku.twidere.activity.SettingsWizardActivity; -import org.mariotaku.twidere.activity.UsageStatisticsActivity; import org.mariotaku.twidere.adapter.SupportTabsAdapter; import org.mariotaku.twidere.annotation.CustomTabType; import org.mariotaku.twidere.annotation.ReadPositionTag; @@ -99,14 +93,9 @@ import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.TwidereColorUtils; import org.mariotaku.twidere.util.TwidereMathUtils; import org.mariotaku.twidere.util.Utils; -import org.mariotaku.twidere.util.support.ActivitySupport; -import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat; -import org.mariotaku.twidere.util.support.ViewSupport; -import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat; +import org.mariotaku.twidere.view.ExtendedFrameLayout; import org.mariotaku.twidere.view.ExtendedViewPager; import org.mariotaku.twidere.view.TabPagerIndicator; -import org.mariotaku.twidere.view.TintedStatusFrameLayout; -import org.mariotaku.twidere.view.iface.IHomeActionButton; import java.util.Collections; import java.util.List; @@ -125,16 +114,15 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen private SupportTabsAdapter mPagerAdapter; private ExtendedViewPager mViewPager; + private Toolbar mActionBar; private TabPagerIndicator mTabIndicator; private DrawerLayout mDrawerLayout; private View mEmptyTabHint; - private View mActionsButton; - private View mActionBarWithOverlay; - private TintedStatusFrameLayout mHomeContent; + private FloatingActionButton mActionsButton; + private ExtendedFrameLayout mHomeContent; private UpdateUnreadCountTask mUpdateUnreadCountTask; - private Toolbar mActionBar; private OnSharedPreferenceChangeListener mReadStateChangeListener = new OnSharedPreferenceChangeListener() { @Override @@ -144,7 +132,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen }; private ControlBarShowHideHelper mControlBarShowHideHelper = new ControlBarShowHideHelper(this); private int mTabColumns; - private View mActionBarContainer; public void closeAccountsDrawer() { if (mDrawerLayout == null) return; @@ -185,8 +172,14 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen @Override public boolean getSystemWindowsInsets(Rect insets) { - final int height = mTabIndicator != null ? mTabIndicator.getHeight() : 0; - insets.top = (height != 0 ? height : ThemeUtils.getActionBarHeight(this)); + if (mTabIndicator == null || mHomeContent == null) return false; + final int height = mTabIndicator.getHeight(); + if (height != 0) { + insets.top = height; + } else { + insets.top = ThemeUtils.getActionBarHeight(this); + } + insets.top += mHomeContent.getTop(); return true; } @@ -327,14 +320,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen */ @Override protected void onCreate(final Bundle savedInstanceState) { - final Window window = getWindow(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(Color.TRANSPARENT); - } - } super.onCreate(savedInstanceState); mMultiSelectHandler = new MultiSelectEventHandler(this); mMultiSelectHandler.dispatchOnCreate(); @@ -353,7 +338,9 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen return; } setContentView(R.layout.activity_home); + setSupportActionBar(mActionBar); + final boolean refreshOnStart = mPreferences.getBoolean(KEY_REFRESH_ON_START, false); int tabDisplayOptionInt = Utils.getTabDisplayOptionInt(this); @@ -362,7 +349,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen mHomeContent.setOnFitSystemWindowsListener(this); mPagerAdapter = new SupportTabsAdapter(this, getSupportFragmentManager(), mTabIndicator, mTabColumns); mViewPager.setAdapter(mPagerAdapter); -// mViewPager.setOffscreenPageLimit(3); mTabIndicator.setViewPager(mViewPager); mTabIndicator.setOnPageChangeListener(this); mTabIndicator.setColumns(mTabColumns); @@ -374,16 +360,22 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen mTabIndicator.setDisplayBadge(mPreferences.getBoolean(KEY_UNREAD_COUNT, true)); mTabIndicator.updateAppearance(); + mHomeContent.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { + if (top != oldTop) { + final Fragment fragment = getLeftDrawerFragment(); + if (fragment instanceof AccountsDashboardFragment) { + ((AccountsDashboardFragment) fragment).requestFitSystemWindows(); + } + } + } + }); + mActionsButton.setOnClickListener(this); mActionsButton.setOnLongClickListener(this); mEmptyTabHint.setOnClickListener(this); - ThemeUtils.setCompatContentViewOverlay(this, new EmptyDrawable()); - ViewCompat.setElevation(mActionBarContainer, ThemeUtils.getSupportActionBarElevation(this)); - ViewSupport.setOutlineProvider(mActionBarContainer, ViewOutlineProviderCompat.BACKGROUND); - final View windowOverlay = findViewById(R.id.window_overlay); - ViewSupport.setBackground(windowOverlay, ThemeUtils.getNormalWindowContentOverlay(this)); - setupSlidingMenu(); setupBars(); showDataProfilingRequest(); @@ -424,11 +416,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen @Override protected void onResume() { super.onResume(); - if (ThemeUtils.isDarkTheme(this)) { - // TODO show dark bar - } else { - ActivitySupport.setTaskDescription(this, new TaskDescriptionCompat(null, null, getThemeColor())); - } invalidateOptionsMenu(); updateActionsButtonStyle(); updateActionsButton(); @@ -533,7 +520,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen if (fragment instanceof AccountsDashboardFragment) { ((AccountsDashboardFragment) fragment).requestFitSystemWindows(); } - mHomeContent.setStatusBarHeight(insets.top); } public void updateUnreadCount() { @@ -588,12 +574,14 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen return 1 - mActionsButton.getTranslationY() / total; } final float totalHeight = getControlBarHeight(); - return 1 + mActionBarWithOverlay.getTranslationY() / totalHeight; + return 1 + mActionBar.getTranslationY() / totalHeight; } @Override public void setControlBarOffset(float offset) { - mActionBarWithOverlay.setTranslationY(mTabColumns > 1 ? 0 : getControlBarHeight() * (offset - 1)); + final ActionBar actionBar = getSupportActionBar(); + if (actionBar == null) return; + mActionBar.setTranslationY(mTabColumns > 1 ? 0 : (int) (getControlBarHeight() * (offset - 1))); final ViewGroup.LayoutParams lp = mActionsButton.getLayoutParams(); if (lp instanceof MarginLayoutParams) { mActionsButton.setTranslationY((((MarginLayoutParams) lp).bottomMargin + mActionsButton.getHeight()) * (1 - offset)); @@ -606,16 +594,13 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen @Override public void onContentChanged() { super.onContentChanged(); - mActionBar = (Toolbar) findViewById(R.id.action_bar); - mActionBarContainer = findViewById(R.id.twidere_action_bar_container); mTabIndicator = (TabPagerIndicator) findViewById(R.id.main_tabs); + mActionBar = (Toolbar) findViewById(R.id.action_bar); mDrawerLayout = (DrawerLayout) findViewById(R.id.home_menu); mViewPager = (ExtendedViewPager) findViewById(R.id.main_pager); mEmptyTabHint = findViewById(R.id.empty_tab_hint); - mActionsButton = findViewById(R.id.actions_button); - mActionBarWithOverlay = findViewById(R.id.twidere_action_bar_with_overlay); - mTabIndicator = (TabPagerIndicator) findViewById(R.id.main_tabs); - mHomeContent = (TintedStatusFrameLayout) findViewById(R.id.home_content); + mActionsButton = (FloatingActionButton) findViewById(R.id.actions_button); + mHomeContent = (ExtendedFrameLayout) findViewById(R.id.home_content); } private Fragment getKeyboardShortcutRecipient() { @@ -747,34 +732,20 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen final String backgroundOption = getCurrentThemeBackgroundOption(); final boolean isTransparent = ThemeUtils.isTransparentBackground(backgroundOption); final int actionBarAlpha = isTransparent ? ThemeUtils.getActionBarAlpha(ThemeUtils.getUserThemeBackgroundAlpha(this)) : 0xFF; - final IHomeActionButton homeActionButton = (IHomeActionButton) mActionsButton; mTabIndicator.setItemContext(ThemeUtils.getActionBarThemedContext(this, themeColor)); - ViewSupport.setBackground(mActionBarContainer, ThemeUtils.getActionBarBackground(this, themeColor, - backgroundOption, true)); - final int actionBarColor = ThemeUtils.getActionBarColor(this, themeColor, backgroundOption); - final int actionItemColor = ThemeUtils.getContrastForegroundColor(this, themeColor); final int[] foregroundColors = new int[2]; ThemeUtils.getColorForegroundAndInverse(this, foregroundColors); if (ThemeUtils.isDarkTheme(this)) { - homeActionButton.setButtonColor(actionBarColor); - homeActionButton.setIconColor(actionItemColor, Mode.SRC_ATOP); mTabIndicator.setStripColor(themeColor); mTabIndicator.setIconColor(foregroundColors[0]); mTabIndicator.setLabelColor(foregroundColors[0]); } else { final int contrastColor = TwidereColorUtils.getContrastYIQ(themeColor, ThemeUtils.ACCENT_COLOR_THRESHOLD, foregroundColors[0], foregroundColors[1]); - homeActionButton.setButtonColor(themeColor); - homeActionButton.setIconColor(actionItemColor, Mode.SRC_ATOP); mTabIndicator.setStripColor(contrastColor); mTabIndicator.setIconColor(contrastColor); mTabIndicator.setLabelColor(contrastColor); } - mHomeContent.setDrawColor(true); - mHomeContent.setDrawShadow(false); - mHomeContent.setColor(actionBarColor, actionBarAlpha); - mHomeContent.setFactor(1); - mActionBarWithOverlay.setAlpha(actionBarAlpha / 255f); mActionsButton.setAlpha(actionBarAlpha / 255f); } @@ -843,11 +814,8 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen icon = R.drawable.ic_action_status_compose; title = R.string.compose; } - if (mActionsButton instanceof IHomeActionButton) { - final IHomeActionButton hab = (IHomeActionButton) mActionsButton; - hab.setIcon(icon); - hab.setTitle(title); - } + mActionsButton.setImageResource(icon); + mActionsButton.setContentDescription(getString(title)); } private void updateActionsButtonStyle() { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/ImageCropperActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ImageCropperActivity.java index 7580736fd..15f5e241a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/ImageCropperActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ImageCropperActivity.java @@ -138,11 +138,6 @@ public class ImageCropperActivity extends CropImageActivity implements IThemedAc return mProfileImageStyle; } - @Override - public final void restart() { - Utils.restartActivity(this); - } - @Override protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resId, boolean first) { mCurrentThemeColor = getThemeColor(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/KeyboardShortcutPreferenceCompatActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/KeyboardShortcutPreferenceCompatActivity.java index 495df222f..d484e383d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/KeyboardShortcutPreferenceCompatActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/KeyboardShortcutPreferenceCompatActivity.java @@ -37,7 +37,8 @@ import org.mariotaku.twidere.util.ThemeUtils; /** * Created by mariotaku on 15/4/20. */ -public class KeyboardShortcutPreferenceCompatActivity extends BaseThemedActivity implements Constants, OnClickListener { +public class KeyboardShortcutPreferenceCompatActivity extends BaseSupportDialogActivity implements + Constants, OnClickListener { public static final String EXTRA_CONTEXT_TAG = "context_tag"; public static final String EXTRA_KEY_ACTION = "key_action"; @@ -74,12 +75,12 @@ public class KeyboardShortcutPreferenceCompatActivity extends BaseThemedActivity switch (v.getId()) { case R.id.button_positive: { if (mKeySpec == null) return; - mKeyboardShortcutHandler.register(mKeySpec, getKeyAction()); + mKeyboardShortcutsHandler.register(mKeySpec, getKeyAction()); finish(); break; } case R.id.button_neutral: { - mKeyboardShortcutHandler.unregister(getKeyAction()); + mKeyboardShortcutsHandler.unregister(getKeyAction()); finish(); break; } @@ -112,10 +113,10 @@ public class KeyboardShortcutPreferenceCompatActivity extends BaseThemedActivity } mKeySpec = spec; mKeysLabel.setText(spec.toKeyString()); - final String oldAction = mKeyboardShortcutHandler.findAction(spec); + final String oldAction = mKeyboardShortcutsHandler.findAction(spec); final KeyboardShortcutSpec copyOfSpec = spec.copy(); copyOfSpec.setContextTag(null); - final String oldGeneralAction = mKeyboardShortcutHandler.findAction(copyOfSpec); + final String oldGeneralAction = mKeyboardShortcutsHandler.findAction(copyOfSpec); if (!TextUtils.isEmpty(oldAction) && !keyAction.equals(oldAction)) { // Conflicts with keys in same context tag mConflictLabel.setVisibility(View.VISIBLE); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/LinkHandlerActivity.java similarity index 78% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/LinkHandlerActivity.java index 13d3b3134..41b11f695 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/LinkHandlerActivity.java @@ -17,30 +17,25 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Rect; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.NavUtils; -import android.support.v4.view.ViewCompat; import android.support.v7.app.ActionBar; import android.support.v7.widget.ActionBarContainer; import android.support.v7.widget.ActionMenuView; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager.LayoutParams; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.iface.IControlBarActivity; @@ -53,14 +48,10 @@ import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; import org.mariotaku.twidere.util.MultiSelectEventHandler; import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.TwidereActionModeForChildListener; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.support.ActivitySupport; import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat; import org.mariotaku.twidere.util.support.ViewSupport; -import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat; -import org.mariotaku.twidere.view.TintedStatusFrameLayout; -import org.mariotaku.twidere.view.TintedStatusNativeActionModeAwareLayout; import static org.mariotaku.twidere.util.Utils.createFragmentForIntent; import static org.mariotaku.twidere.util.Utils.matchLinkId; @@ -70,8 +61,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System private ControlBarShowHideHelper mControlBarShowHideHelper = new ControlBarShowHideHelper(this); private MultiSelectEventHandler mMultiSelectHandler; - private TwidereActionModeForChildListener mTwidereActionModeForChildListener; - private TintedStatusFrameLayout mMainContent; private final View.OnLayoutChangeListener mLayoutChangeListener = new View.OnLayoutChangeListener() { private final Rect tempInsets = new Rect(); @@ -81,14 +70,11 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if (compatCalled) return; if (left != oldLeft || top != oldTop || right != oldRight || bottom != oldBottom && !ViewSupport.isInLayout(v)) { - mMainContent.getSystemWindowsInsets(tempInsets); onFitSystemWindows(tempInsets); compatCalled = true; } } }; - private View mActionBarWithOverlay; - private ActionBarContainer mActionBarContainer; private boolean mFinishOnly; private int mActionBarHeight; @@ -104,14 +90,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System return false; } - @Override - public void onBackPressed() { - if (mTwidereActionModeForChildListener.finishExisting()) { - return; - } - super.onBackPressed(); - } - @Override public void onFitSystemWindows(Rect insets) { final View actionBarContainer = findViewById(R.id.twidere_action_bar_container); @@ -206,28 +184,14 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System final Intent intent = getIntent(); final Uri data = intent.getData(); final int linkId = matchLinkId(data); - requestWindowFeatures(getWindow(), linkId, data); super.onCreate(savedInstanceState); - setContentView(R.layout.activity_content_fragment); - setSupportActionBar((Toolbar) findViewById(R.id.action_bar)); - - mTwidereActionModeForChildListener = new TwidereActionModeForChildListener(this, this, false); - final TintedStatusNativeActionModeAwareLayout layout = (TintedStatusNativeActionModeAwareLayout) findViewById(R.id.main_content); - layout.setActionModeForChildListener(mTwidereActionModeForChildListener); ThemeUtils.setCompatContentViewOverlay(this, new EmptyDrawable()); - final View actionBarContainer = findViewById(R.id.twidere_action_bar_container); - ViewCompat.setElevation(actionBarContainer, ThemeUtils.getSupportActionBarElevation(this)); - ViewSupport.setOutlineProvider(actionBarContainer, ViewOutlineProviderCompat.BACKGROUND); - final View windowOverlay = findViewById(R.id.window_overlay); - ViewSupport.setBackground(windowOverlay, ThemeUtils.getNormalWindowContentOverlay(this)); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); setActionBarTheme(linkId); } - mMainContent.setOnFitSystemWindowsListener(this); - setStatusBarColor(linkId, data); Utils.logOpenNotificationFromUri(this, data); if (!showFragment(linkId, data)) { finish(); @@ -237,7 +201,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System @Override protected void onStart() { - mMainContent.addOnLayoutChangeListener(mLayoutChangeListener); super.onStart(); mMultiSelectHandler.dispatchOnStart(); } @@ -246,22 +209,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System protected void onStop() { mMultiSelectHandler.dispatchOnStop(); super.onStop(); - mMainContent.removeOnLayoutChangeListener(mLayoutChangeListener); - } - - @Override - public boolean onPreparePanel(int featureId, View view, Menu menu) { - final boolean result = super.onPreparePanel(featureId, view, menu); - if (shouldSetActionItemColor()) { - setupToolbarMenuItemColor(); - mActionBarContainer.post(new Runnable() { - @Override - public void run() { - setupToolbarMenuItemColor(); - } - }); - } - return result; } private void setupToolbarMenuItemColor() { @@ -282,9 +229,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System @Override public void onContentChanged() { super.onContentChanged(); - mMainContent = (TintedStatusFrameLayout) findViewById(R.id.main_content); - mActionBarWithOverlay = findViewById(R.id.twidere_action_bar_with_overlay); - mActionBarContainer = (ActionBarContainer) findViewById(R.id.twidere_action_bar_container); } protected boolean shouldSetActionItemColor() { @@ -313,24 +257,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System return false; } - private void requestWindowFeatures(Window window, int linkId, Uri uri) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - window.addFlags(LayoutParams.FLAG_TRANSLUCENT_STATUS); - } - final int transitionRes; - switch (linkId) { - default: { - transitionRes = 0; - break; - } - } - //noinspection ConstantConditions - if (transitionRes != 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - && !ThemeUtils.isTransparentBackground(getCurrentThemeBackgroundOption())) { - Utils.setSharedElementTransition(this, window, transitionRes); - } - } - @SuppressLint("AppCompatMethod") private void setActionBarTheme(int linkId) { final int themeColor = getCurrentThemeColor(); @@ -349,28 +275,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System break; } } - final boolean isTransparent = ThemeUtils.isTransparentBackground(option); - final int actionBarAlpha = isTransparent ? ThemeUtils.getActionBarAlpha(ThemeUtils.getUserThemeBackgroundAlpha(this)) : 0xFF; - mActionBarWithOverlay.setAlpha(actionBarAlpha / 255f); - } - - private void setStatusBarColor(int linkId, Uri uri) { - switch (linkId) { - case LINK_ID_USER: { - mMainContent.setDrawShadow(true); - mMainContent.setShadowColor(0xA0000000); - break; - } - default: { - mMainContent.setDrawShadow(false); - break; - } - } - mMainContent.setDrawColor(true); - mMainContent.setFactor(1); - final int alpha = ThemeUtils.getActionBarAlpha(getThemeBackgroundOption(), getCurrentThemeBackgroundAlpha()); - final int statusBarColor = ThemeUtils.getActionBarColor(this, getCurrentThemeColor(), getThemeBackgroundOption()); - mMainContent.setColor(statusBarColor, alpha); } private boolean showFragment(final int linkId, final Uri uri) { @@ -528,7 +432,7 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System } mFinishOnly = Boolean.parseBoolean(uri.getQueryParameter(QUERY_PARAM_FINISH_ONLY)); final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.replace(R.id.content_fragment, fragment); + ft.replace(android.R.id.content, fragment); ft.commit(); return true; } @@ -549,14 +453,12 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System @Override public float getControlBarOffset() { - return 1 + mActionBarContainer.getTranslationY() / (float) getControlBarHeight(); + return 0; } @Override public void setControlBarOffset(float offset) { final int translationY = -Math.round((1 - offset) * getControlBarHeight()); - mActionBarContainer.setTranslationY(translationY); - mTwidereActionModeForChildListener.setModeTranslationY(translationY); notifyControlBarOffsetChanged(); } @@ -576,7 +478,7 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System } public ActionBarContainer getActionBarContainer() { - return mActionBarContainer; + return null; } public interface HideUiOnScroll { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/MainActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/MainActivity.java index 1d69674e8..98ddd3254 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/MainActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/MainActivity.java @@ -26,7 +26,6 @@ import android.os.Bundle; import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.activity.support.HomeActivity; import org.mariotaku.twidere.util.StrictModeUtils; import org.mariotaku.twidere.util.ThemeUtils; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java index 059009ac0..33394a6c6 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.Manifest; import android.annotation.SuppressLint; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/QuickSearchBarActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/QuickSearchBarActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/QuickSearchBarActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/QuickSearchBarActivity.java index f32c0da4d..1ff11ebcb 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/QuickSearchBarActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/QuickSearchBarActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.ContentResolver; import android.content.Context; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/RequestPermissionsActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/RequestPermissionsActivity.java similarity index 98% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/RequestPermissionsActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/RequestPermissionsActivity.java index 094542ea7..fe646a81c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/RequestPermissionsActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/RequestPermissionsActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; @@ -36,6 +36,7 @@ import android.widget.ImageView; import android.widget.TextView; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.activity.BaseSupportDialogActivity; import org.mariotaku.twidere.util.HtmlEscapeHelper; import org.mariotaku.twidere.util.PermissionsManager; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java index 2a85cbd9d..f98c3dbf7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java @@ -51,7 +51,6 @@ import android.widget.ListView; import android.widget.TextView; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; import org.mariotaku.twidere.fragment.CustomTabsFragment; import org.mariotaku.twidere.fragment.ExtensionsListFragment; import org.mariotaku.twidere.fragment.SettingsDetailsFragment; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsWizardActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsWizardActivity.java index 28d29de1c..b9766535d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsWizardActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsWizardActivity.java @@ -35,12 +35,9 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.v4.view.LayoutInflaterCompat; -import android.support.v4.view.LayoutInflaterFactory; import android.support.v4.view.ViewPager; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; -import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -48,9 +45,6 @@ import android.view.ViewGroup; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; -import org.mariotaku.twidere.activity.support.DataImportActivity; -import org.mariotaku.twidere.activity.support.HomeActivity; import org.mariotaku.twidere.adapter.SupportTabsAdapter; import org.mariotaku.twidere.annotation.CustomTabType; import org.mariotaku.twidere.fragment.BasePreferenceFragment; @@ -70,7 +64,6 @@ import org.mariotaku.twidere.util.CustomTabUtils; import org.mariotaku.twidere.util.InternalParseUtils; import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory; import org.mariotaku.twidere.util.TwidereMathUtils; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.view.LinePageIndicator; @@ -174,21 +167,6 @@ public class SettingsWizardActivity extends BaseAppCompatActivity implements Con return ThemeUtils.getUserAccentColor(this); } - @NonNull - @Override - public LayoutInflater getLayoutInflater() { - final LayoutInflater inflater = super.getLayoutInflater(); - if (inflater.getFactory() == null) { - LayoutInflaterCompat.setFactory(inflater, new ThemedLayoutInflaterFactory(this, new LayoutInflaterFactory() { - @Override - public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { - return SettingsWizardActivity.this.onCreateView(parent, name, context, attrs); - } - })); - } - return inflater; - } - @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -314,7 +292,7 @@ public class SettingsWizardActivity extends BaseAppCompatActivity implements Con final Intent intent = getIntent(); intent.putExtra(EXTRA_PAGE, mViewPager.getCurrentItem()); setIntent(intent); - restart(); + recreate(); } public static class WizardPageCardsFragment extends BaseWizardPageFragment { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/SignInActivity.java similarity index 98% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/SignInActivity.java index 9844b4d60..0e1660f13 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/SignInActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.app.Dialog; import android.content.ContentResolver; @@ -41,7 +41,6 @@ import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewCompat; -import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.ActionMenuView; import android.support.v7.widget.Toolbar; @@ -69,7 +68,6 @@ import org.mariotaku.restfu.http.Endpoint; import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.SettingsActivity; import org.mariotaku.twidere.activity.iface.IExtendedActivity; import org.mariotaku.twidere.api.statusnet.model.StatusNetConfig; import org.mariotaku.twidere.api.twitter.Twitter; @@ -533,21 +531,6 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList return true; } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - setupActionBar(); - } - - private void setupActionBar() { - final ActionBar actionBar = getSupportActionBar(); - if (actionBar == null) return; - - final int themeColor = getCurrentThemeColor(); - final String option = getThemeBackgroundOption(); - ThemeUtils.applyActionBarBackground(actionBar, this, themeColor, option, isActionBarOutlineEnabled()); - } - private void setupTintStatusBar() { if (mMainContent == null) return; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ThemedAppCompatActivity.java similarity index 69% rename from twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/ThemedAppCompatActivity.java index b3e3e3824..4af509c0e 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ThemedAppCompatActivity.java @@ -19,32 +19,39 @@ package org.mariotaku.twidere.activity; -import android.app.Activity; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.Toolbar; +import android.view.View; +import android.view.Window; + +import com.afollestad.appthemeengine.ATE; +import com.afollestad.appthemeengine.ATEActivity; import org.mariotaku.twidere.BuildConfig; +import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.activity.iface.IAppCompatActivity; import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.StrictModeUtils; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.Utils; -import org.mariotaku.twidere.util.dagger.GeneralComponentHelper; -import org.mariotaku.twidere.view.ShapedImageView; +import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle; -import javax.inject.Inject; - -public abstract class BaseThemedActivity extends Activity implements IThemedActivity { +public abstract class ThemedAppCompatActivity extends ATEActivity implements Constants, + IThemedActivity, IAppCompatActivity { + // Data fields private int mCurrentThemeColor; private int mCurrentThemeBackgroundAlpha; - private String mCurrentThemeFontFamily; - private String mCurrentThemeBackgroundOption; + @ShapeStyle private int mProfileImageStyle; - @Inject - protected KeyboardShortcutsHandler mKeyboardShortcutHandler; + private String mCurrentThemeBackgroundOption; + private String mCurrentThemeFontFamily; + + private Toolbar mToolbar; @Override public String getCurrentThemeFontFamily() { @@ -72,7 +79,9 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi } @Override - public abstract int getThemeColor(); + public String getThemeBackgroundOption() { + return ThemeUtils.getThemeBackgroundOption(this); + } @Override public String getThemeFontFamily() { @@ -80,52 +89,42 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi } @Override - @ShapedImageView.ShapeStyle + @ShapeStyle public int getCurrentProfileImageStyle() { return mProfileImageStyle; } - @Override - public final void restart() { - Utils.restartActivity(this); - } - - @Override protected void onCreate(final Bundle savedInstanceState) { if (BuildConfig.DEBUG) { StrictModeUtils.detectAllVmPolicy(); StrictModeUtils.detectAllThreadPolicy(); } + final int themeColor = getThemeColor(); + super.onCreate(savedInstanceState); - GeneralComponentHelper.build(this).inject(this); - setActionBarBackground(); } - private void setActionBarBackground() { - } + @Nullable @Override - public void setTheme(int resId) { - super.setTheme(resId); - if (shouldApplyWindowBackground()) { - ThemeUtils.applyWindowBackground(this, getWindow(), - mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha); - } + public String getATEKey() { + return ThemeUtils.getATEKey(this); } @Override protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resId, boolean first) { mCurrentThemeColor = getThemeColor(); - mCurrentThemeFontFamily = getThemeFontFamily(); mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); - mCurrentThemeBackgroundOption = getThemeBackgroundOption(); mProfileImageStyle = Utils.getProfileImageStyle(this); + mCurrentThemeBackgroundOption = getThemeBackgroundOption(); + mCurrentThemeFontFamily = getThemeFontFamily(); super.onApplyThemeResource(theme, resId, first); - } - - protected boolean shouldApplyWindowBackground() { - return true; + final Window window = getWindow(); + if (shouldApplyWindowBackground()) { + ThemeUtils.applyWindowBackground(this, window, mCurrentThemeBackgroundOption, + mCurrentThemeBackgroundAlpha); + } } @@ -134,4 +133,24 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi ThemeUtils.fixNightMode(getResources(), newConfig); super.onConfigurationChanged(newConfig); } + + @Nullable + public final Toolbar peekActionBarToolbar() { + return mToolbar; + } + + @Nullable + public final Toolbar getActionBarToolbar() { + if (mToolbar != null) return mToolbar; + final View actionBarView = getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar); + if (actionBarView instanceof Toolbar) { + return (Toolbar) actionBarView; + } + return null; + } + + protected boolean shouldApplyWindowBackground() { + return true; + } + } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ThemedFragmentActivity.java similarity index 86% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/ThemedFragmentActivity.java index b883e7f52..6b96ff0d7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ThemedFragmentActivity.java @@ -17,20 +17,14 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; -import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentActivity; -import android.support.v4.view.LayoutInflaterCompat; -import android.support.v4.view.LayoutInflaterFactory; -import android.util.AttributeSet; import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; import com.squareup.otto.Bus; @@ -46,7 +40,6 @@ import org.mariotaku.twidere.util.PermissionsManager; import org.mariotaku.twidere.util.SharedPreferencesWrapper; import org.mariotaku.twidere.util.StrictModeUtils; import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory; import org.mariotaku.twidere.util.UserColorNameManager; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.dagger.GeneralComponentHelper; @@ -84,21 +77,6 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements private String mCurrentThemeFontFamily; private int mMetaState; - @NonNull - @Override - public LayoutInflater getLayoutInflater() { - final LayoutInflater inflater = super.getLayoutInflater(); - if (inflater.getFactory() == null) { - LayoutInflaterCompat.setFactory(inflater, new ThemedLayoutInflaterFactory(this, new LayoutInflaterFactory() { - @Override - public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { - return ThemedFragmentActivity.this.onCreateView(parent, name, context, attrs); - } - })); - } - return inflater; - } - @Override public String getCurrentThemeFontFamily() { return mCurrentThemeFontFamily; @@ -140,11 +118,6 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements return mProfileImageStyle; } - @Override - public final void restart() { - Utils.restartActivity(this); - } - @Override protected void onCreate(final Bundle savedInstanceState) { if (BuildConfig.DEBUG) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedImagePickerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/ThemedImagePickerActivity.java similarity index 95% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedImagePickerActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/ThemedImagePickerActivity.java index 6491b9cfd..742cf7142 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedImagePickerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/ThemedImagePickerActivity.java @@ -1,4 +1,4 @@ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.Context; import android.content.Intent; @@ -6,7 +6,6 @@ import android.net.Uri; import android.support.annotation.NonNull; import org.mariotaku.pickncrop.library.ImagePickerActivity; -import org.mariotaku.twidere.activity.ImageCropperActivity; import org.mariotaku.twidere.util.RestFuNetworkStreamDownloader; public class ThemedImagePickerActivity extends ImagePickerActivity { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java index 5d21103e5..db1adc1ef 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java @@ -15,7 +15,6 @@ import android.util.Pair; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.math.NumberUtils; import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.activity.support.ComposeActivity; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.support.IntentSupport; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/UserListSelectorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/UserListSelectorActivity.java similarity index 99% rename from twidere/src/main/java/org/mariotaku/twidere/activity/support/UserListSelectorActivity.java rename to twidere/src/main/java/org/mariotaku/twidere/activity/UserListSelectorActivity.java index 5218f304e..10cfdd807 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/UserListSelectorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/UserListSelectorActivity.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package org.mariotaku.twidere.activity.support; +package org.mariotaku.twidere.activity; import android.content.Intent; import android.os.AsyncTask; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java index 9c21eb4ed..7dc004cd8 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java @@ -42,6 +42,4 @@ public interface IThemedActivity { @ShapedImageView.ShapeStyle int getCurrentProfileImageStyle(); - void restart(); - } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedAppCompatActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedAppCompatActivity.java deleted file mode 100644 index 3ff8e893c..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedAppCompatActivity.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.activity.support; - -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.app.ThemedAppCompatDelegateFactory; -import android.support.v7.widget.ActionBarContainer; -import android.support.v7.widget.Toolbar; -import android.view.Menu; -import android.view.View; -import android.view.Window; - -import org.mariotaku.twidere.BuildConfig; -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.iface.IAppCompatActivity; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.StrictModeUtils; -import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.Utils; -import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle; - -public abstract class ThemedAppCompatActivity extends AppCompatActivity implements Constants, - IThemedActivity, IAppCompatActivity { - - // Data fields - private int mCurrentThemeColor; - private int mCurrentThemeBackgroundAlpha; - @ShapeStyle - private int mProfileImageStyle; - private String mCurrentThemeBackgroundOption; - private String mCurrentThemeFontFamily; - - private ThemedAppCompatDelegateFactory.ThemedAppCompatDelegate mDelegate; - private Toolbar mToolbar; - - @Override - public String getCurrentThemeFontFamily() { - return mCurrentThemeFontFamily; - } - - @Override - public int getCurrentThemeBackgroundAlpha() { - return mCurrentThemeBackgroundAlpha; - } - - @Override - public String getCurrentThemeBackgroundOption() { - return mCurrentThemeBackgroundOption; - } - - @Override - public int getCurrentThemeColor() { - return mCurrentThemeColor; - } - - @Override - public int getThemeBackgroundAlpha() { - return ThemeUtils.getUserThemeBackgroundAlpha(this); - } - - @Override - public String getThemeBackgroundOption() { - return ThemeUtils.getThemeBackgroundOption(this); - } - - @Override - public String getThemeFontFamily() { - return ThemeUtils.getThemeFontFamily(this); - } - - @Override - @ShapeStyle - public int getCurrentProfileImageStyle() { - return mProfileImageStyle; - } - - @Override - public final void restart() { - Utils.restartActivity(this); - } - - @Override - protected void onCreate(final Bundle savedInstanceState) { - if (BuildConfig.DEBUG) { - StrictModeUtils.detectAllVmPolicy(); - StrictModeUtils.detectAllThreadPolicy(); - } - super.onCreate(savedInstanceState); - ThemeUtils.applyToolbarItemColor(this, getActionBarToolbar(), getCurrentThemeColor()); - } - - @Override - public void onSupportActionModeStarted(@NonNull android.support.v7.view.ActionMode mode) { - super.onSupportActionModeStarted(mode); - ThemeUtils.applySupportActionModeColor(mode, getCurrentThemeColor(), - getThemeBackgroundOption(), true); - ThemeUtils.applySupportActionModeItemColor(mode, getCurrentThemeColor()); - } - - @NonNull - @Override - public ThemedAppCompatDelegateFactory.ThemedAppCompatDelegate getDelegate() { - if (mDelegate != null) return mDelegate; - return mDelegate = ThemedAppCompatDelegateFactory.create(this, this); - } - - @Override - protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resId, boolean first) { - mCurrentThemeColor = getThemeColor(); - mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); - mProfileImageStyle = Utils.getProfileImageStyle(this); - mCurrentThemeBackgroundOption = getThemeBackgroundOption(); - mCurrentThemeFontFamily = getThemeFontFamily(); - super.onApplyThemeResource(theme, resId, first); - final Window window = getWindow(); - if (shouldApplyWindowBackground()) { - ThemeUtils.applyWindowBackground(this, window, mCurrentThemeBackgroundOption, - mCurrentThemeBackgroundAlpha); - } - } - - @Override - public void onContentChanged() { - super.onContentChanged(); - final Window window = getWindow(); - final Toolbar actionBarToolbar = (Toolbar) window.findViewById(R.id.action_bar); - final ActionBarContainer actionBarContainer = (ActionBarContainer) window.findViewById(R.id.action_bar_container); - ThemeUtils.applyActionBarBackground(actionBarContainer, this, mCurrentThemeColor, - mCurrentThemeBackgroundOption, true); - ThemeUtils.applyToolbarItemColor(this, actionBarToolbar, mCurrentThemeColor); - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - final boolean result = super.onPrepareOptionsMenu(menu); - final Window window = getWindow(); - final Toolbar actionBarToolbar = (Toolbar) window.findViewById(R.id.action_bar); - ThemeUtils.applyToolbarItemColor(this, actionBarToolbar, mCurrentThemeColor); - return result; - } - - @Override - public void setSupportActionBar(Toolbar toolbar) { - super.setSupportActionBar(toolbar); - mToolbar = toolbar; - ThemeUtils.applyToolbarItemColor(this, toolbar, mCurrentThemeColor); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - ThemeUtils.fixNightMode(getResources(), newConfig); - super.onConfigurationChanged(newConfig); - } - - @Nullable - public final Toolbar peekActionBarToolbar() { - return mToolbar; - } - - @Nullable - public final Toolbar getActionBarToolbar() { - if (mToolbar != null) return mToolbar; - final View actionBarView = getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar); - if (actionBarView instanceof Toolbar) { - return (Toolbar) actionBarView; - } - return null; - } - - protected boolean shouldApplyWindowBackground() { - return true; - } - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java b/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java index 63c428609..30c69fcce 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java +++ b/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java @@ -36,11 +36,15 @@ import android.os.Handler; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.multidex.MultiDex; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatDelegate; +import com.afollestad.appthemeengine.ATE; + import org.apache.commons.lang3.ArrayUtils; import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.AssistLauncherActivity; import org.mariotaku.twidere.activity.MainActivity; import org.mariotaku.twidere.activity.MainHondaJOJOActivity; @@ -114,6 +118,10 @@ public class TwidereApplication extends Application implements Constants, if (BuildConfig.DEBUG) { StrictModeUtils.detectAllVmPolicy(); } + if (!ATE.config(this, null).isConfigured()) { + final int accentColor = ThemeUtils.getUserAccentColor(this); + ATE.config(this, null).primaryColor(accentColor).accentColor(accentColor).commit(); + } resetTheme(getSharedPreferences()); super.onCreate(); initializeAsyncTask(); @@ -255,6 +263,12 @@ public class TwidereApplication extends Application implements Constants, resetTheme(preferences); break; } + case KEY_THEME_COLOR: { + final int themeColor = preferences.getInt(key, ContextCompat.getColor(this, R.color.branding_color)); + ATE.config(this, "light").primaryColor(themeColor).accentColor(themeColor).commit(); + ATE.config(this, "dark").accentColor(themeColor).commit(); + break; + } } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java index 233e04231..7f2d1f914 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java @@ -60,7 +60,7 @@ import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.sqliteqb.library.RawItemArray; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.SettingsActivity; -import org.mariotaku.twidere.activity.support.CustomTabEditorActivity; +import org.mariotaku.twidere.activity.CustomTabEditorActivity; import org.mariotaku.twidere.fragment.support.BaseSupportFragment; import org.mariotaku.twidere.model.CustomTabConfiguration; import org.mariotaku.twidere.model.CustomTabConfiguration.CustomTabConfigurationComparator; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java index 1eb17faa3..cadeaa17c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java @@ -35,7 +35,6 @@ import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Matrix; -import android.graphics.PorterDuff.Mode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; @@ -43,11 +42,11 @@ import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.NavigationView; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; -import android.support.v4.content.res.ResourcesCompat; import android.support.v4.view.MenuItemCompat; import android.support.v7.view.SupportMenuInflater; import android.support.v7.widget.ActionMenuView; @@ -66,23 +65,16 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.DecelerateInterpolator; -import android.widget.AdapterView; import android.widget.ImageView; -import android.widget.ListAdapter; -import android.widget.ListView; import android.widget.TextView; -import com.commonsware.cwac.merge.MergeAdapter; - import org.apache.commons.lang3.ArrayUtils; import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.activity.ComposeActivity; +import org.mariotaku.twidere.activity.HomeActivity; +import org.mariotaku.twidere.activity.QuickSearchBarActivity; import org.mariotaku.twidere.activity.SettingsActivity; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.activity.support.ComposeActivity; -import org.mariotaku.twidere.activity.support.HomeActivity; -import org.mariotaku.twidere.activity.support.QuickSearchBarActivity; -import org.mariotaku.twidere.adapter.ArrayAdapter; import org.mariotaku.twidere.annotation.CustomTabType; import org.mariotaku.twidere.menu.support.AccountToggleProvider; import org.mariotaku.twidere.model.ParcelableAccount; @@ -96,36 +88,27 @@ import org.mariotaku.twidere.util.DataStoreUtils; import org.mariotaku.twidere.util.IntentUtils; import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; -import org.mariotaku.twidere.util.ListViewUtils; import org.mariotaku.twidere.util.MediaLoaderWrapper; -import org.mariotaku.twidere.util.SharedPreferencesWrapper; -import org.mariotaku.twidere.util.ThemeUtils; +import org.mariotaku.twidere.util.MenuUtils; import org.mariotaku.twidere.util.TransitionUtils; -import org.mariotaku.twidere.util.UserColorNameManager; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver; -import org.mariotaku.twidere.util.dagger.GeneralComponentHelper; import org.mariotaku.twidere.view.ShapedImageView; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.inject.Inject; - public class AccountsDashboardFragment extends BaseSupportFragment implements LoaderCallbacks, OnSharedPreferenceChangeListener, OnClickListener, KeyboardShortcutCallback, - AdapterView.OnItemClickListener { + NavigationView.OnNavigationItemSelectedListener { private final Rect mSystemWindowsInsets = new Rect(); private ContentResolver mResolver; - private MergeAdapter mAdapter; private AccountSelectorAdapter mAccountsAdapter; - private AccountOptionsAdapter mAccountOptionsAdapter; - private AppMenuAdapter mAppMenuAdapter; - private ListView mListView; + private NavigationView mNavigationView; private View mAccountSelectorView; private RecyclerView mAccountsSelector; private ImageView mAccountProfileBannerView; @@ -197,25 +180,24 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo return false; } } - final int firstVisiblePosition = ListViewUtils.getFirstFullyVisiblePosition(mListView); - final int selectedItem = mListView.getSelectedItemPosition(); - final int count = mListView.getCount(); - int resultPosition; - if (!mListView.isFocused() || selectedItem == ListView.INVALID_POSITION) { - resultPosition = firstVisiblePosition; - } else { - resultPosition = selectedItem + offset; - while (resultPosition >= 0 && resultPosition < count && !mAdapter.isEnabled(resultPosition)) { - resultPosition += offset; - } - } - final View focusedChild = mListView.getFocusedChild(); - if (focusedChild == null) { - mListView.requestChildFocus(mListView.getChildAt(0), null); - } - if (resultPosition >= 0 && resultPosition < count) { - mListView.setSelection(resultPosition); - } +// final int selectedItem = mNavigationView.getSelectedItemPosition(); +// final int count = mNavigationView.getCount(); +// int resultPosition; +// if (!mNavigationView.isFocused() || selectedItem == ListView.INVALID_POSITION) { +// resultPosition = firstVisiblePosition; +// } else { +// resultPosition = selectedItem + offset; +// while (resultPosition >= 0 && resultPosition < count && !mAdapter.isEnabled(resultPosition)) { +// resultPosition += offset; +// } +// } +// final View focusedChild = mNavigationView.getFocusedChild(); +// if (focusedChild == null) { +// mNavigationView.requestChildFocus(mNavigationView.getChildAt(0), null); +// } +// if (resultPosition >= 0 && resultPosition < count) { +// mNavigationView.setSelection(resultPosition); +// } return true; } @@ -225,8 +207,8 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo case REQUEST_SETTINGS: { if (data == null) return; final FragmentActivity activity = getActivity(); - if (data.getBooleanExtra(EXTRA_CHANGED, false) && activity instanceof IThemedActivity) { - ((IThemedActivity) activity).restart(); + if (data.getBooleanExtra(EXTRA_CHANGED, false)) { + activity.recreate(); } return; } @@ -298,8 +280,6 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo } mAccountsAdapter.setSelectedAccountKey(accountKey); - mAccountOptionsAdapter.setSelectedAccount(mAccountsAdapter.getSelectedAccount()); - if (mAccountActionProvider != null) { mAccountActionProvider.setExclusive(false); mAccountActionProvider.setAccounts(accounts); @@ -313,87 +293,6 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo public void onLoaderReset(final Loader loader) { } - @Override - public void onItemClick(final AdapterView parent, final View v, final int position, final long id) { - final ListAdapter adapter = mAdapter.getAdapter(position); - final Object item = mAdapter.getItem(position); - if (adapter instanceof AccountOptionsAdapter) { - final ParcelableAccount account = mAccountsAdapter.getSelectedAccount(); - if (account == null || !(item instanceof OptionItem)) return; - final OptionItem option = (OptionItem) item; - switch (option.id) { - case R.id.search: { - final Intent intent = new Intent(getActivity(), QuickSearchBarActivity.class); - intent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key); - startActivity(intent); - closeAccountsDrawer(); - break; - } - case R.id.compose: { - final Intent composeIntent = new Intent(INTENT_ACTION_COMPOSE); - composeIntent.setClass(getActivity(), ComposeActivity.class); - composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key); - startActivity(composeIntent); - break; - } - case R.id.favorites: { - IntentUtils.openUserFavorites(getActivity(), account.account_key, - account.account_key.getId(), account.screen_name); - break; - } - case R.id.lists: { - IntentUtils.openUserLists(getActivity(), account.account_key, - account.account_key.getId(), account.screen_name); - break; - } - case R.id.groups: { - IntentUtils.openUserGroups(getActivity(), account.account_key, - account.account_key.getId(), account.screen_name); - break; - } - case R.id.public_timeline: { - IntentUtils.openPublicTimeline(getActivity(), account.account_key); - break; - } - case R.id.messages: { - IntentUtils.openDirectMessages(getActivity(), account.account_key); - break; - } - case R.id.interactions: { - IntentUtils.openInteractions(getActivity(), account.account_key); - break; - } - case R.id.edit: { - IntentUtils.openProfileEditor(getActivity(), account.account_key); - break; - } - } - } else if (adapter instanceof AppMenuAdapter) { - if (!(item instanceof OptionItem)) return; - final OptionItem option = (OptionItem) item; - switch (option.id) { - case R.id.accounts: { - IntentUtils.openAccountsManager(getActivity()); - break; - } - case R.id.drafts: { - IntentUtils.openDrafts(getActivity()); - break; - } - case R.id.filters: { - IntentUtils.openFilters(getActivity()); - break; - } - case R.id.settings: { - final Intent intent = new Intent(getActivity(), SettingsActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - startActivityForResult(intent, REQUEST_SETTINGS); - break; - } - } - closeAccountsDrawer(); - } - } @Override public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { @@ -410,9 +309,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo private void updateSystemWindowsInsets() { if (mAccountProfileContainer == null) return; - final HomeActivity activity = (HomeActivity) getActivity(); final Rect insets = mSystemWindowsInsets; - if (!activity.getDefaultSystemWindowsInsets(insets)) return; final int top = Utils.getInsetsTopWithoutActionBarHeight(getActivity(), insets.top); mAccountProfileContainer.setPadding(0, top, 0, 0); } @@ -424,28 +321,14 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo final View view = getView(); assert view != null; final Context context = view.getContext(); - mListView.setItemsCanFocus(true); - mAdapter = new MergeAdapter(); final LayoutInflater inflater = getLayoutInflater(savedInstanceState); mAccountsAdapter = new AccountSelectorAdapter(inflater, this); - mAccountOptionsAdapter = new AccountOptionsAdapter(context); - mAppMenuAdapter = new AppMenuAdapter(context); - mAccountSelectorView = inflater.inflate(R.layout.header_drawer_account_selector, mListView, false); - mAccountsSelector = (RecyclerView) mAccountSelectorView.findViewById(R.id.other_accounts_list); final LinearLayoutManager layoutManager = new FixedLinearLayoutManager(context); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); layoutManager.setStackFromEnd(true); mAccountsSelector.setLayoutManager(layoutManager); mAccountsSelector.setAdapter(mAccountsAdapter); mAccountsSelector.setItemAnimator(null); - mAccountProfileContainer = mAccountSelectorView.findViewById(R.id.profile_container); - mNoAccountContainer = mAccountSelectorView.findViewById(R.id.no_account_container); - mAccountProfileImageView = (ShapedImageView) mAccountSelectorView.findViewById(R.id.profile_image); - mAccountProfileBannerView = (ImageView) mAccountSelectorView.findViewById(R.id.account_profile_banner); - mFloatingProfileImageSnapshotView = (ImageView) mAccountSelectorView.findViewById(R.id.floating_profile_image_snapshot); - mAccountProfileNameView = (TextView) mAccountSelectorView.findViewById(R.id.name); - mAccountProfileScreenNameView = (TextView) mAccountSelectorView.findViewById(R.id.screen_name); - mAccountsToggleMenu = (ActionMenuView) mAccountSelectorView.findViewById(R.id.account_dashboard_menu); final SupportMenuInflater menuInflater = new SupportMenuInflater(context); menuInflater.inflate(R.menu.action_dashboard_timeline_toggle, mAccountsToggleMenu.getMenu()); mAccountsToggleMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { @@ -479,13 +362,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo }); mAccountProfileContainer.setOnClickListener(this); - - mAdapter.addView(mAccountSelectorView, true); - mAdapter.addAdapter(mAccountOptionsAdapter); - mAdapter.addView(inflater.inflate(R.layout.layout_divider_drawer, mListView, false), false); - mAdapter.addAdapter(mAppMenuAdapter); - mListView.setAdapter(mAdapter); - mListView.setOnItemClickListener(this); + mNavigationView.setNavigationItemSelectedListener(this); mPreferences.registerOnSharedPreferenceChangeListener(this); loadAccounts(); @@ -510,7 +387,17 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo @Override public void onBaseViewCreated(View view, Bundle savedInstanceState) { super.onBaseViewCreated(view, savedInstanceState); - mListView = (ListView) view.findViewById(android.R.id.list); + mNavigationView = (NavigationView) view.findViewById(R.id.navigation_view); + mAccountSelectorView = mNavigationView.getHeaderView(0); + mAccountsSelector = (RecyclerView) mAccountSelectorView.findViewById(R.id.other_accounts_list); + mAccountProfileContainer = mAccountSelectorView.findViewById(R.id.profile_container); + mNoAccountContainer = mAccountSelectorView.findViewById(R.id.no_account_container); + mAccountProfileImageView = (ShapedImageView) mAccountSelectorView.findViewById(R.id.profile_image); + mAccountProfileBannerView = (ImageView) mAccountSelectorView.findViewById(R.id.account_profile_banner); + mFloatingProfileImageSnapshotView = (ImageView) mAccountSelectorView.findViewById(R.id.floating_profile_image_snapshot); + mAccountProfileNameView = (TextView) mAccountSelectorView.findViewById(R.id.name); + mAccountProfileScreenNameView = (TextView) mAccountSelectorView.findViewById(R.id.screen_name); + mAccountsToggleMenu = (ActionMenuView) mAccountSelectorView.findViewById(R.id.account_dashboard_menu); } @Override @@ -552,40 +439,35 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo } } } - mAccountOptionsAdapter.clear(); - mAccountOptionsAdapter.add(new OptionItem(R.string.search, - R.drawable.ic_action_search, R.id.search)); - if (!hasInteractionsTab) { - mAccountOptionsAdapter.add(new OptionItem(R.string.interactions, - R.drawable.ic_action_notification, R.id.interactions)); - } - if (!hasDmTab) { - mAccountOptionsAdapter.add(new OptionItem(R.string.direct_messages, - R.drawable.ic_action_message, R.id.messages)); - } + final Menu menu = mNavigationView.getMenu(); + MenuUtils.setMenuItemAvailability(menu, R.id.interactions, !hasInteractionsTab); + MenuUtils.setMenuItemAvailability(menu, R.id.messages, !hasDmTab); + if (mUseStarsForLikes) { - mAccountOptionsAdapter.add(new OptionItem(R.string.favorites, R.drawable.ic_action_star, - R.id.favorites)); + MenuUtils.setMenuItemTitle(menu, R.id.favorites, R.string.favorites); + MenuUtils.setMenuItemIcon(menu, R.id.favorites, R.drawable.ic_action_star); } else { - mAccountOptionsAdapter.add(new OptionItem(R.string.likes, R.drawable.ic_action_heart, - R.id.favorites)); + MenuUtils.setMenuItemTitle(menu, R.id.favorites, R.string.likes); + MenuUtils.setMenuItemIcon(menu, R.id.favorites, R.drawable.ic_action_heart); } + boolean hasLists = false, hasGroups = false, hasPublicTimeline = false; switch (ParcelableAccountUtils.getAccountType(account)) { case ParcelableAccount.Type.TWITTER: { - mAccountOptionsAdapter.add(new OptionItem(R.string.lists, R.drawable.ic_action_list, - R.id.lists)); + hasLists = true; break; } case ParcelableAccount.Type.STATUSNET: { - mAccountOptionsAdapter.add(new OptionItem(R.string.groups, R.drawable.ic_action_list, - R.id.groups)); + hasGroups = true; break; } case ParcelableAccount.Type.FANFOU: { - mAccountOptionsAdapter.add(new OptionItem(R.string.public_timeline, R.drawable.ic_action_quote, - R.id.public_timeline)); + hasPublicTimeline = true; + break; } } + MenuUtils.setMenuItemAvailability(menu, R.id.groups, hasGroups); + MenuUtils.setMenuItemAvailability(menu, R.id.lists, hasLists); + MenuUtils.setMenuItemAvailability(menu, R.id.public_timeline, hasPublicTimeline); } private boolean hasAccountInTab(SupportTabSpec tab, UserKey accountId, boolean isActivated) { @@ -693,7 +575,6 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo editor.putString(KEY_DEFAULT_ACCOUNT_KEY, account.account_key.toString()); editor.apply(); mAccountsAdapter.setSelectedAccountKey(account.account_key); - mAccountOptionsAdapter.setSelectedAccount(account); updateAccountActions(); updateAccountOptionsSeparatorLabel(clickedDrawable); snapshotView.setVisibility(View.INVISIBLE); @@ -743,37 +624,80 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo private void updateDefaultAccountState() { } - public static final class AccountOptionsAdapter extends OptionItemsAdapter { - - private final boolean mNameFirst; - private ParcelableAccount mSelectedAccount; - - AccountOptionsAdapter(final Context context) { - super(context); - mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST); - } - - public void setSelectedAccount(ParcelableAccount account) { - mSelectedAccount = account; - notifyDataSetChanged(); - } - - @Override - public boolean isEnabled(final int position) { - return mSelectedAccount != null; - } - - @Override - protected String getTitle(int position, OptionItem option) { - final ParcelableAccount account = mSelectedAccount; - if (account != null && option.id == R.id.compose) { - final Context context = getContext(); - final String displayName = UserColorNameManager.getDisplayName(account.name, - account.screen_name, mNameFirst); - return context.getString(R.string.tweet_from_name, displayName); + @Override + public boolean onNavigationItemSelected(MenuItem item) { + final ParcelableAccount account = mAccountsAdapter.getSelectedAccount(); + if (account == null) return false; + switch (item.getItemId()) { + case R.id.search: { + final Intent intent = new Intent(getActivity(), QuickSearchBarActivity.class); + intent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key); + startActivity(intent); + closeAccountsDrawer(); + break; + } + case R.id.compose: { + final Intent composeIntent = new Intent(INTENT_ACTION_COMPOSE); + composeIntent.setClass(getActivity(), ComposeActivity.class); + composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key); + startActivity(composeIntent); + break; + } + case R.id.favorites: { + IntentUtils.openUserFavorites(getActivity(), account.account_key, + account.account_key.getId(), account.screen_name); + break; + } + case R.id.lists: { + IntentUtils.openUserLists(getActivity(), account.account_key, + account.account_key.getId(), account.screen_name); + break; + } + case R.id.groups: { + IntentUtils.openUserGroups(getActivity(), account.account_key, + account.account_key.getId(), account.screen_name); + break; + } + case R.id.public_timeline: { + IntentUtils.openPublicTimeline(getActivity(), account.account_key); + break; + } + case R.id.messages: { + IntentUtils.openDirectMessages(getActivity(), account.account_key); + break; + } + case R.id.interactions: { + IntentUtils.openInteractions(getActivity(), account.account_key); + break; + } + case R.id.edit: { + IntentUtils.openProfileEditor(getActivity(), account.account_key); + break; + } + case R.id.accounts: { + IntentUtils.openAccountsManager(getActivity()); + closeAccountsDrawer(); + break; + } + case R.id.drafts: { + IntentUtils.openDrafts(getActivity()); + closeAccountsDrawer(); + break; + } + case R.id.filters: { + IntentUtils.openFilters(getActivity()); + closeAccountsDrawer(); + break; + } + case R.id.settings: { + final Intent intent = new Intent(getActivity(), SettingsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + startActivityForResult(intent, REQUEST_SETTINGS); + closeAccountsDrawer(); + break; } - return super.getTitle(position, option); } + return false; } static class AccountProfileImageViewHolder extends ViewHolder implements OnClickListener { @@ -922,17 +846,6 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo } } - private static final class AppMenuAdapter extends OptionItemsAdapter { - - public AppMenuAdapter(final Context context) { - super(context); - add(new OptionItem(R.string.accounts, R.drawable.ic_action_accounts, R.id.accounts)); - add(new OptionItem(R.string.drafts, R.drawable.ic_action_draft, R.id.drafts)); - add(new OptionItem(R.string.filters, R.drawable.ic_action_speaker_muted, R.id.filters)); - add(new OptionItem(R.string.settings, R.drawable.ic_action_settings, R.id.settings)); - } - - } public static class OptionItem { @@ -972,35 +885,4 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo } - public static abstract class OptionItemsAdapter extends ArrayAdapter { - - @Inject - UserColorNameManager mUserColorNameManager; - @Inject - SharedPreferencesWrapper mPreferences; - private final int mActionIconColor; - - OptionItemsAdapter(final Context context) { - super(context, R.layout.list_item_dashboard_menu); - GeneralComponentHelper.build(context).inject(this); - mActionIconColor = ThemeUtils.getThemeForegroundColor(context); - } - - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view = super.getView(position, convertView, parent); - final OptionItem option = getItem(position); - final TextView text1 = (TextView) view.findViewById(android.R.id.text1); - final ImageView icon = (ImageView) view.findViewById(android.R.id.icon); - text1.setText(getTitle(position, option)); - icon.setImageDrawable(ResourcesCompat.getDrawable(icon.getResources(), option.icon, null)); - icon.setColorFilter(mActionIconColor, Mode.SRC_ATOP); - return view; - } - - protected String getTitle(int position, OptionItem option) { - return getContext().getString(option.name); - } - - } } \ No newline at end of file diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java index d47633a2e..88d670e6b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java @@ -41,8 +41,8 @@ import org.mariotaku.sqliteqb.library.ArgsArray; import org.mariotaku.sqliteqb.library.Columns; import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity; -import org.mariotaku.twidere.activity.support.SignInActivity; +import org.mariotaku.twidere.activity.ColorPickerDialogActivity; +import org.mariotaku.twidere.activity.SignInActivity; import org.mariotaku.twidere.adapter.AccountsAdapter; import org.mariotaku.twidere.model.ParcelableAccount; import org.mariotaku.twidere.model.UserKey; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseFiltersFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseFiltersFragment.java index 8447c2c4b..ca6c25271 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseFiltersFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseFiltersFragment.java @@ -56,8 +56,7 @@ import org.mariotaku.sqliteqb.library.Columns.Column; import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.sqliteqb.library.RawItemArray; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.activity.support.UserListSelectorActivity; +import org.mariotaku.twidere.activity.UserListSelectorActivity; import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter; import org.mariotaku.twidere.adapter.SourceAutoCompleteAdapter; import org.mariotaku.twidere.model.ParcelableUser; @@ -131,12 +130,6 @@ public abstract class BaseFiltersFragment extends AbsContentListViewFragment - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.preference; - -import android.content.Context; -import android.util.AttributeSet; - -import org.jraf.android.backport.switchwidget.SwitchPreference; -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.util.ThemeUtils; - -public class DarkLightThemeTogglePreference extends SwitchPreference implements Constants { - - public DarkLightThemeTogglePreference(final Context context) { - this(context, null); - } - - public DarkLightThemeTogglePreference(final Context context, final AttributeSet attrs) { - this(context, attrs, R.attr.asb_switchPreferenceStyle); - } - - public DarkLightThemeTogglePreference(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected boolean getPersistedBoolean(final boolean defaultReturnValue) { - return ThemeUtils.isDarkTheme(getPersistedString(VALUE_THEME_NAME_LIGHT)); - } - - @Override - protected boolean persistBoolean(final boolean value) { - return persistString(value ? VALUE_THEME_NAME_DARK : VALUE_THEME_NAME_LIGHT); - } -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java b/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java index 54b81fcea..bde2100db 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java +++ b/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java @@ -43,7 +43,7 @@ import android.widget.Toast; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.APIEditorActivity; +import org.mariotaku.twidere.activity.APIEditorActivity; import org.mariotaku.twidere.model.ParcelableCredentials; import org.mariotaku.twidere.preference.iface.IDialogPreference; import org.mariotaku.twidere.provider.TwidereDataStore.Accounts; diff --git a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java index 34743b76c..cd9567023 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java +++ b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java @@ -77,7 +77,7 @@ import org.mariotaku.sqliteqb.library.query.SQLSelectQuery; import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.HomeActivity; +import org.mariotaku.twidere.activity.HomeActivity; import org.mariotaku.twidere.annotation.CustomTabType; import org.mariotaku.twidere.annotation.NotificationType; import org.mariotaku.twidere.annotation.ReadPositionTag; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ActivityTracker.java b/twidere/src/main/java/org/mariotaku/twidere/util/ActivityTracker.java index 1ec35c7b9..e002c06b7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ActivityTracker.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ActivityTracker.java @@ -27,7 +27,7 @@ import android.os.Bundle; import org.apache.commons.collections.primitives.ArrayIntList; import org.apache.commons.collections.primitives.IntList; -import org.mariotaku.twidere.activity.support.HomeActivity; +import org.mariotaku.twidere.activity.HomeActivity; import edu.tsinghua.hotmobi.HotMobiLogger; import edu.tsinghua.hotmobi.PreProcessing; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/IntentUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/IntentUtils.java index 68e2d8a94..10cea42f2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/IntentUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/IntentUtils.java @@ -20,7 +20,7 @@ import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; import org.mariotaku.twidere.TwidereConstants; -import org.mariotaku.twidere.activity.support.MediaViewerActivity; +import org.mariotaku.twidere.activity.MediaViewerActivity; import org.mariotaku.twidere.constant.SharedPreferenceConstants; import org.mariotaku.twidere.fragment.support.SensitiveContentWarningDialogFragment; import org.mariotaku.twidere.fragment.support.UserFragment; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/KeyboardShortcutsHandler.java b/twidere/src/main/java/org/mariotaku/twidere/util/KeyboardShortcutsHandler.java index 53afec137..802063ac7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/KeyboardShortcutsHandler.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/KeyboardShortcutsHandler.java @@ -12,8 +12,8 @@ import android.view.KeyEvent; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.ComposeActivity; -import org.mariotaku.twidere.activity.support.QuickSearchBarActivity; +import org.mariotaku.twidere.activity.ComposeActivity; +import org.mariotaku.twidere.activity.QuickSearchBarActivity; import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.constant.KeyboardShortcutConstants; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/MenuUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/MenuUtils.java index 0585681e5..098109711 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/MenuUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/MenuUtils.java @@ -27,8 +27,10 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; @@ -43,8 +45,8 @@ import android.view.MenuItem; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; import org.mariotaku.twidere.TwidereConstants; -import org.mariotaku.twidere.activity.support.AccountSelectorActivity; -import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity; +import org.mariotaku.twidere.activity.AccountSelectorActivity; +import org.mariotaku.twidere.activity.ColorPickerDialogActivity; import org.mariotaku.twidere.constant.IntentConstants; import org.mariotaku.twidere.constant.SharedPreferenceConstants; import org.mariotaku.twidere.fragment.support.AbsStatusesFragment; @@ -81,7 +83,7 @@ public class MenuUtils implements Constants { item.setChecked(checked); } - public static void setMenuItemIcon(final Menu menu, final int id, final int icon) { + public static void setMenuItemIcon(final Menu menu, final int id, @DrawableRes final int icon) { if (menu == null) return; final MenuItem item = menu.findItem(id); if (item == null) return; @@ -96,7 +98,7 @@ public class MenuUtils implements Constants { MenuItemCompat.setShowAsAction(item, flags); } - public static void setMenuItemTitle(final Menu menu, final int id, final int icon) { + public static void setMenuItemTitle(final Menu menu, final int id, @StringRes final int icon) { if (menu == null) return; final MenuItem item = menu.findItem(id); if (item == null) return; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java index d1378b971..f38137d9f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java @@ -33,7 +33,7 @@ import com.twitter.Extractor; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; +import org.mariotaku.twidere.activity.BaseAppCompatActivity; import org.mariotaku.twidere.menu.AccountActionProvider; import org.mariotaku.twidere.model.ParcelableAccount; import org.mariotaku.twidere.model.ParcelableStatus; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/RestFuNetworkStreamDownloader.java b/twidere/src/main/java/org/mariotaku/twidere/util/RestFuNetworkStreamDownloader.java index 3772a96c1..404b3c84c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/RestFuNetworkStreamDownloader.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/RestFuNetworkStreamDownloader.java @@ -28,7 +28,7 @@ import org.mariotaku.restfu.http.HttpRequest; import org.mariotaku.restfu.http.HttpResponse; import org.mariotaku.restfu.http.RestHttpClient; import org.mariotaku.restfu.http.mime.Body; -import org.mariotaku.twidere.activity.support.ThemedImagePickerActivity; +import org.mariotaku.twidere.activity.ThemedImagePickerActivity; import org.mariotaku.twidere.util.dagger.DependencyHolder; import java.io.IOException; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java index 0b73e579d..5a98831ce 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java @@ -36,12 +36,7 @@ import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewCompat; -import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatDelegate; -import android.support.v7.app.WindowDecorActionBar; -import android.support.v7.app.WindowDecorActionBar.ActionModeImpl; -import android.support.v7.view.StandaloneActionMode; -import android.support.v7.view.SupportActionModeWrapperAccessor; import android.support.v7.view.menu.ActionMenuItemView; import android.support.v7.widget.ActionBarContainer; import android.support.v7.widget.ActionBarContextView; @@ -52,7 +47,6 @@ import android.support.v7.widget.Toolbar; import android.support.v7.widget.TwidereToolbar; import android.text.TextUtils; import android.util.TypedValue; -import android.view.ActionMode; import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextThemeWrapper; import android.view.Menu; @@ -63,13 +57,12 @@ import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.TextView; import org.apache.commons.lang3.ArrayUtils; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.activity.LinkHandlerActivity; import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.activity.support.LinkHandlerActivity; import org.mariotaku.twidere.graphic.ActionBarColorDrawable; import org.mariotaku.twidere.graphic.ActionIconDrawable; import org.mariotaku.twidere.graphic.iface.DoNotWrapDrawable; @@ -96,15 +89,6 @@ public class ThemeUtils implements Constants { } - public static void applyActionBarBackground(final ActionBar actionBar, final Context context, - final int accentColor, String backgroundOption, boolean outlineEnabled) { - if (actionBar == null || context == null) return; - actionBar.setBackgroundDrawable(getActionBarBackground(context, accentColor, backgroundOption, outlineEnabled)); - actionBar.setSplitBackgroundDrawable(getActionBarSplitBackground(context)); - actionBar.setStackedBackgroundDrawable(getActionBarStackedBackground(context, accentColor, backgroundOption, outlineEnabled)); - } - - public static void applyActionBarBackground(final ActionBarContainer actionBar, final Context context, final int accentColor, String backgroundOption, boolean outlineEnabled) { if (actionBar == null || context == null) return; @@ -139,77 +123,6 @@ public class ThemeUtils implements Constants { } } - public static void applySupportActionModeColor(final ActionMode mode, - int accentColor, String backgroundOption, - boolean outlineEnabled) { - android.support.v7.view.ActionMode modeCompat = SupportActionModeWrapperAccessor.getWrappedObject(mode); - if (modeCompat == null) return; - applySupportActionModeColor(modeCompat, accentColor, backgroundOption, - outlineEnabled); - } - - public static void applySupportActionModeColor(final android.support.v7.view.ActionMode modeCompat, - int accentColor, String backgroundOption, - boolean outlineEnabled) { - // Very dirty implementation - // This call ensures TitleView created - modeCompat.setTitle(modeCompat.getTitle()); - final View contextView = findActionBarContextView(modeCompat); - if (!(contextView instanceof ActionBarContextView)) return; - setActionBarContextViewBackground((ActionBarContextView) contextView, accentColor, - backgroundOption, outlineEnabled); - } - - public static void applySupportActionModeItemColor(final ActionMode mode, int accentColor) { - android.support.v7.view.ActionMode modeCompat = SupportActionModeWrapperAccessor.getWrappedObject(mode); - if (modeCompat == null) return; - applySupportActionModeItemColor(modeCompat, accentColor); - } - - public static void applySupportActionModeItemColor(final android.support.v7.view.ActionMode modeCompat, - int accentColor) { - // Very dirty implementation - // This call ensures TitleView created - modeCompat.setTitle(modeCompat.getTitle()); - final View contextView = findActionBarContextView(modeCompat); - if (!(contextView instanceof ActionBarContextView)) return; - setActionBarContextViewItemColor((ActionBarContextView) contextView, accentColor); - } - - private static void setActionBarContextViewItemColor(ActionBarContextView contextView, int toolbarColor) { - final Context context = contextView.getContext(); - final int contrastForegroundColor = getContrastForegroundColor(context, toolbarColor); - if (isDarkTheme(context)) { - return; - } - final View titleView = contextView.findViewById(R.id.action_bar_title); - final View subtitleView = contextView.findViewById(R.id.action_bar_subtitle); - final View closeButton = contextView.findViewById(R.id.action_mode_close_button); - if (titleView instanceof TextView) { - ((TextView) titleView).setTextColor(contrastForegroundColor); - } - if (subtitleView instanceof TextView) { - ((TextView) subtitleView).setTextColor(contrastForegroundColor); - } - if (closeButton instanceof ImageView) { - ((ImageView) closeButton).setColorFilter(contrastForegroundColor, Mode.SRC_ATOP); - } - } - - private static View findActionBarContextView(final android.support.v7.view.ActionMode modeCompat) { - if (modeCompat instanceof ActionModeImpl) { - WindowDecorActionBar actionBar = (WindowDecorActionBar) Utils.findFieldOfTypes(modeCompat, - ActionModeImpl.class, WindowDecorActionBar.class); - if (actionBar == null) return null; - return (View) Utils.findFieldOfTypes(actionBar, WindowDecorActionBar.class, - ActionBarContextView.class); - } else if (modeCompat instanceof StandaloneActionMode) { - return (View) Utils.findFieldOfTypes(modeCompat, StandaloneActionMode.class, - ActionBarContextView.class); - } - return null; - } - public static void setActionBarContextViewBackground(@NonNull ActionBarContextView contextView, int accentColor, String backgroundOption, boolean outlineEnabled) { @@ -1019,6 +932,15 @@ public class ThemeUtils implements Constants { | Configuration.UI_MODE_NIGHT_YES; } + public static String getATEKey(Context context) { + TypedValue value = new TypedValue(); + if (!context.getTheme().resolveAttribute(R.attr.ateThemeKey, value, true)) { + return "dark"; + } + if (TextUtils.isEmpty(value.string)) return "dark"; + return String.valueOf(value.string); + } + public static final class ActionBarContextThemeWrapper extends android.support.v7.view.ContextThemeWrapper { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ThemedLayoutInflaterFactory.java b/twidere/src/main/java/org/mariotaku/twidere/util/ThemedLayoutInflaterFactory.java deleted file mode 100644 index 829c20f01..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ThemedLayoutInflaterFactory.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2015 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.util; - -import android.app.Activity; -import android.content.Context; -import android.content.ContextWrapper; -import android.content.res.ColorStateList; -import android.graphics.Color; -import android.graphics.Typeface; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v4.view.LayoutInflaterFactory; -import android.support.v4.view.TintableBackgroundView; -import android.support.v4.view.ViewCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.app.AppCompatDelegate; -import android.support.v7.app.AppCompatDelegateAccessor; -import android.support.v7.view.ContextThemeWrapper; -import android.support.v7.widget.TwidereToolbar; -import android.util.AttributeSet; -import android.view.InflateException; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.rengwuxian.materialedittext.MaterialEditText; - -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.support.ViewSupport; -import org.mariotaku.twidere.view.ProfileImageView; -import org.mariotaku.twidere.view.ShapedImageView; -import org.mariotaku.twidere.view.WizardHighlightTextView; -import org.mariotaku.twidere.view.iface.IThemeAccentView; -import org.mariotaku.twidere.view.iface.IThemeBackgroundTintView; -import org.mariotaku.twidere.view.themed.ThemedTextView; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Map; - -/** - * Created by mariotaku on 15/4/22. - */ -public class ThemedLayoutInflaterFactory implements LayoutInflaterFactory { - - private static final String[] sCustomViewPrefixWhiteList = {"org.mariotaku.twidere.view"}; - private static final Map sConstructorCache = new HashMap<>(); - - private final IThemedActivity activity; - private final LayoutInflaterFactory delegate; - - public ThemedLayoutInflaterFactory(IThemedActivity activity, LayoutInflaterFactory delegate) { - this.activity = activity; - this.delegate = delegate; - } - - @Override - public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { - View view = delegate.onCreateView(parent, name, context, attrs); - if (view == null) { - view = createCustomView(name, context, attrs); - } - initView(view, activity); - return view; - } - - public static View createCustomView(String name, Context context, AttributeSet attrs) { - if (!name.contains(".")) return null; - boolean whiteListed = false; - for (String prefix : sCustomViewPrefixWhiteList) { - if (name.startsWith(prefix)) { - whiteListed = true; - break; - } - } - if (!whiteListed) return null; - //noinspection TryWithIdenticalCatches - try { - Constructor constructor = sConstructorCache.get(name); - if (constructor == null) { - final Class viewCls = Class.forName(name); - if (!View.class.isAssignableFrom(viewCls)) return null; - constructor = viewCls.getConstructor(Context.class, AttributeSet.class); - sConstructorCache.put(name, constructor); - } - return (View) constructor.newInstance(context, attrs); - } catch (ClassNotFoundException ignore) { - } catch (NoSuchMethodException e) { - throw new InflateException(e); - } catch (InvocationTargetException e) { - throw new InflateException(e); - } catch (InstantiationException e) { - throw new InflateException(e); - } catch (IllegalAccessException e) { - throw new InflateException(e); - } - return null; - } - - public static void initView(View view, IThemedActivity activity) { - if (view == null) return; - if (view instanceof ShapedImageView) { - final ShapedImageView shapedImageView = (ShapedImageView) view; - shapedImageView.setStyle(activity.getCurrentProfileImageStyle()); - } - if (view instanceof ProfileImageView) { - final ProfileImageView profileImageView = (ProfileImageView) view; - profileImageView.setOval(activity.getCurrentProfileImageStyle() == ShapedImageView.SHAPE_CIRCLE); - } - if (view instanceof ThemedTextView) { - final String fontFamily = activity.getCurrentThemeFontFamily(); - final TextView textView = (TextView) view; - final Typeface defTypeface = textView.getTypeface(); - textView.setTypeface(ThemeUtils.getUserTypeface((Context) activity, fontFamily, defTypeface)); - } - initViewTint(view, activity); - } - - private static void initViewTint(View view, IThemedActivity activity) { - final int noTintColor, accentColor, backgroundTintColor; - final boolean isColorTint; - // View context is not derived from ActionBar, apply color tint directly - final Context viewContext = view.getContext(); - final boolean isActionBarContext = isActionBarContext(viewContext, getActionBarContext((Activity) activity)); - final boolean isDarkTheme = ThemeUtils.isDarkTheme(viewContext); - final int backgroundColorApprox; - final int currentThemeColor = activity.getCurrentThemeColor(); - if (!isActionBarContext) { - accentColor = currentThemeColor; - final int[] darkLightColors = new int[2]; - ThemeUtils.getDarkLightForegroundColors((Context) activity, - darkLightColors); - noTintColor = TwidereColorUtils.getContrastYIQ(accentColor, ThemeUtils.ACCENT_COLOR_THRESHOLD, - darkLightColors[0], darkLightColors[1]); - backgroundTintColor = accentColor; - backgroundColorApprox = isDarkTheme ? Color.BLACK : Color.WHITE; - isColorTint = true; - } else if (isDarkTheme) { - // View context is derived from ActionBar but is currently dark theme, so we should show - // light - noTintColor = Color.WHITE; - accentColor = currentThemeColor; - backgroundTintColor = noTintColor; - backgroundColorApprox = Color.BLACK; - isColorTint = true; - } else { - // View context is derived from ActionBar and it's light theme, so we use contrast color - accentColor = ThemeUtils.getColorFromAttribute(viewContext, android.R.attr.colorForeground, 0); - noTintColor = ThemeUtils.getColorFromAttribute(viewContext, android.R.attr.colorBackground, 0); - backgroundTintColor = accentColor; - backgroundColorApprox = Color.WHITE; - isColorTint = false; - } - final boolean isAccentOptimal = Math.abs(TwidereColorUtils.getYIQContrast(backgroundColorApprox, accentColor)) > 64; - if (view instanceof TextView) { - final TextView textView = (TextView) view; - if (isAccentOptimal) { - textView.setLinkTextColor(accentColor); - } - } - if (view instanceof WizardHighlightTextView) { - ((WizardHighlightTextView) view).setTextColor(ThemeUtils.getOptimalAccentColor((Context) activity, - currentThemeColor, isActionBarContext)); - } - if (view instanceof IThemeAccentView) { - if (isAccentOptimal || !isColorTint) { - ((IThemeAccentView) view).setAccentTintColor(ColorStateList.valueOf(accentColor)); - } else { - final int defaultAccentColor = ThemeUtils.getColorFromAttribute(viewContext, - R.attr.colorAccent, ContextCompat.getColor(viewContext, R.color.branding_color)); - ((IThemeAccentView) view).setAccentTintColor(ColorStateList.valueOf(defaultAccentColor)); - } - } else if (view instanceof IThemeBackgroundTintView) { - if (isAccentOptimal || !isColorTint) { - ((IThemeBackgroundTintView) view).setBackgroundTintColor(ColorStateList.valueOf(backgroundTintColor)); - } - } else if (view instanceof TwidereToolbar) { - if (viewContext instanceof ContextThemeWrapper) { - ((TwidereToolbar) view).setItemColor(ThemeUtils.getThemeForegroundColor(viewContext, - ((ContextThemeWrapper) viewContext).getThemeResId())); - } else { - ((TwidereToolbar) view).setItemColor(ThemeUtils.getThemeForegroundColor(viewContext)); - } - } else if (view instanceof EditText) { - if (isAccentOptimal || !isColorTint) { - ViewCompat.setBackgroundTintList(view, ColorStateList.valueOf(backgroundTintColor)); - } - if (view instanceof MaterialEditText) { - if (isAccentOptimal || !isColorTint) { - ((MaterialEditText) view).setPrimaryColor(backgroundTintColor); - } - } - } else if (view instanceof ProgressBar) { - if (isAccentOptimal || !isColorTint) { - ViewSupport.setIndeterminateTintList((ProgressBar) view, ColorStateList.valueOf(accentColor)); - ViewSupport.setProgressTintList((ProgressBar) view, ColorStateList.valueOf(accentColor)); - ViewSupport.setProgressBackgroundTintList((ProgressBar) view, ColorStateList.valueOf(accentColor)); - } - } else if (view instanceof TintableBackgroundView) { - final TintableBackgroundView tintable = (TintableBackgroundView) view; - if (isAccentOptimal || !isColorTint) { - applyTintableBackgroundViewTint(tintable, accentColor, noTintColor, backgroundTintColor, isColorTint); - } - } - } - - private static void applyTintableBackgroundViewTint(TintableBackgroundView tintable, int accentColor, int noTintColor, int backgroundTintColor, boolean isColorTint) { - if (tintable instanceof Button) { - } else if (tintable instanceof EditText) { - tintable.setSupportBackgroundTintList(ColorStateList.valueOf(backgroundTintColor)); - } else if (isColorTint) { -// final int[][] states = {{android.R.attr.state_selected}, {android.R.attr.state_focused}, -// {android.R.attr.state_pressed}, {0}}; -// final int[] colors = {accentColor, accentColor, accentColor, noTintColor}; -// tintable.setSupportBackgroundTintList(new ColorStateList(states, colors)); - } else { -// tintable.setSupportBackgroundTintList(ColorStateList.valueOf(accentColor)); - } - } - - private static boolean isActionBarContext(@NonNull Context context, @Nullable Context actionBarContext) { - if (context instanceof ThemeUtils.ActionBarContextThemeWrapper) return true; - if (actionBarContext == null) return false; - if (context == actionBarContext) return true; - Context base = context; - while (base instanceof ContextWrapper && (base = ((ContextWrapper) base).getBaseContext()) != null) { - if (base == actionBarContext) return true; - } - return false; - } - - @Nullable - private static Context getActionBarContext(@NonNull Activity activity) { - Context actionBarContext = null; - if (activity instanceof AppCompatActivity) { - final AppCompatDelegate delegate = ((AppCompatActivity) activity).getDelegate(); - final ActionBar actionBar = AppCompatDelegateAccessor.peekActionBar(delegate); - if (actionBar != null) { - actionBarContext = actionBar.getThemedContext(); - } - } - if (activity != actionBarContext) return actionBarContext; - return null; - } -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/GeneralComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/GeneralComponent.java index cc66c1849..1c0a1da0c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/GeneralComponent.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/GeneralComponent.java @@ -21,12 +21,10 @@ package org.mariotaku.twidere.util.dagger; import android.support.v7.widget.RecyclerView; -import org.mariotaku.twidere.activity.BasePreferenceActivity; -import org.mariotaku.twidere.activity.BaseThemedActivity; -import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; -import org.mariotaku.twidere.activity.support.ComposeActivity; -import org.mariotaku.twidere.activity.support.MediaViewerActivity; -import org.mariotaku.twidere.activity.support.ThemedFragmentActivity; +import org.mariotaku.twidere.activity.BaseAppCompatActivity; +import org.mariotaku.twidere.activity.ComposeActivity; +import org.mariotaku.twidere.activity.ThemedFragmentActivity; +import org.mariotaku.twidere.activity.MediaViewerActivity; import org.mariotaku.twidere.adapter.AccountsAdapter; import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter; import org.mariotaku.twidere.adapter.BaseArrayAdapter; @@ -74,10 +72,6 @@ public interface GeneralComponent { void inject(MultiSelectEventHandler object); - void inject(BasePreferenceActivity object); - - void inject(BaseThemedActivity object); - void inject(BaseSupportDialogFragment object); void inject(RefreshService object); @@ -114,8 +108,6 @@ public interface GeneralComponent { void inject(BaseFiltersFragment.FilteredUsersFragment.FilterUsersListAdapter object); - void inject(AccountsDashboardFragment.OptionItemsAdapter object); - void inject(EmojiSpannableFactory object); void inject(EmojiEditableFactory object); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/DrawerContentFrameLayout.java b/twidere/src/main/java/org/mariotaku/twidere/view/DrawerContentFrameLayout.java index 3634b3e7b..74f2674ff 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/DrawerContentFrameLayout.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/DrawerContentFrameLayout.java @@ -39,4 +39,5 @@ public class DrawerContentFrameLayout extends FrameLayout { super(context, attrs, defStyle); ThemeUtils.setupDrawerBackground(context, this); } + } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java b/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java index e9d7d417a..811ed7a22 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java @@ -22,6 +22,7 @@ package org.mariotaku.twidere.view; import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.NonNull; diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/HomeActionButton.java b/twidere/src/main/java/org/mariotaku/twidere/view/HomeActionButton.java deleted file mode 100644 index d30754964..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/view/HomeActionButton.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.view; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.PorterDuff.Mode; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.ShapeDrawable; -import android.graphics.drawable.shapes.OvalShape; -import android.os.Build; -import android.support.v4.view.ViewCompat; -import android.util.AttributeSet; -import android.util.Property; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; - -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.support.ViewSupport; -import org.mariotaku.twidere.util.support.graphics.OutlineCompat; -import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat; -import org.mariotaku.twidere.view.iface.IHomeActionButton; - -import me.uucky.colorpicker.internal.EffectViewHelper; - -@TargetApi(Build.VERSION_CODES.LOLLIPOP) -public class HomeActionButton extends FrameLayout implements IHomeActionButton { - - private static class PressElevationProperty extends Property { - private final float mElevation; - - public PressElevationProperty(float elevation) { - super(Float.TYPE, null); - mElevation = elevation; - } - - @Override - public void set(View object, Float value) { - ViewCompat.setTranslationZ(object, mElevation * value); - } - - @Override - public Float get(View object) { - return ViewCompat.getTranslationZ(object) / mElevation; - } - } - - private final EffectViewHelper mHelper; - private final ImageView mIconView; - - public HomeActionButton(final Context context) { - this(context, null); - } - - public HomeActionButton(final Context context, final AttributeSet attrs) { - this(context, attrs, 0); - } - - public HomeActionButton(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); - final Resources resources = context.getResources(); - final float elevation = resources.getDisplayMetrics().density * 4; - mHelper = new EffectViewHelper(this, new PressElevationProperty(elevation), 200); - if (isInEditMode()) { - inflate(context, R.layout.action_item_home_actions, this); - } else if (context instanceof IThemedActivity) { - int themeColor = ((IThemedActivity) context).getCurrentThemeColor(); - inflate(ThemeUtils.getActionBarThemedContext(context, themeColor), - R.layout.action_item_home_actions, this); - } else { - inflate(ThemeUtils.getActionBarThemedContext(context), R.layout.action_item_home_actions, - this); - } - mIconView = (ImageView) findViewById(android.R.id.icon); - ViewSupport.setOutlineProvider(this, new HomeActionButtonOutlineProvider()); - setClipToOutline(true); - setButtonColor(Color.WHITE); - } - - @Override - public void setButtonColor(int color) { - if (isInEditMode()) { - final ShapeDrawable sd = new ShapeDrawable(new OvalShape()); - sd.getPaint().setColor(color); - ViewSupport.setBackground(this, sd); - } else { - ViewSupport.setBackground(this, new ColorDrawable(color)); - } - } - - @Override - public void setIcon(final Bitmap bm) { - mIconView.setImageBitmap(bm); - } - - @Override - public void setIcon(final Drawable drawable) { - mIconView.setImageDrawable(drawable); - } - - @Override - public void setIcon(final int resId) { - mIconView.setImageResource(resId); - } - - @Override - public void setIconColor(int color, Mode mode) { - mIconView.setColorFilter(color, mode); - } - - @Override - public void setTitle(final CharSequence title) { - setContentDescription(title); - } - - @Override - public void setTitle(final int title) { - setTitle(getResources().getText(title)); - } - - @Override - public void setPressed(boolean pressed) { - super.setPressed(pressed); - mHelper.setState(pressed); - } - - private static class HomeActionButtonOutlineProvider extends ViewOutlineProviderCompat { - - @Override - public void getOutline(View view, OutlineCompat outline) { - final int width = view.getWidth(), height = view.getHeight(); - final int size = Math.min(width, height); - final int left = (width - size) / 2, top = (height - size) / 2; - outline.setOval(left, top, left + size, top + size); - } - } - - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/HomeActionButtonCompat.java b/twidere/src/main/java/org/mariotaku/twidere/view/HomeActionButtonCompat.java deleted file mode 100644 index 2e5bd1ee4..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/view/HomeActionButtonCompat.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.view; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import android.graphics.Canvas; -import android.graphics.ColorFilter; -import android.graphics.Paint; -import android.graphics.PixelFormat; -import android.graphics.PorterDuff.Mode; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; - -import org.mariotaku.twidere.R; -import org.mariotaku.twidere.activity.iface.IThemedActivity; -import org.mariotaku.twidere.util.ThemeUtils; -import org.mariotaku.twidere.util.support.ViewSupport; -import org.mariotaku.twidere.view.iface.IHomeActionButton; - -public class HomeActionButtonCompat extends FrameLayout implements IHomeActionButton { - - private final ImageView mIconView; - private final FloatingActionDrawable mBackground; - - public HomeActionButtonCompat(final Context context) { - this(context, null); - } - - public HomeActionButtonCompat(final Context context, final AttributeSet attrs) { - this(context, attrs, 0); - } - - public HomeActionButtonCompat(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); - if (isInEditMode()) { - inflate(context, R.layout.action_item_home_actions_compat, this); - } else if (context instanceof IThemedActivity) { - int themeColor = ((IThemedActivity) context).getCurrentThemeColor(); - inflate(ThemeUtils.getActionBarThemedContext(context, themeColor), - R.layout.action_item_home_actions_compat, this); - } else { - inflate(ThemeUtils.getActionBarThemedContext(context), R.layout.action_item_home_actions_compat, - this); - } - mIconView = (ImageView) findViewById(android.R.id.icon); - final Resources resources = getResources(); - final int radius = resources.getDimensionPixelSize(R.dimen.element_spacing_small); - mBackground = new FloatingActionDrawable(this, radius); - ViewSupport.setBackground(this, mBackground); - } - - @Override - public void setButtonColor(int color) { - mBackground.setColor(color); - } - - @Override - public void setIcon(final Bitmap bm) { - mIconView.setImageBitmap(bm); - } - - @Override - public void setIcon(final Drawable drawable) { - mIconView.setImageDrawable(drawable); - } - - @Override - public void setIcon(final int resId) { - mIconView.setImageResource(resId); - } - - @Override - public void setIconColor(int color, Mode mode) { - mIconView.setColorFilter(color, mode); - } - - @Override - public void setTitle(final CharSequence title) { - setContentDescription(title); - } - - @Override - public void setTitle(final int title) { - setTitle(getResources().getText(title)); - } - - private static class FloatingActionDrawable extends Drawable { - - - private static final int SHADOW_START_COLOR = 0x37000000; - - private final View mView; - private final float mRadius; - - private Bitmap mBitmap; - private Paint mColorPaint; - private Rect mBounds; - - public FloatingActionDrawable(View view, float radius) { - mView = view; - mRadius = radius; - mColorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mBounds = new Rect(); - } - - @Override - public void draw(Canvas canvas) { - if (mBitmap != null) { - canvas.drawBitmap(mBitmap, 0, 0, null); - } - final Rect bounds = mBounds; - if (!bounds.isEmpty()) { - final RectF rect = new RectF(mView.getPaddingLeft(), mView.getPaddingTop(), - bounds.width() - mView.getPaddingRight(), bounds.height() - mView.getPaddingBottom()); - canvas.drawOval(rect, mColorPaint); - } - } - - @Override - public void setAlpha(int alpha) { - // No-op - } - - @Override - public void setColorFilter(ColorFilter cf) { - mColorPaint.setColorFilter(cf); - invalidateSelf(); - } - - @Override - public int getOpacity() { - return PixelFormat.TRANSLUCENT; - } - - @Override - protected void onBoundsChange(Rect bounds) { - super.onBoundsChange(bounds); - mBounds.set(bounds); - updateBitmap(); - invalidateSelf(); - } - - @Override - public int getIntrinsicWidth() { - return -1; - } - - @Override - public int getIntrinsicHeight() { - return -1; - } - - public void setColor(int color) { - mColorPaint.setColor(color); - updateBitmap(); - invalidateSelf(); - } - - private void updateBitmap() { - final Rect bounds = mBounds; - if (bounds.isEmpty()) return; - mBitmap = Bitmap.createBitmap(bounds.width(), bounds.height(), Config.ARGB_8888); - final Canvas canvas = new Canvas(mBitmap); - final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(0xFF000000 | mColorPaint.getColor()); - final float radius = mRadius; - paint.setShadowLayer(radius, 0, radius * 1.5f / 2, SHADOW_START_COLOR); - final RectF rect = new RectF(mView.getPaddingLeft(), mView.getPaddingTop(), - bounds.width() - mView.getPaddingRight(), bounds.height() - mView.getPaddingBottom()); - canvas.drawOval(rect, paint); - paint.setShadowLayer(0, 0, 0, 0); - paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); - canvas.drawOval(rect, paint); - } - } - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/iface/IHomeActionButton.java b/twidere/src/main/java/org/mariotaku/twidere/view/iface/IHomeActionButton.java deleted file mode 100644 index 27c8cf794..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/view/iface/IHomeActionButton.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.mariotaku.twidere.view.iface; - -import android.graphics.Bitmap; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; - -/** - * Created by mariotaku on 14/10/23. - */ -public interface IHomeActionButton { - void setButtonColor(int color); - - void setIcon(Bitmap bm); - - void setIcon(Drawable drawable); - - void setIcon(int resId); - - void setIconColor(int color, PorterDuff.Mode mode); - - void setTitle(CharSequence title); - - void setTitle(int title); -} diff --git a/twidere/src/main/res/drawable-hdpi/ic_action_star.png b/twidere/src/main/res/drawable-hdpi/ic_action_star.png deleted file mode 100644 index 60f52a137..000000000 Binary files a/twidere/src/main/res/drawable-hdpi/ic_action_star.png and /dev/null differ diff --git a/twidere/src/main/res/drawable-mdpi/ic_action_star.png b/twidere/src/main/res/drawable-mdpi/ic_action_star.png deleted file mode 100644 index bc7d3a6eb..000000000 Binary files a/twidere/src/main/res/drawable-mdpi/ic_action_star.png and /dev/null differ diff --git a/twidere/src/main/res/drawable-xhdpi/ic_action_star.png b/twidere/src/main/res/drawable-xhdpi/ic_action_star.png deleted file mode 100644 index debd927ad..000000000 Binary files a/twidere/src/main/res/drawable-xhdpi/ic_action_star.png and /dev/null differ diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_action_star.png b/twidere/src/main/res/drawable-xxhdpi/ic_action_star.png deleted file mode 100644 index 9ccdd4aa0..000000000 Binary files a/twidere/src/main/res/drawable-xxhdpi/ic_action_star.png and /dev/null differ diff --git a/twidere/src/main/res/layout-v21/layout_home_actions_button.xml b/twidere/src/main/res/layout-v21/layout_home_actions_button.xml deleted file mode 100644 index ced4336e5..000000000 --- a/twidere/src/main/res/layout-v21/layout_home_actions_button.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - \ No newline at end of file diff --git a/twidere/src/main/res/layout/activity_content_fragment.xml b/twidere/src/main/res/layout/activity_content_fragment.xml index dae9f1b11..eee80578b 100644 --- a/twidere/src/main/res/layout/activity_content_fragment.xml +++ b/twidere/src/main/res/layout/activity_content_fragment.xml @@ -17,16 +17,17 @@ ~ along with this program. If not, see . --> - + android:layout_height="match_parent"/> + tools:ignore="UnusedAttribute"/> + android:background="?android:windowContentOverlay"/> diff --git a/twidere/src/main/res/layout/activity_home.xml b/twidere/src/main/res/layout/activity_home.xml index 692f39259..33e70d4c9 100644 --- a/twidere/src/main/res/layout/activity_home.xml +++ b/twidere/src/main/res/layout/activity_home.xml @@ -17,23 +17,25 @@ ~ along with this program. If not, see . --> - - + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:layout_height="match_parent"/> - + android:layout_gravity="start" + tools:layout="@layout/fragment_accounts_dashboard"/> \ No newline at end of file diff --git a/twidere/src/main/res/layout/activity_home_content.xml b/twidere/src/main/res/layout/activity_home_content.xml index 1a574b374..84eda5555 100644 --- a/twidere/src/main/res/layout/activity_home_content.xml +++ b/twidere/src/main/res/layout/activity_home_content.xml @@ -17,10 +17,10 @@ ~ along with this program. If not, see . --> - @@ -32,29 +32,33 @@ - + + + + + + android:layout_gravity="bottom|end" + android:layout_margin="@dimen/element_spacing_large" + android:clickable="true" + android:src="@drawable/ic_action_status_compose" + app:elevation="6dp" + app:pressedTranslationZ="12dp"/> - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/twidere/src/main/res/layout/activity_request_permissions.xml b/twidere/src/main/res/layout/activity_request_permissions.xml index 0cdd870b8..d507647da 100644 --- a/twidere/src/main/res/layout/activity_request_permissions.xml +++ b/twidere/src/main/res/layout/activity_request_permissions.xml @@ -26,7 +26,7 @@ android:divider="?android:dividerVertical" android:orientation="vertical" android:showDividers="middle" - tools:context=".activity.support.RequestPermissionsActivity"> + tools:context=".activity.RequestPermissionsActivity"> + android:layout_height="match_parent" + android:focusable="true"> . --> - diff --git a/twidere/src/main/res/layout/header_drawer_account_selector.xml b/twidere/src/main/res/layout/header_drawer_account_selector.xml index faebb4da7..5a1f3ccfc 100644 --- a/twidere/src/main/res/layout/header_drawer_account_selector.xml +++ b/twidere/src/main/res/layout/header_drawer_account_selector.xml @@ -17,7 +17,9 @@ ~ along with this program. If not, see . --> - + tools:src="@drawable/nyan_stars_background"/> + tools:src="@mipmap/ic_launcher"/> + tools:visibility="invisible"/> + tools:text="Name"/> + android:textColor="@color/light_gray" + tools:text="\@username"/> @@ -129,7 +131,7 @@ android:id="@+id/account_dashboard_menu" android:layout_width="match_parent" android:layout_height="match_parent" - android:focusable="true" /> + android:focusable="true"/> @@ -143,7 +145,7 @@ android:focusable="false" android:scaleType="fitCenter" android:visibility="invisible" - tools:ignore="ContentDescription" /> + tools:ignore="ContentDescription"/> + android:text="@string/no_account"/> diff --git a/twidere/src/main/res/layout/layout_actionbar_home.xml b/twidere/src/main/res/layout/layout_actionbar_home.xml deleted file mode 100644 index ccc47ee6f..000000000 --- a/twidere/src/main/res/layout/layout_actionbar_home.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/twidere/src/main/res/layout/layout_home_actions_button.xml b/twidere/src/main/res/layout/layout_home_actions_button.xml deleted file mode 100644 index 69dc640c7..000000000 --- a/twidere/src/main/res/layout/layout_home_actions_button.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - \ No newline at end of file diff --git a/twidere/src/main/res/menu/menu_account_dashboard.xml b/twidere/src/main/res/menu/menu_account_dashboard.xml new file mode 100644 index 000000000..ba63cd883 --- /dev/null +++ b/twidere/src/main/res/menu/menu_account_dashboard.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/twidere/src/main/res/values-notnight/themes.xml b/twidere/src/main/res/values-notnight/themes.xml index 820830a73..50db22ba8 100644 --- a/twidere/src/main/res/values-notnight/themes.xml +++ b/twidere/src/main/res/values-notnight/themes.xml @@ -18,7 +18,8 @@ @color/quote_indicator_background_light true - @style/asb_Preference.SwitchPreference + + light @style/PreferenceThemeOverlay.v14.Material @@ -41,7 +42,8 @@ @color/quote_indicator_background_light true - @style/asb_Preference.SwitchPreference + + light @style/PreferenceThemeOverlay.v14.Material @@ -69,7 +71,9 @@ @color/quote_indicator_background_light true - @style/asb_Preference.SwitchPreference + + light + @@ -94,7 +98,9 @@ @color/quote_indicator_background_light true - @style/asb_Preference.SwitchPreference + + light + @@ -130,7 +136,9 @@ @color/quote_indicator_background_light true - @style/asb_Preference.SwitchPreference + + light + @@ -46,7 +47,8 @@ @color/quote_indicator_background_dark true - @style/asb_Preference.SwitchPreference + + dark @style/PreferenceThemeOverlay.v14.Material @@ -73,7 +75,9 @@ @color/quote_indicator_background_dark true - @style/asb_Preference.SwitchPreference + + dark +