theme improvements
|
@ -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'
|
||||
|
|
|
@ -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 *;
|
||||
}
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -139,7 +139,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.HomeActivity"
|
||||
android:name=".activity.HomeActivity"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Twidere.NoActionBar"
|
||||
|
@ -163,11 +163,11 @@
|
|||
android:value=".activity.support.HomeActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.ComposeActivity"
|
||||
android:name=".activity.ComposeActivity"
|
||||
android:excludeFromRecents="true"
|
||||
android:label="@string/compose"
|
||||
android:launchMode="singleTop"
|
||||
android:parentActivityName=".activity.support.HomeActivity"
|
||||
android:parentActivityName=".activity.HomeActivity"
|
||||
android:theme="@style/Theme.Twidere.Compose"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter android:label="@string/compose">
|
||||
|
@ -193,10 +193,10 @@
|
|||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.HomeActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.QuickSearchBarActivity"
|
||||
android:name=".activity.QuickSearchBarActivity"
|
||||
android:label="@string/search"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Twidere.QuickSearchBar"
|
||||
|
@ -208,7 +208,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.SignInActivity"
|
||||
android:name=".activity.SignInActivity"
|
||||
android:label="@string/sign_in"
|
||||
android:theme="@style/Theme.Twidere.DialogWhenLarge.NoActionBar"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
@ -219,7 +219,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.BrowserSignInActivity"
|
||||
android:name=".activity.BrowserSignInActivity"
|
||||
android:label="@string/browser_sign_in"
|
||||
android:theme="@style/Theme.Twidere"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
@ -232,7 +232,7 @@
|
|||
<activity
|
||||
android:name=".activity.SettingsActivity"
|
||||
android:label="@string/settings"
|
||||
android:parentActivityName=".activity.support.HomeActivity"
|
||||
android:parentActivityName=".activity.HomeActivity"
|
||||
android:theme="@style/Theme.Twidere"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
|
@ -244,15 +244,15 @@
|
|||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.HomeActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.APIEditorActivity"
|
||||
android:name=".activity.APIEditorActivity"
|
||||
android:label="@string/edit_api"
|
||||
android:theme="@style/Theme.Twidere.Dialog"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
<activity
|
||||
android:name=".activity.support.AccountSelectorActivity"
|
||||
android:name=".activity.AccountSelectorActivity"
|
||||
android:label="@string/select_account"
|
||||
android:theme="@style/Theme.Twidere.Dialog">
|
||||
<intent-filter>
|
||||
|
@ -262,17 +262,17 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.ColorPickerDialogActivity"
|
||||
android:name=".activity.ColorPickerDialogActivity"
|
||||
android:label="@string/set_color"
|
||||
android:theme="@style/Theme.Twidere.NoDisplay"/>
|
||||
<activity
|
||||
android:name=".activity.support.LinkHandlerActivity"
|
||||
android:parentActivityName=".activity.support.HomeActivity"
|
||||
android:theme="@style/Theme.Twidere.DialogWhenLarge.NoActionBar"
|
||||
android:name=".activity.LinkHandlerActivity"
|
||||
android:parentActivityName=".activity.HomeActivity"
|
||||
android:theme="@style/Theme.Twidere"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.HomeActivity"/>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
|
@ -284,7 +284,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.MediaViewerActivity"
|
||||
android:name=".activity.MediaViewerActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/media"
|
||||
android:theme="@style/Theme.Twidere.Viewer"
|
||||
|
@ -292,7 +292,7 @@
|
|||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.HomeActivity"/>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.VIEW_MEDIA"/>
|
||||
|
@ -306,7 +306,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.FileSelectorActivity"
|
||||
android:name=".activity.FileSelectorActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/pick_file"
|
||||
android:theme="@style/Theme.Twidere.NoDisplay"
|
||||
|
@ -319,7 +319,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.ThemedImagePickerActivity"
|
||||
android:name=".activity.ThemedImagePickerActivity"
|
||||
android:exported="false"
|
||||
android:theme="@style/Theme.Twidere.NoDisplay"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
@ -332,7 +332,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.CustomTabEditorActivity"
|
||||
android:name=".activity.CustomTabEditorActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/add_tab"
|
||||
android:theme="@style/Theme.Twidere.Dialog"
|
||||
|
@ -359,7 +359,7 @@
|
|||
android:label="@string/copy_link"
|
||||
android:theme="@style/Theme.Twidere.NoDisplay"/>
|
||||
<activity
|
||||
android:name=".activity.support.RequestPermissionsActivity"
|
||||
android:name=".activity.RequestPermissionsActivity"
|
||||
android:label="@string/permissions_request"
|
||||
android:theme="@style/Theme.Twidere.Dialog">
|
||||
<intent-filter>
|
||||
|
@ -369,7 +369,7 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.UserListSelectorActivity"
|
||||
android:name=".activity.UserListSelectorActivity"
|
||||
android:label="@string/select_user_list"
|
||||
android:theme="@style/Theme.Twidere.Dialog">
|
||||
<intent-filter>
|
||||
|
@ -384,15 +384,15 @@
|
|||
android:label="@string/settings_wizard"
|
||||
android:theme="@style/Theme.Twidere"/>
|
||||
<activity
|
||||
android:name=".activity.support.DataExportActivity"
|
||||
android:name=".activity.DataExportActivity"
|
||||
android:label="@string/export_settings"
|
||||
android:theme="@style/Theme.Twidere.NoDisplay"/>
|
||||
<activity
|
||||
android:name=".activity.support.DataImportActivity"
|
||||
android:name=".activity.DataImportActivity"
|
||||
android:label="@string/import_settings"
|
||||
android:theme="@style/Theme.Twidere.NoDisplay"/>
|
||||
<activity
|
||||
android:name=".activity.support.ActivityPickerActivity"
|
||||
android:name=".activity.ActivityPickerActivity"
|
||||
android:theme="@style/Theme.Twidere.Dialog">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.PICK_ACTIVITY"/>
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.app.LoaderManager.LoaderCallbacks;
|
||||
import android.content.CursorLoader;
|
|
@ -1,4 +1,4 @@
|
|||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ResolveInfo;
|
|
@ -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 {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
|
@ -1,171 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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")
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
|
@ -17,12 +17,13 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
|
@ -1,4 +1,4 @@
|
|||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
|
@ -1,4 +1,4 @@
|
|||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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() {
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -17,30 +17,25 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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 {
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -17,20 +17,14 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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) {
|
|
@ -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 {
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
|
@ -42,6 +42,4 @@ public interface IThemedActivity {
|
|||
@ShapedImageView.ShapeStyle
|
||||
int getCurrentProfileImageStyle();
|
||||
|
||||
void restart();
|
||||
|
||||
}
|
||||
|
|
|
@ -1,197 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<Cursor>,
|
||||
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<Cursor> 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<OptionItem> {
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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<Sim
|
|||
@Override
|
||||
public boolean onCreateActionMode(final ActionMode mode, final Menu menu) {
|
||||
mActionMode = mode;
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof IThemedActivity) {
|
||||
ThemeUtils.applySupportActionModeColor(mode,
|
||||
((IThemedActivity) activity).getCurrentThemeColor(),
|
||||
((IThemedActivity) activity).getThemeBackgroundOption(), true);
|
||||
}
|
||||
setControlVisible(true);
|
||||
mode.getMenuInflater().inflate(R.menu.action_multi_select_items, menu);
|
||||
return true;
|
||||
|
@ -145,11 +138,6 @@ public abstract class BaseFiltersFragment extends AbsContentListViewFragment<Sim
|
|||
@Override
|
||||
public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) {
|
||||
updateTitle(mode);
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof IThemedActivity) {
|
||||
ThemeUtils.applySupportActionModeItemColor(mode,
|
||||
((IThemedActivity) activity).getCurrentThemeColor());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,17 +29,12 @@ import android.os.Bundle;
|
|||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManagerAccessor;
|
||||
import android.support.v4.text.BidiFormatter;
|
||||
import android.support.v4.view.LayoutInflaterCompat;
|
||||
import android.support.v4.view.LayoutInflaterFactory;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment;
|
||||
import org.mariotaku.twidere.util.AsyncTaskManager;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
|
@ -50,7 +45,6 @@ import org.mariotaku.twidere.util.MultiSelectManager;
|
|||
import org.mariotaku.twidere.util.NotificationManagerWrapper;
|
||||
import org.mariotaku.twidere.util.ReadStateManager;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory;
|
||||
import org.mariotaku.twidere.util.TwidereValidator;
|
||||
import org.mariotaku.twidere.util.UserColorNameManager;
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
|
||||
|
@ -173,19 +167,6 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
|
|||
mActionHelper.dispatchOnResumeFragments();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (!(activity instanceof IThemedActivity)) {
|
||||
return super.getLayoutInflater(savedInstanceState);
|
||||
}
|
||||
final LayoutInflater inflater = activity.getLayoutInflater().cloneInContext(getThemedContext());
|
||||
getChildFragmentManager(); // Init if needed; use raw implementation below.
|
||||
final LayoutInflaterFactory delegate = FragmentManagerAccessor.getLayoutInflaterFactory(getChildFragmentManager());
|
||||
LayoutInflaterCompat.setFactory(inflater, new ThemedLayoutInflaterFactory((IThemedActivity) activity, delegate));
|
||||
return inflater;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
|
|
@ -38,7 +38,7 @@ import org.mariotaku.sqliteqb.library.ArgsArray;
|
|||
import org.mariotaku.sqliteqb.library.Columns.Column;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.HomeActivity;
|
||||
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter;
|
||||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition;
|
||||
import org.mariotaku.twidere.loader.ExtendedObjectCursorLoader;
|
||||
|
|
|
@ -38,7 +38,7 @@ import org.mariotaku.sqliteqb.library.ArgsArray;
|
|||
import org.mariotaku.sqliteqb.library.Columns.Column;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.HomeActivity;
|
||||
import org.mariotaku.twidere.adapter.ListParcelableStatusesAdapter;
|
||||
import org.mariotaku.twidere.adapter.ParcelableStatusesAdapter;
|
||||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition;
|
||||
|
|
|
@ -47,8 +47,8 @@ import org.mariotaku.sqliteqb.library.Columns.Column;
|
|||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.DirectMessageEntry;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.MessageEntriesAdapterListener;
|
||||
|
|
|
@ -34,7 +34,7 @@ import android.view.ViewGroup;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
|
|
|
@ -32,7 +32,7 @@ import android.view.ViewGroup;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
|
|
|
@ -75,8 +75,8 @@ import org.mariotaku.sqliteqb.library.Expression;
|
|||
import org.mariotaku.sqliteqb.library.OrderBy;
|
||||
import org.mariotaku.sqliteqb.library.RawItemArray;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.support.ThemedImagePickerActivity;
|
||||
import org.mariotaku.twidere.activity.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.ThemedImagePickerActivity;
|
||||
import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter;
|
||||
import org.mariotaku.twidere.adapter.MessageConversationAdapter;
|
||||
import org.mariotaku.twidere.adapter.SimpleParcelableUsersAdapter;
|
||||
|
|
|
@ -44,8 +44,8 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.activity.iface.IControlBarActivity;
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarOffsetListener;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.activity.support.ComposeActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.ComposeActivity;
|
||||
import org.mariotaku.twidere.activity.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
|
|
|
@ -85,7 +85,7 @@ import com.squareup.otto.Subscribe;
|
|||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.adapter.BaseRecyclerViewAdapter;
|
||||
import org.mariotaku.twidere.adapter.LoadMoreSupportAdapter;
|
||||
import org.mariotaku.twidere.adapter.ParcelableStatusesAdapter;
|
||||
|
|
|
@ -85,11 +85,11 @@ import org.apache.commons.lang3.ObjectUtils;
|
|||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.activity.support.AccountSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.support.ThemedAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.AccountSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.ThemedAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.api.twitter.Twitter;
|
||||
import org.mariotaku.twidere.api.twitter.TwitterException;
|
||||
|
|
|
@ -58,8 +58,8 @@ import com.rengwuxian.materialedittext.MaterialEditText;
|
|||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.activity.support.AccountSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.AccountSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.api.twitter.Twitter;
|
||||
import org.mariotaku.twidere.api.twitter.TwitterException;
|
||||
|
|
|
@ -50,8 +50,8 @@ import com.rengwuxian.materialedittext.MaterialEditText;
|
|||
import com.twitter.Validator;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.support.ThemedImagePickerActivity;
|
||||
import org.mariotaku.twidere.activity.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.ThemedImagePickerActivity;
|
||||
import org.mariotaku.twidere.api.twitter.Twitter;
|
||||
import org.mariotaku.twidere.api.twitter.TwitterException;
|
||||
import org.mariotaku.twidere.api.twitter.model.ProfileUpdate;
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -1,269 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<String, Constructor> 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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -39,4 +39,5 @@ public class DrawerContentFrameLayout extends FrameLayout {
|
|||
super(context, attrs, defStyle);
|
||||
ThemeUtils.setupDrawerBackground(context, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,163 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<View, Float> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,203 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 260 B |
Before Width: | Height: | Size: 519 B |
Before Width: | Height: | Size: 528 B |
|
@ -1,27 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Twidere - Twitter client for Android
|
||||
~
|
||||
~ Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
~
|
||||
~ 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 <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<org.mariotaku.twidere.view.HomeActionButton
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/actions_button"
|
||||
android:layout_width="@dimen/float_action_button_size"
|
||||
android:layout_height="@dimen/float_action_button_size"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="@dimen/element_spacing_large"
|
||||
android:elevation="@dimen/element_spacing_small" />
|
|
@ -17,16 +17,17 @@
|
|||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<org.mariotaku.twidere.view.TintedStatusNativeActionModeAwareLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
<org.mariotaku.twidere.view.TintedStatusNativeActionModeAwareLayout
|
||||
android:id="@+id/main_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/twidere_action_bar_with_overlay"
|
||||
|
@ -41,13 +42,13 @@
|
|||
android:layout_height="?actionBarSize"
|
||||
android:layout_alignParentTop="true"
|
||||
android:touchscreenBlocksFocus="true"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
tools:ignore="UnusedAttribute"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/window_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/twidere_action_bar_container"
|
||||
android:background="?android:windowContentOverlay" />
|
||||
android:background="?android:windowContentOverlay"/>
|
||||
</RelativeLayout>
|
||||
</org.mariotaku.twidere.view.TintedStatusNativeActionModeAwareLayout>
|
||||
|
|
|
@ -17,23 +17,25 @@
|
|||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
<android.support.v4.widget.DrawerLayout
|
||||
android:id="@+id/home_menu"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true">
|
||||
|
||||
<include
|
||||
layout="@layout/activity_home_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<include
|
||||
layout="@layout/drawer_home_accounts"
|
||||
<fragment
|
||||
android:id="@+id/left_drawer"
|
||||
class="org.mariotaku.twidere.fragment.support.AccountsDashboardFragment"
|
||||
android:layout_width="@dimen/drawer_width_home"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="left"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
android:layout_gravity="start"
|
||||
tools:layout="@layout/fragment_accounts_dashboard"/>
|
||||
|
||||
</android.support.v4.widget.DrawerLayout>
|
|
@ -17,10 +17,10 @@
|
|||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<org.mariotaku.twidere.view.MainFrameLayout
|
||||
<org.mariotaku.twidere.view.ExtendedFrameLayout
|
||||
android:id="@+id/home_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -32,29 +32,33 @@
|
|||
|
||||
<include layout="@layout/layout_empty_tab_hint"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/twidere_action_bar_with_overlay"
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/action_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:elevation="@dimen/toolbar_elevation"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
|
||||
app:contentInsetEnd="0dp"
|
||||
app:contentInsetStart="0dp">
|
||||
|
||||
<org.mariotaku.twidere.view.TabPagerIndicator
|
||||
android:id="@+id/main_tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:tabDisplayOption="icon"
|
||||
app:tabExpandEnabled="true"
|
||||
app:tabHorizontalPadding="@dimen/element_spacing_normal"/>
|
||||
</android.support.v7.widget.Toolbar>
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/actions_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
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"/>
|
||||
|
||||
<org.mariotaku.twidere.view.TwidereActionBarContainer
|
||||
android:id="@+id/twidere_action_bar_container"
|
||||
style="?attr/actionBarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout="@layout/layout_actionbar_home"
|
||||
android:touchscreenBlocksFocus="true"
|
||||
tools:ignore="UnusedAttribute"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/window_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/twidere_action_bar_container"
|
||||
android:background="?android:windowContentOverlay"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<include layout="@layout/layout_home_actions_button"/>
|
||||
</org.mariotaku.twidere.view.MainFrameLayout>
|
||||
</org.mariotaku.twidere.view.ExtendedFrameLayout>
|
|
@ -26,7 +26,7 @@
|
|||
android:divider="?android:dividerVertical"
|
||||
android:orientation="vertical"
|
||||
android:showDividers="middle"
|
||||
tools:context=".activity.support.RequestPermissionsActivity">
|
||||
tools:context=".activity.RequestPermissionsActivity">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:focusable="true"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="true">
|
||||
|
||||
<fragment
|
||||
android:id="@+id/left_drawer"
|
||||
|
|
|
@ -17,14 +17,14 @@
|
|||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<ListView
|
||||
android:id="@android:id/list"
|
||||
<android.support.design.widget.NavigationView
|
||||
android:id="@+id/navigation_view"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:divider="@null"
|
||||
android:dividerHeight="0dp"
|
||||
android:focusable="true"
|
||||
android:listSelector="?selectableItemBackground"
|
||||
app:headerLayout="@layout/header_drawer_account_selector"
|
||||
app:menu="@menu/menu_account_dashboard"
|
||||
tools:context=".fragment.support.AccountsDashboardFragment"/>
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout
|
||||
android:id="@+id/account_dashboard_header"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -36,7 +38,7 @@
|
|||
android:focusable="false"
|
||||
android:foreground="@color/drawer_banner_foreground"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/nyan_stars_background" />
|
||||
tools:src="@drawable/nyan_stars_background"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/profile_container"
|
||||
|
@ -64,7 +66,7 @@
|
|||
android:focusable="false"
|
||||
app:sivBorder="true"
|
||||
app:sivBorderWidth="2dp"
|
||||
tools:src="@mipmap/ic_launcher" />
|
||||
tools:src="@mipmap/ic_launcher"/>
|
||||
|
||||
<org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
android:id="@+id/other_accounts_list"
|
||||
|
@ -78,7 +80,7 @@
|
|||
android:layout_toEndOf="@id/profile_image"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:focusable="false"
|
||||
tools:visibility="invisible" />
|
||||
tools:visibility="invisible"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -104,9 +106,9 @@
|
|||
android:focusable="false"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?attr/textColorDrawerNamePrimary"
|
||||
android:textColor="@android:color/white"
|
||||
android:textStyle="bold"
|
||||
tools:text="Name" />
|
||||
tools:text="Name"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screen_name"
|
||||
|
@ -115,8 +117,8 @@
|
|||
android:focusable="false"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?textColorDrawerNameSecondary"
|
||||
tools:text="\@username" />
|
||||
android:textColor="@color/light_gray"
|
||||
tools:text="\@username"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -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"/>
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
|
@ -143,7 +145,7 @@
|
|||
android:focusable="false"
|
||||
android:scaleType="fitCenter"
|
||||
android:visibility="invisible"
|
||||
tools:ignore="ContentDescription" />
|
||||
tools:ignore="ContentDescription"/>
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
|
@ -159,7 +161,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/no_account" />
|
||||
android:text="@string/no_account"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:layout_height="?actionBarSize"
|
||||
tools:layout_width="match_parent">
|
||||
|
||||
<android.support.v7.widget.TwidereToolbar
|
||||
android:id="@+id/action_bar"
|
||||
style="?attr/toolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:contentInsetEnd="0dp"
|
||||
app:contentInsetStart="0dp">
|
||||
|
||||
<org.mariotaku.twidere.view.TabPagerIndicator
|
||||
android:id="@+id/main_tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:tabDisplayOption="icon"
|
||||
app:tabExpandEnabled="true"
|
||||
app:tabHorizontalPadding="@dimen/element_spacing_normal"/>
|
||||
</android.support.v7.widget.TwidereToolbar>
|
||||
|
||||
</merge>
|
|
@ -1,28 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Twidere - Twitter client for Android
|
||||
~
|
||||
~ Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
~
|
||||
~ 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 <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<org.mariotaku.twidere.view.HomeActionButtonCompat
|
||||
android:id="@+id/actions_button"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:padding="@dimen/element_spacing_large"
|
||||
android:visibility="visible"/>
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group
|
||||
android:id="@+id/account_actions"
|
||||
android:checkableBehavior="none">
|
||||
<item
|
||||
android:id="@id/search"
|
||||
android:icon="@drawable/ic_action_search"
|
||||
android:title="@string/search"/>
|
||||
<item
|
||||
android:id="@id/interactions"
|
||||
android:icon="@drawable/ic_action_notification"
|
||||
android:title="@string/interactions"/>
|
||||
<item
|
||||
android:id="@id/messages"
|
||||
android:icon="@drawable/ic_action_message"
|
||||
android:title="@string/direct_messages"/>
|
||||
<item
|
||||
android:id="@id/favorites"
|
||||
android:icon="@drawable/ic_action_heart"
|
||||
android:title="@string/likes"/>
|
||||
<item
|
||||
android:id="@id/lists"
|
||||
android:icon="@drawable/ic_action_list"
|
||||
android:title="@string/likes"/>
|
||||
<item
|
||||
android:id="@id/groups"
|
||||
android:icon="@drawable/ic_action_list"
|
||||
android:title="@string/groups"/>
|
||||
<item
|
||||
android:id="@id/public_timeline"
|
||||
android:icon="@drawable/ic_action_quote"
|
||||
android:title="@string/public_timeline"/>
|
||||
</group>
|
||||
<group
|
||||
android:id="@+id/app_menu"
|
||||
android:checkableBehavior="none">
|
||||
<item
|
||||
android:id="@id/accounts"
|
||||
android:icon="@drawable/ic_action_accounts"
|
||||
android:title="@string/accounts"/>
|
||||
<item
|
||||
android:id="@id/drafts"
|
||||
android:icon="@drawable/ic_action_draft"
|
||||
android:title="@string/drafts"/>
|
||||
<item
|
||||
android:id="@id/filters"
|
||||
android:icon="@drawable/ic_action_speaker_muted"
|
||||
android:title="@string/filters"/>
|
||||
<item
|
||||
android:id="@id/settings"
|
||||
android:icon="@drawable/ic_action_settings"
|
||||
android:title="@string/settings"/>
|
||||
</group>
|
||||
</menu>
|
|
@ -18,7 +18,8 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
|
||||
<item name="coloredActionBar">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">light</item>
|
||||
|
||||
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
||||
</style>
|
||||
|
@ -41,7 +42,8 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
|
||||
<item name="coloredActionBar">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">light</item>
|
||||
|
||||
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
||||
</style>
|
||||
|
@ -69,7 +71,9 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
|
||||
<item name="coloredActionBar">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">light</item>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
|
@ -94,7 +98,9 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
|
||||
<item name="coloredActionBar">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">light</item>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
|
@ -130,7 +136,9 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
|
||||
<item name="coloredActionBar">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">light</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.QuickSearchBar" parent="Theme.Twidere.Dialog">
|
||||
|
@ -145,8 +153,6 @@
|
|||
<style name="Theme.Twidere.Drawer" parent="Theme.Twidere.NoActionBar">
|
||||
<!-- Window attributes -->
|
||||
<item name="android:windowBackground">@color/bg_color_drawer_light</item>
|
||||
<item name="textColorDrawerNamePrimary">?android:textColorPrimaryInverse</item>
|
||||
<item name="textColorDrawerNameSecondary">?android:textColorSecondaryInverse</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.NoDisplay" parent="Theme.Twidere.Dialog">
|
||||
|
|
|
@ -12,10 +12,9 @@
|
|||
<attr name="cardItemBackgroundColor" format="color"/>
|
||||
<attr name="quoteIndicatorBackgroundColor" format="color"/>
|
||||
<attr name="linePageIndicatorStyle" format="reference"/>
|
||||
<attr name="textColorDrawerNamePrimary" format="color"/>
|
||||
<attr name="textColorDrawerNameSecondary" format="color"/>
|
||||
<attr name="progressWheelStyle" format="reference"/>
|
||||
<attr name="darkTheme" format="boolean"/>
|
||||
<attr name="ateThemeKey" format="string"/>
|
||||
<attr name="coloredActionBar" format="boolean"/>
|
||||
<attr name="windowNormalBackground" format="reference"/>
|
||||
</declare-styleable>
|
||||
|
|
|
@ -96,5 +96,6 @@
|
|||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
|
||||
<dimen name="height_player_control_panel">40dp</dimen>
|
||||
<dimen name="toolbar_elevation">8dp</dimen>
|
||||
|
||||
</resources>
|
|
@ -20,7 +20,8 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
||||
</style>
|
||||
|
@ -46,7 +47,8 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
||||
</style>
|
||||
|
@ -73,7 +75,9 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Dialog" parent="Theme.Compat.Base.Dialog">
|
||||
|
@ -97,7 +101,9 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Compose" parent="Theme.Compat.Base.Dialog">
|
||||
|
@ -131,7 +137,9 @@
|
|||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.QuickSearchBar" parent="Theme.Twidere.Dialog">
|
||||
|
@ -143,15 +151,20 @@
|
|||
<item name="android:windowActionModeOverlay">false</item>
|
||||
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Drawer" parent="Theme.Twidere.NoActionBar">
|
||||
<!-- Window attributes -->
|
||||
<item name="android:windowBackground">@color/bg_color_drawer_dark</item>
|
||||
<item name="textColorDrawerNamePrimary">?android:textColorPrimary</item>
|
||||
<item name="textColorDrawerNameSecondary">?android:textColorSecondary</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.NoDisplay" parent="Theme.Twidere.Dialog">
|
||||
|
@ -166,7 +179,10 @@
|
|||
<item name="android:windowTitleStyle">@style/Widget.TextView.WindowTitle.NoDisplay</item>
|
||||
|
||||
<item name="darkTheme">true</item>
|
||||
<!--<item name="android:windowNoDisplay">true</item>-->
|
||||
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Viewer" parent="Theme.AppCompat">
|
||||
|
@ -195,8 +211,11 @@
|
|||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
|
||||
|
||||
<item name="asb_switchPreferenceStyle">@style/asb_Preference.SwitchPreference</item>
|
||||
<item name="darkTheme">true</item>
|
||||
|
||||
<!-- ATE attributes -->
|
||||
<item name="ateThemeKey">dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="Theme.Nyan" parent="Theme.Compat.Base.NoActionBar">
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:key="settings_content"
|
||||
android:title="@string/content_and_storage">
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:key="settings_content"
|
||||
android:title="@string/content_and_storage">
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="category_content"
|
||||
|
@ -11,9 +12,9 @@
|
|||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="name_first"
|
||||
android:title="@string/name_first"
|
||||
app:asb_summaryOff="@string/name_first_summary_off"
|
||||
app:asb_summaryOn="@string/name_first_summary_on">
|
||||
android:summaryOff="@string/name_first_summary_off"
|
||||
android:summaryOn="@string/name_first_summary_on"
|
||||
android:title="@string/name_first">
|
||||
<extra
|
||||
android:name="notify_change"
|
||||
android:value="true"/>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<!-- Generator: Sketch 3.4 (15588) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Artboard</title>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>ic_action_heart-mdpi</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="Artboard" sketch:type="MSArtboardGroup" fill="#FFFFFF">
|
||||
<path d="M16,24.5708333 L14.6708333,23.3608333 C9.95,19.08 6.83333333,16.2566667 6.83333333,12.7916667 C6.83333333,9.96833333 9.05166667,7.75 11.875,7.75 C13.47,7.75 15.0008333,8.4925 16,9.66583333 C16.9991667,8.4925 18.53,7.75 20.125,7.75 C22.9483333,7.75 25.1666667,9.96833333 25.1666667,12.7916667 C25.1666667,16.2566667 22.05,19.08 17.3291667,23.37 L16,24.5708333 L16,24.5708333 Z" id="Shape" sketch:type="MSShapeGroup"></path>
|
||||
<g id="Action-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="ic_action_heart-mdpi" fill="#FFFFFF">
|
||||
<path d="M16,25.35 L14.55,24.03 C9.4,19.36 6,16.28 6,12.5 C6,9.42 8.42,7 11.5,7 C13.24,7 14.91,7.81 16,9.09 C17.09,7.81 18.76,7 20.5,7 C23.58,7 26,9.42 26,12.5 C26,16.28 22.6,19.36 17.45,24.04 L16,25.35 L16,25.35 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 797 B |
|
@ -1,15 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<!-- Generator: Sketch 3.5.1 (25234) - http://www.bohemiancoding.com/sketch -->
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>ic_action_notification-mdpi</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Action-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="ic_action_notification-mdpi" sketch:type="MSArtboardGroup">
|
||||
<g id="social_notifications" sketch:type="MSLayerGroup" transform="translate(4.000000, 4.000000)">
|
||||
<path d="M12,22 C13.1,22 14,21.1 14,20 L10,20 C10,21.1 10.9,22 12,22 L12,22 Z M18.5,16 L18.5,10.5 C18.5,7.43 16.37,4.86 13.5,4.18 L13.5,3.5 C13.5,2.67 12.83,2 12,2 C11.17,2 10.5,2.67 10.5,3.5 L10.5,4.18 C7.63,4.86 5.5,7.43 5.5,10.5 L5.5,16 L3.5,18 L3.5,19 L20.5,19 L20.5,18 L18.5,16 L18.5,16 Z" id="Shape" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M0,0 L24,0 L24,24 L0,24 L0,0 Z" id="Shape" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<g id="Action-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="ic_action_notification-mdpi" fill="#FFFFFF">
|
||||
<path d="M16,26 C17.1,26 18,25.1 18,24 L14,24 C14,25.1 14.9,26 16,26 L16,26 Z M22.5,20 L22.5,14.5 C22.5,11.43 20.37,8.86 17.5,8.18 L17.5,7.5 C17.5,6.67 16.83,6 16,6 C15.17,6 14.5,6.67 14.5,7.5 L14.5,8.18 C11.63,8.86 9.5,11.43 9.5,14.5 L9.5,20 L7.5,22 L7.5,23 L24.5,23 L24.5,22 L22.5,20 L22.5,20 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 893 B |
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>ic_action_star-mdpi</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Action-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="ic_action_star-mdpi" fill="#FFFFFF">
|
||||
<path d="M16,21.27 L22.18,25 L20.54,17.97 L26,13.24 L18.81,12.63 L16,6 L13.19,12.63 L6,13.24 L11.46,17.97 L9.82,25 L16,21.27 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 707 B |