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
+