mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-17 04:00:48 +01:00
migrating to newest appcompat library
This commit is contained in:
parent
0dce3fcdd5
commit
c09259f30e
@ -213,7 +213,7 @@ public interface IntentConstants {
|
||||
public static final String EXTRA_CURRENT_MEDIA = "current_media";
|
||||
public static final String EXTRA_EXTRAS = "extras";
|
||||
public static final String EXTRA_MY_FOLLOWING_ONLY = "my_following_only";
|
||||
public static final String EXTRA_RESTART_ACTIVITY = "restart_activity";
|
||||
public static final String EXTRA_CHANGED = "changed";
|
||||
public static final String EXTRA_FROM_USER = "from_user";
|
||||
public static final String EXTRA_SHOW_MEDIA_PREVIEW = "show_media_preview";
|
||||
public static final String EXTRA_SHOW_EXTRA_TYPE = "show_extra_type";
|
||||
|
@ -66,10 +66,10 @@ configurations.all {
|
||||
dependencies {
|
||||
// wearApp project(':twidere.wear')
|
||||
compile 'com.android.support:multidex:1.0.1'
|
||||
compile 'com.android.support:support-v13:22.0.0'
|
||||
compile 'com.android.support:appcompat-v7:22.0.0'
|
||||
compile 'com.android.support:cardview-v7:22.0.0'
|
||||
compile 'com.android.support:recyclerview-v7:22.0.0'
|
||||
compile 'com.android.support:support-v13:22.1.0'
|
||||
compile 'com.android.support:appcompat-v7:22.1.0'
|
||||
compile 'com.android.support:cardview-v7:22.1.0'
|
||||
compile 'com.android.support:recyclerview-v7:22.1.0'
|
||||
compile 'com.sothree.slidinguppanel:library:3.0.0'
|
||||
compile 'com.twitter:twitter-text:1.11.1'
|
||||
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
|
||||
|
@ -44,7 +44,7 @@ import org.osmdroid.views.overlay.OverlayItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class OpenStreetMapViewerActivity extends ThemedActionBarActivity implements Constants {
|
||||
public class OpenStreetMapViewerActivity extends ThemedAppCompatActivity implements Constants {
|
||||
|
||||
private MapView mMapView;
|
||||
private double mLatitude, mLongitude;
|
||||
|
@ -38,7 +38,7 @@ import org.mariotaku.twidere.fragment.support.WebMapFragment;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
||||
public class GoogleMapViewerActivity extends ThemedActionBarActivity implements Constants {
|
||||
public class GoogleMapViewerActivity extends ThemedAppCompatActivity implements Constants {
|
||||
|
||||
@Override
|
||||
public int getThemeColor() {
|
||||
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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.view.View;
|
||||
import android.widget.ListView;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/22.
|
||||
*/
|
||||
public class ListViewUtils {
|
||||
|
||||
public static int getFirstFullyVisiblePosition(final ListView listView) {
|
||||
final int firstVisiblePosition = listView.getFirstVisiblePosition();
|
||||
final View firstVisibleChild = listView.getChildAt(0);
|
||||
if (firstVisibleChild != null && firstVisibleChild.getTop() < 0
|
||||
&& firstVisiblePosition + 1 < listView.getCount()) {
|
||||
return firstVisiblePosition + 1;
|
||||
}
|
||||
return firstVisiblePosition;
|
||||
}
|
||||
|
||||
}
|
@ -217,7 +217,7 @@
|
||||
<activity
|
||||
android:name=".activity.SettingsActivity"
|
||||
android:label="@string/settings"
|
||||
android:theme="@style/Theme.Blank"
|
||||
android:theme="@style/Theme.Twidere.Dark"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MANAGE_NETWORK_USAGE"/>
|
||||
@ -458,10 +458,6 @@
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.CustomTabsActivity"
|
||||
android:label="@string/tabs"
|
||||
android:theme="@style/Theme.Blank"/>
|
||||
<activity
|
||||
android:name=".activity.support.CustomTabEditorActivity"
|
||||
android:exported="false"
|
||||
|
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright (C) 2014 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.support.annotation.LayoutRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
/**
|
||||
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
|
||||
* to be used with AppCompat.
|
||||
* <p/>
|
||||
* This technique can be used with an {@link android.app.Activity} class, not just
|
||||
* {@link android.preference.PreferenceActivity}.
|
||||
*/
|
||||
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
|
||||
private AppCompatDelegate mDelegate;
|
||||
|
||||
public ActionBar getSupportActionBar() {
|
||||
return getDelegate().getSupportActionBar();
|
||||
}
|
||||
|
||||
public void setSupportActionBar(@Nullable Toolbar toolbar) {
|
||||
getDelegate().setSupportActionBar(toolbar);
|
||||
}
|
||||
|
||||
public boolean supportRequestWindowFeature(int featureId) {
|
||||
return getDelegate().requestWindowFeature(featureId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
getDelegate().installViewFactory();
|
||||
getDelegate().onCreate(savedInstanceState);
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
getDelegate().onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
getDelegate().onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
getDelegate().onPostCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostResume() {
|
||||
super.onPostResume();
|
||||
getDelegate().onPostResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
getDelegate().onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentView(@LayoutRes int layoutResID) {
|
||||
getDelegate().setContentView(layoutResID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentView(View view) {
|
||||
getDelegate().setContentView(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentView(View view, ViewGroup.LayoutParams params) {
|
||||
getDelegate().setContentView(view, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addContentView(View view, ViewGroup.LayoutParams params) {
|
||||
getDelegate().addContentView(view, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateOptionsMenu() {
|
||||
getDelegate().invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public MenuInflater getMenuInflater() {
|
||||
return getDelegate().getMenuInflater();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTitleChanged(CharSequence title, int color) {
|
||||
super.onTitleChanged(title, color);
|
||||
getDelegate().setTitle(title);
|
||||
}
|
||||
|
||||
private AppCompatDelegate getDelegate() {
|
||||
if (mDelegate == null) {
|
||||
mDelegate = AppCompatDelegate.create(this, null);
|
||||
}
|
||||
return mDelegate;
|
||||
}
|
||||
}
|
@ -19,71 +19,44 @@
|
||||
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
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;
|
||||
import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.restartActivity;
|
||||
|
||||
public abstract class BasePreferenceActivity extends PreferenceActivity implements Constants,
|
||||
public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity implements Constants,
|
||||
IThemedActivity {
|
||||
|
||||
private int mCurrentThemeResource;
|
||||
private int mCurrentThemeResource, mCurrentThemeColor, mCurrentThemeBackgroundAlpha;
|
||||
@ShapeStyle
|
||||
private int mProfileImageStyle;
|
||||
private String mCurrentThemeBackgroundOption;
|
||||
|
||||
@Override
|
||||
public int getCurrentThemeBackgroundAlpha() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCurrentThemeColor() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCurrentThemeResourceId() {
|
||||
public final int getCurrentThemeResourceId() {
|
||||
return mCurrentThemeResource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getThemeBackgroundAlpha() {
|
||||
return 0;
|
||||
return ThemeUtils.getUserThemeBackgroundAlpha(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getThemeColor() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getThemeFontFamily() {
|
||||
return VALUE_THEME_FONT_FAMILY_REGULAR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getThemeResourceId() {
|
||||
return ThemeUtils.getSettingsThemeResource(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void restart() {
|
||||
restartActivity(this);
|
||||
}
|
||||
|
||||
protected final boolean isThemeChanged() {
|
||||
return getThemeResourceId() != mCurrentThemeResource;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
setTheme(mCurrentThemeResource = getThemeResourceId());
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
super.onCreate(savedInstanceState);
|
||||
setActionBarBackground();
|
||||
public int getCurrentThemeBackgroundAlpha() {
|
||||
return mCurrentThemeBackgroundAlpha;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -91,21 +64,77 @@ public abstract class BasePreferenceActivity extends PreferenceActivity implemen
|
||||
return mCurrentThemeBackgroundOption;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getThemeBackgroundOption() {
|
||||
return ThemeUtils.getThemeBackgroundOption(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (isThemeChanged()) {
|
||||
restart();
|
||||
}
|
||||
public int getCurrentThemeColor() {
|
||||
return mCurrentThemeColor;
|
||||
}
|
||||
|
||||
private void setActionBarBackground() {
|
||||
@Override
|
||||
public String getThemeFontFamily() {
|
||||
return ThemeUtils.getThemeFontFamily(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void restart() {
|
||||
Utils.restartActivity(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
if (Utils.isDebugBuild()) {
|
||||
StrictModeUtils.detectAllVmPolicy();
|
||||
StrictModeUtils.detectAllThreadPolicy();
|
||||
}
|
||||
setTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(String name, @NonNull Context context, @NonNull AttributeSet attrs) {
|
||||
final View view = ThemeUtils.createView(name, context, attrs, mCurrentThemeColor);
|
||||
if (view instanceof ShapedImageView) {
|
||||
final ShapedImageView shapedImageView = (ShapedImageView) view;
|
||||
shapedImageView.setStyle(mProfileImageStyle);
|
||||
}
|
||||
if (view != null) return view;
|
||||
return super.onCreateView(name, context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTitleChanged(CharSequence title, int color) {
|
||||
final SpannableStringBuilder builder = new SpannableStringBuilder(title);
|
||||
final int themeResId = getCurrentThemeResourceId();
|
||||
final int themeColor = getThemeColor();
|
||||
final int contrastColor = ThemeUtils.getContrastActionBarTitleColor(this, themeResId, themeColor);
|
||||
if (!ThemeUtils.isDarkTheme(themeResId)) {
|
||||
builder.setSpan(new ForegroundColorSpan(contrastColor), 0, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
super.onTitleChanged(title, color);
|
||||
}
|
||||
|
||||
private void setTheme() {
|
||||
mCurrentThemeResource = getThemeResourceId();
|
||||
mCurrentThemeColor = getThemeColor();
|
||||
mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha();
|
||||
mProfileImageStyle = Utils.getProfileImageStyle(this);
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
setTheme(mCurrentThemeResource);
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), mCurrentThemeResource, mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,8 +28,6 @@ import org.mariotaku.twidere.util.StrictModeUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.restartActivity;
|
||||
|
||||
public abstract class BaseThemedActivity extends Activity implements IThemedActivity {
|
||||
|
||||
private int mCurrentThemeResource;
|
||||
@ -76,7 +74,7 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi
|
||||
|
||||
@Override
|
||||
public final void restart() {
|
||||
restartActivity(this);
|
||||
Utils.restartActivity(this);
|
||||
}
|
||||
|
||||
protected final boolean isThemeChanged() {
|
||||
|
@ -1,81 +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.app.ActionBar;
|
||||
import android.app.FragmentManager;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.mariotaku.twidere.fragment.CustomTabsFragment;
|
||||
import org.mariotaku.twidere.model.SupportTabSpec;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mariotaku.twidere.util.CustomTabUtils.getHomeTabs;
|
||||
|
||||
public class CustomTabsActivity extends BasePreferenceActivity {
|
||||
|
||||
private final List<SupportTabSpec> mCustomTabs = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
final List<SupportTabSpec> tabs = getHomeTabs(this);
|
||||
setResult(isTabsChanged(tabs) && !tabs.isEmpty() ? RESULT_OK : RESULT_CANCELED);
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case MENU_HOME: {
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
final ActionBar ab = getActionBar();
|
||||
if (ab != null) {
|
||||
ab.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
final FragmentManager fm = getFragmentManager();
|
||||
fm.beginTransaction().replace(android.R.id.content, new CustomTabsFragment()).commit();
|
||||
initTabs();
|
||||
}
|
||||
|
||||
private void initTabs() {
|
||||
mCustomTabs.clear();
|
||||
mCustomTabs.addAll(getHomeTabs(this));
|
||||
}
|
||||
|
||||
private boolean isTabsChanged(final List<SupportTabSpec> tabs) {
|
||||
if (mCustomTabs.size() != tabs.size()) return true;
|
||||
for (int i = 0, size = mCustomTabs.size(); i < size; i++) {
|
||||
if (!mCustomTabs.get(i).equals(tabs.get(i))) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -19,18 +19,18 @@
|
||||
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.PorterDuff.Mode;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@ -52,7 +52,6 @@ import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.DataExportActivity;
|
||||
import org.mariotaku.twidere.activity.support.DataImportActivity;
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.view.holder.ViewListHolder;
|
||||
|
||||
@ -63,37 +62,77 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
|
||||
private static long HEADER_ID_RESTORE_ICON = 1001;
|
||||
|
||||
private SharedPreferences mPreferences;
|
||||
private PackageManager mPackageManager;
|
||||
|
||||
private HeaderAdapter mAdapter;
|
||||
|
||||
private int mCurrentThemeColor, mThemeBackgroundAlpha;
|
||||
private boolean mCompactCards;
|
||||
|
||||
private String mTheme;
|
||||
private String mThemeFontFamily;
|
||||
private String mThemeBackground;
|
||||
|
||||
private boolean mShouldNotifyChange;
|
||||
|
||||
public static void setShouldNotifyChange(Activity activity) {
|
||||
if (!(activity instanceof SettingsActivity)) return;
|
||||
((SettingsActivity) activity).setShouldNotifyChange(true);
|
||||
}
|
||||
|
||||
private void setShouldNotifyChange(boolean notify) {
|
||||
mShouldNotifyChange = notify;
|
||||
public HeaderAdapter getHeaderAdapter() {
|
||||
if (mAdapter != null) return mAdapter;
|
||||
return mAdapter = new HeaderAdapter(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
if (shouldNotifyThemeChange()) {
|
||||
final Intent data = new Intent();
|
||||
data.putExtra(EXTRA_RESTART_ACTIVITY, true);
|
||||
setResult(RESULT_OK, data);
|
||||
public int getThemeColor() {
|
||||
return ThemeUtils.getUserAccentColor(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getThemeResourceId() {
|
||||
return ThemeUtils.getThemeResource(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBuildHeaders(final List<Header> target) {
|
||||
loadHeadersFromResource(R.xml.settings_headers, target);
|
||||
final HeaderAdapter adapter = getHeaderAdapter();
|
||||
adapter.clear();
|
||||
adapter.addAll(target);
|
||||
final ComponentName main = new ComponentName(this, MainActivity.class);
|
||||
final PackageManager pm = getPackageManager();
|
||||
if (pm.getComponentEnabledSetting(main) == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
|
||||
final Header restoreIconHeader = new Header();
|
||||
restoreIconHeader.titleRes = R.string.want_old_icon_back;
|
||||
restoreIconHeader.title = getString(restoreIconHeader.titleRes);
|
||||
restoreIconHeader.id = HEADER_ID_RESTORE_ICON;
|
||||
restoreIconHeader.intent = getIntent();
|
||||
adapter.add(restoreIconHeader);
|
||||
}
|
||||
super.finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isValidFragment(final String fragmentName) {
|
||||
final Class<?> cls;
|
||||
try {
|
||||
cls = Class.forName(fragmentName);
|
||||
} catch (final ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
return Fragment.class.isAssignableFrom(cls);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode == RESULT_OK && data != null && data.getBooleanExtra(EXTRA_CHANGED, false)) {
|
||||
setShouldNotifyChange(true);
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHeaderClick(@NonNull final Header header, final int position) {
|
||||
if (header.id == HEADER_ID_RESTORE_ICON) {
|
||||
final ComponentName main = new ComponentName(this, MainActivity.class);
|
||||
final ComponentName main2 = new ComponentName(this, MainHondaJOJOActivity.class);
|
||||
final PackageManager pm = getPackageManager();
|
||||
pm.setComponentEnabledSetting(main, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
pm.setComponentEnabledSetting(main2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
Toast.makeText(this, R.string.icon_restored_message, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
super.onHeaderClick(header, position);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -110,34 +149,16 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
public HeaderAdapter getHeaderAdapter() {
|
||||
if (mAdapter != null) return mAdapter;
|
||||
return mAdapter = new HeaderAdapter(this);
|
||||
@Override
|
||||
public void switchToHeader(final String fragmentName, final Bundle args) {
|
||||
if (fragmentName == null) return;
|
||||
super.switchToHeader(fragmentName, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode == RESULT_OK && data != null && data.getBooleanExtra(EXTRA_RESTART_ACTIVITY, false)) {
|
||||
setShouldNotifyChange(true);
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBuildHeaders(final List<Header> target) {
|
||||
loadHeadersFromResource(R.xml.settings_headers, target);
|
||||
final HeaderAdapter adapter = getHeaderAdapter();
|
||||
adapter.clear();
|
||||
adapter.addAll(target);
|
||||
final ComponentName main = new ComponentName(this, MainActivity.class);
|
||||
if (mPackageManager.getComponentEnabledSetting(main) == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
|
||||
final Header restoreIconHeader = new Header();
|
||||
restoreIconHeader.titleRes = R.string.want_old_icon_back;
|
||||
restoreIconHeader.title = getString(restoreIconHeader.titleRes);
|
||||
restoreIconHeader.id = HEADER_ID_RESTORE_ICON;
|
||||
restoreIconHeader.intent = getIntent();
|
||||
adapter.add(restoreIconHeader);
|
||||
}
|
||||
public void switchToHeader(@NonNull final Header header) {
|
||||
if (header.fragment == null && header.intent == null) return;
|
||||
super.switchToHeader(header);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -147,22 +168,6 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHeaderClick(@NonNull final Header header, final int position) {
|
||||
if (header.id == HEADER_ID_RESTORE_ICON) {
|
||||
final ComponentName main = new ComponentName(this, MainActivity.class);
|
||||
final ComponentName main2 = new ComponentName(this, MainHondaJOJOActivity.class);
|
||||
mPackageManager.setComponentEnabledSetting(main, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
mPackageManager.setComponentEnabledSetting(main2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
Toast.makeText(this, R.string.icon_restored_message, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
super.onHeaderClick(header, position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
@ -184,6 +189,16 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
if (shouldNotifyChange()) {
|
||||
final Intent data = new Intent();
|
||||
data.putExtra(EXTRA_CHANGED, true);
|
||||
setResult(RESULT_OK, data);
|
||||
}
|
||||
super.finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setListAdapter(final ListAdapter adapter) {
|
||||
if (adapter == null) {
|
||||
@ -193,42 +208,17 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void switchToHeader(@NonNull final Header header) {
|
||||
if (header.fragment == null && header.intent == null) return;
|
||||
super.switchToHeader(header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void switchToHeader(final String fragmentName, final Bundle args) {
|
||||
if (fragmentName == null) return;
|
||||
super.switchToHeader(fragmentName, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isValidFragment(final String fragmentName) {
|
||||
final Class<?> cls;
|
||||
try {
|
||||
cls = Class.forName(fragmentName);
|
||||
} catch (final ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
return Fragment.class.isAssignableFrom(cls);
|
||||
public static void setShouldNotifyChange(Activity activity) {
|
||||
if (!(activity instanceof SettingsActivity)) return;
|
||||
((SettingsActivity) activity).setShouldNotifyChange(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
mPackageManager = getPackageManager();
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE);
|
||||
mCompactCards = mPreferences.getBoolean(KEY_COMPACT_CARDS, false);
|
||||
mTheme = mPreferences.getString(KEY_THEME, DEFAULT_THEME);
|
||||
mThemeBackground = mPreferences.getString(KEY_THEME_BACKGROUND, DEFAULT_THEME_BACKGROUND);
|
||||
mThemeBackgroundAlpha = mPreferences.getInt(KEY_THEME_BACKGROUND_ALPHA, DEFAULT_THEME_BACKGROUND_ALPHA);
|
||||
mThemeFontFamily = mPreferences.getString(KEY_THEME_FONT_FAMILY, DEFAULT_THEME_FONT_FAMILY);
|
||||
mCurrentThemeColor = ThemeUtils.getUserAccentColor(this);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
super.onCreate(savedInstanceState);
|
||||
setIntent(getIntent().addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
|
||||
final ActionBar actionBar = getActionBar();
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
@ -255,14 +245,12 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean shouldNotifyThemeChange() {
|
||||
if (mShouldNotifyChange) return true;
|
||||
return !CompareUtils.objectEquals(mTheme, mPreferences.getString(KEY_THEME, DEFAULT_THEME))
|
||||
|| !CompareUtils.objectEquals(mThemeFontFamily, mPreferences.getString(KEY_THEME_FONT_FAMILY, DEFAULT_THEME_FONT_FAMILY))
|
||||
|| !CompareUtils.objectEquals(mThemeBackground, mPreferences.getString(KEY_THEME_BACKGROUND, DEFAULT_THEME_BACKGROUND))
|
||||
|| mCurrentThemeColor != ThemeUtils.getUserAccentColor(this)
|
||||
|| mThemeBackgroundAlpha != mPreferences.getInt(KEY_THEME_BACKGROUND_ALPHA, DEFAULT_THEME_BACKGROUND_ALPHA)
|
||||
|| mCompactCards != mPreferences.getBoolean(KEY_COMPACT_CARDS, false);
|
||||
private void setShouldNotifyChange(boolean notify) {
|
||||
mShouldNotifyChange = notify;
|
||||
}
|
||||
|
||||
private boolean shouldNotifyChange() {
|
||||
return mShouldNotifyChange;
|
||||
}
|
||||
|
||||
private static class HeaderAdapter extends BaseAdapter {
|
||||
@ -295,49 +283,11 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areAllItemsEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataSetChanged() {
|
||||
updateCategoriesInfo();
|
||||
super.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void updateCategoriesInfo() {
|
||||
mFirstItemIsCategory = !mHeaders.isEmpty()
|
||||
&& getHeaderType(mHeaders.get(0)) == HEADER_TYPE_CATEGORY;
|
||||
mCategoriesCount = getCategoriesCount(0, mHeaders.size());
|
||||
}
|
||||
|
||||
private int getCategoriesCount(final int start, final int end) {
|
||||
int categoriesCount = 0;
|
||||
for (int i = start; i < end; i++) {
|
||||
if (getHeaderType(mHeaders.get(i)) == HEADER_TYPE_CATEGORY) {
|
||||
categoriesCount++;
|
||||
}
|
||||
}
|
||||
return categoriesCount;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
mHeaders.clear();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getViewTypeCount() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(final int position) {
|
||||
final Header header = getItem(position);
|
||||
return getHeaderType(header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mHeaders.size() + mCategoriesCount + (mFirstItemIsCategory ? 0 : 1);
|
||||
@ -386,6 +336,33 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataSetChanged() {
|
||||
updateCategoriesInfo();
|
||||
super.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areAllItemsEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(final int position) {
|
||||
return getItemViewType(position) == HEADER_TYPE_NORMAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(final int position) {
|
||||
final Header header = getItem(position);
|
||||
return getHeaderType(header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getViewTypeCount() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
private void bindCategoryHeader(View view, int position, Header header) {
|
||||
final TextView title = (TextView) view.findViewById(android.R.id.title);
|
||||
if (!TextUtils.isEmpty(header.title)) {
|
||||
@ -428,6 +405,26 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private int getCategoriesCount(final int start, final int end) {
|
||||
int categoriesCount = 0;
|
||||
for (int i = start; i < end; i++) {
|
||||
if (getHeaderType(mHeaders.get(i)) == HEADER_TYPE_CATEGORY) {
|
||||
categoriesCount++;
|
||||
}
|
||||
}
|
||||
return categoriesCount;
|
||||
}
|
||||
|
||||
private static int getHeaderType(final Header header) {
|
||||
if (header.fragment != null || header.intent != null)
|
||||
return HEADER_TYPE_NORMAL;
|
||||
else if (header.title != null || header.titleRes != 0)
|
||||
return HEADER_TYPE_CATEGORY;
|
||||
else
|
||||
return HEADER_TYPE_SPACE;
|
||||
|
||||
}
|
||||
|
||||
private View inflateItemView(int viewType, ViewGroup parent) {
|
||||
final int layoutRes;
|
||||
switch (viewType) {
|
||||
@ -447,19 +444,10 @@ public class SettingsActivity extends BasePreferenceActivity {
|
||||
return mInflater.inflate(layoutRes, parent, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(final int position) {
|
||||
return getItemViewType(position) == HEADER_TYPE_NORMAL;
|
||||
}
|
||||
|
||||
private static int getHeaderType(final Header header) {
|
||||
if (header.fragment != null || header.intent != null)
|
||||
return HEADER_TYPE_NORMAL;
|
||||
else if (header.title != null || header.titleRes != 0)
|
||||
return HEADER_TYPE_CATEGORY;
|
||||
else
|
||||
return HEADER_TYPE_SPACE;
|
||||
|
||||
private void updateCategoriesInfo() {
|
||||
mFirstItemIsCategory = !mHeaders.isEmpty()
|
||||
&& getHeaderType(mHeaders.get(0)) == HEADER_TYPE_CATEGORY;
|
||||
mCategoriesCount = getCategoriesCount(0, mHeaders.size());
|
||||
}
|
||||
|
||||
private static class HeaderViewHolder extends ViewListHolder {
|
||||
|
@ -34,6 +34,7 @@ import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.LayoutInflater;
|
||||
@ -49,6 +50,7 @@ import org.mariotaku.twidere.adapter.TabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.BaseDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFragment;
|
||||
import org.mariotaku.twidere.fragment.BasePreferenceFragment;
|
||||
import org.mariotaku.twidere.fragment.CustomTabsFragment;
|
||||
import org.mariotaku.twidere.fragment.ProgressDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DirectMessagesFragment;
|
||||
import org.mariotaku.twidere.fragment.support.HomeTimelineFragment;
|
||||
@ -370,7 +372,10 @@ public class SettingsWizardActivity extends Activity implements Constants {
|
||||
public boolean onPreferenceClick(final Preference preference) {
|
||||
final String key = preference.getKey();
|
||||
if (WIZARD_PREFERENCE_KEY_EDIT_CUSTOM_TABS.equals(key)) {
|
||||
startActivityForResult(new Intent(getActivity(), CustomTabsActivity.class), REQUEST_CUSTOM_TABS);
|
||||
final Intent intent = new Intent(getActivity(), SettingsActivity.class);
|
||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, CustomTabsFragment.class.getName());
|
||||
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE, R.string.tabs);
|
||||
startActivityForResult(intent, REQUEST_CUSTOM_TABS);
|
||||
} else if (WIZARD_PREFERENCE_KEY_USE_DEFAULTS.equals(key)) {
|
||||
applyInitialTabSettings();
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ import org.mariotaku.twidere.view.iface.IExtendedView.OnFitSystemWindowsListener
|
||||
import java.util.ArrayList;
|
||||
|
||||
@SuppressLint("Registered")
|
||||
public class BaseActionBarActivity extends ThemedActionBarActivity implements Constants,
|
||||
public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Constants,
|
||||
OnFitSystemWindowsListener, SystemWindowsInsetsCallback, IControlBarActivity,
|
||||
KeyboardShortcutCallback {
|
||||
|
@ -37,7 +37,7 @@ import org.mariotaku.twidere.view.TintedStatusFrameLayout;
|
||||
/**
|
||||
* Created by mariotaku on 15/4/17.
|
||||
*/
|
||||
public class BaseDialogWhenLargeActivity extends BaseActionBarActivity {
|
||||
public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
||||
|
||||
private TintedStatusFrameLayout mMainContent;
|
||||
|
||||
|
@ -32,7 +32,7 @@ import android.widget.Toast;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.fragment.BaseWebViewFragment;
|
||||
|
||||
public class BrowserActivity extends BaseActionBarActivity {
|
||||
public class BrowserActivity extends BaseAppCompatActivity {
|
||||
|
||||
private Uri mUri = Uri.parse("about:blank");
|
||||
|
||||
|
@ -19,7 +19,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
public class DataExportActivity extends BaseActionBarActivity implements FileSelectorDialogFragment.Callback,
|
||||
public class DataExportActivity extends BaseAppCompatActivity implements FileSelectorDialogFragment.Callback,
|
||||
DataExportImportTypeSelectorDialogFragment.Callback {
|
||||
|
||||
private ExportSettingsTask mTask;
|
||||
|
@ -17,7 +17,7 @@ import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class DataImportActivity extends BaseActionBarActivity implements FileSelectorDialogFragment.Callback,
|
||||
public class DataImportActivity extends BaseAppCompatActivity implements FileSelectorDialogFragment.Callback,
|
||||
DataExportImportTypeSelectorDialogFragment.Callback {
|
||||
|
||||
private ImportSettingsTask mImportSettingsTask;
|
||||
|
@ -86,7 +86,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Mentions;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
import org.mariotaku.twidere.util.AsyncTaskUtils;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.CustomTabUtils;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
@ -129,7 +129,7 @@ import static org.mariotaku.twidere.util.Utils.openMessageConversation;
|
||||
import static org.mariotaku.twidere.util.Utils.openSearch;
|
||||
import static org.mariotaku.twidere.util.Utils.showMenuItemToast;
|
||||
|
||||
public class HomeActivity extends BaseActionBarActivity implements OnClickListener, OnPageChangeListener,
|
||||
public class HomeActivity extends BaseAppCompatActivity implements OnClickListener, OnPageChangeListener,
|
||||
SupportFragmentCallback, OnOpenedListener, OnClosedListener, OnLongClickListener {
|
||||
|
||||
private final Handler mHandler = new Handler();
|
||||
@ -818,7 +818,7 @@ public class HomeActivity extends BaseActionBarActivity implements OnClickListen
|
||||
mColorStatusFrameLayout.setColor(getResources().getColor(R.color.background_color_action_bar_dark), actionBarAlpha);
|
||||
mColorStatusFrameLayout.setFactor(1);
|
||||
} else {
|
||||
final int contrastColor = ColorUtils.getContrastYIQ(themeColor, 192);
|
||||
final int contrastColor = TwidereColorUtils.getContrastYIQ(themeColor, 192);
|
||||
homeActionButton.setButtonColor(themeColor);
|
||||
homeActionButton.setIconColor(contrastColor, Mode.SRC_ATOP);
|
||||
mTabIndicator.setStripColor(contrastColor);
|
||||
|
@ -36,7 +36,7 @@ import java.io.OutputStream;
|
||||
|
||||
import static android.os.Environment.getExternalStorageState;
|
||||
|
||||
public class ImagePickerActivity extends ThemedActionBarActivity {
|
||||
public class ImagePickerActivity extends ThemedAppCompatActivity {
|
||||
|
||||
public static final int REQUEST_PICK_IMAGE = 101;
|
||||
public static final int REQUEST_TAKE_PHOTO = 102;
|
||||
|
@ -62,7 +62,7 @@ import org.mariotaku.twidere.view.TintedStatusFrameLayout;
|
||||
import static org.mariotaku.twidere.util.Utils.createFragmentForIntent;
|
||||
import static org.mariotaku.twidere.util.Utils.matchLinkId;
|
||||
|
||||
public class LinkHandlerActivity extends BaseActionBarActivity implements SystemWindowsInsetsCallback,
|
||||
public class LinkHandlerActivity extends BaseAppCompatActivity implements SystemWindowsInsetsCallback,
|
||||
IControlBarActivity, SupportFragmentCallback {
|
||||
|
||||
private ControlBarShowHideHelper mControlBarShowHideHelper = new ControlBarShowHideHelper(this);
|
||||
|
@ -86,7 +86,7 @@ import pl.droidsonroids.gif.GifTextureView;
|
||||
import pl.droidsonroids.gif.InputSource.FileSource;
|
||||
|
||||
|
||||
public final class MediaViewerActivity extends ThemedActionBarActivity implements Constants, OnPageChangeListener {
|
||||
public final class MediaViewerActivity extends ThemedAppCompatActivity implements Constants, OnPageChangeListener {
|
||||
|
||||
private static final String EXTRA_LOOP = "loop";
|
||||
|
||||
|
@ -38,6 +38,7 @@ import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.text.Editable;
|
||||
@ -68,7 +69,6 @@ import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.WrongUserPassExcept
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.net.OkHttpClientFactory;
|
||||
import org.mariotaku.twidere.util.net.TwidereHostResolverFactory;
|
||||
|
||||
@ -92,7 +92,7 @@ import static org.mariotaku.twidere.util.Utils.isUserLoggedIn;
|
||||
import static org.mariotaku.twidere.util.Utils.showErrorMessage;
|
||||
import static org.mariotaku.twidere.util.Utils.trim;
|
||||
|
||||
public class SignInActivity extends BaseActionBarActivity implements TwitterConstants, OnClickListener,
|
||||
public class SignInActivity extends BaseAppCompatActivity implements TwitterConstants, OnClickListener,
|
||||
TextWatcher {
|
||||
|
||||
private static final String TWITTER_SIGNUP_URL = "https://twitter.com/signup";
|
||||
@ -148,7 +148,7 @@ public class SignInActivity extends BaseActionBarActivity implements TwitterCons
|
||||
break;
|
||||
}
|
||||
case REQUEST_BROWSER_SIGN_IN: {
|
||||
if (resultCode == BaseActionBarActivity.RESULT_OK && data != null) {
|
||||
if (resultCode == BaseAppCompatActivity.RESULT_OK && data != null) {
|
||||
doLogin(data);
|
||||
}
|
||||
break;
|
||||
@ -329,7 +329,7 @@ public class SignInActivity extends BaseActionBarActivity implements TwitterCons
|
||||
mEditPassword.addTextChangedListener(this);
|
||||
final Resources resources = getResources();
|
||||
final ColorStateList color = ColorStateList.valueOf(resources.getColor(R.color.material_light_green));
|
||||
ViewUtils.setBackgroundTintList(mSignInButton, color);
|
||||
ViewCompat.setBackgroundTintList(mSignInButton, color);
|
||||
setSignInButton();
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ package org.mariotaku.twidere.activity.support;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
@ -34,9 +34,7 @@ import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.ShapedImageView;
|
||||
import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.restartActivity;
|
||||
|
||||
public abstract class ThemedActionBarActivity extends ActionBarActivity implements Constants, IThemedActivity {
|
||||
public abstract class ThemedAppCompatActivity extends AppCompatActivity implements Constants, IThemedActivity {
|
||||
|
||||
private int mCurrentThemeResource, mCurrentThemeColor, mCurrentThemeBackgroundAlpha;
|
||||
@ShapeStyle
|
||||
@ -80,7 +78,7 @@ public abstract class ThemedActionBarActivity extends ActionBarActivity implemen
|
||||
|
||||
@Override
|
||||
public final void restart() {
|
||||
restartActivity(this);
|
||||
Utils.restartActivity(this);
|
||||
}
|
||||
|
||||
@Override
|
@ -37,8 +37,6 @@ import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.ShapedImageView;
|
||||
import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.restartActivity;
|
||||
|
||||
public abstract class ThemedFragmentActivity extends FragmentActivity implements Constants, IThemedActivity {
|
||||
|
||||
private int mCurrentThemeResource, mCurrentThemeColor, mCurrentThemeBackgroundAlpha;
|
||||
@ -83,7 +81,7 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements
|
||||
|
||||
@Override
|
||||
public final void restart() {
|
||||
restartActivity(this);
|
||||
Utils.restartActivity(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -27,7 +27,7 @@ import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.activity.support.BaseActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
@ -76,7 +76,7 @@ public class BaseFragment extends Fragment implements Constants {
|
||||
|
||||
public void setProgressBarIndeterminateVisibility(final boolean visible) {
|
||||
final Activity activity = getActivity();
|
||||
if (activity instanceof BaseActionBarActivity) {
|
||||
if (activity instanceof BaseAppCompatActivity) {
|
||||
activity.setProgressBarIndeterminateVisibility(visible);
|
||||
}
|
||||
}
|
||||
|
@ -39,11 +39,11 @@ import android.view.ViewGroup;
|
||||
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.support.BaseActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
|
||||
import org.mariotaku.twidere.adapter.iface.IContentCardAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.ContentListScrollListener;
|
||||
import org.mariotaku.twidere.util.ContentListScrollListener.ContentListSupport;
|
||||
import org.mariotaku.twidere.util.SimpleDrawerCallback;
|
||||
@ -115,8 +115,8 @@ public abstract class AbsContentListFragment<A extends IContentCardAdapter> exte
|
||||
@Override
|
||||
public void setControlVisible(boolean visible) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof BaseActionBarActivity) {
|
||||
((BaseActionBarActivity) activity).setControlBarVisibleAnimate(visible);
|
||||
if (activity instanceof BaseAppCompatActivity) {
|
||||
((BaseAppCompatActivity) activity).setControlBarVisibleAnimate(visible);
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,7 +185,7 @@ public abstract class AbsContentListFragment<A extends IContentCardAdapter> exte
|
||||
final Context context = view.getContext();
|
||||
final boolean compact = Utils.isCompactCards(context);
|
||||
final int backgroundColor = ThemeUtils.getThemeBackgroundColor(context);
|
||||
final int colorRes = ColorUtils.getContrastYIQ(backgroundColor,
|
||||
final int colorRes = TwidereColorUtils.getContrastYIQ(backgroundColor,
|
||||
R.color.bg_refresh_progress_color_light, R.color.bg_refresh_progress_color_dark);
|
||||
mSwipeRefreshLayout.setOnRefreshListener(this);
|
||||
mSwipeRefreshLayout.setColorSchemeColors(ThemeUtils.getUserAccentColor(context));
|
||||
|
@ -31,6 +31,7 @@ import org.mariotaku.twidere.loader.iface.IExtendedLoader;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ContentListScrollListener;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
import org.mariotaku.twidere.util.ReadStateManager;
|
||||
@ -346,12 +347,16 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListFragment<A
|
||||
mReadStateManager = getReadStateManager();
|
||||
final FragmentActivity activity = getActivity();
|
||||
final TwidereApplication application = TwidereApplication.getInstance(activity);
|
||||
mKeyboardShortcutsHandler = application.getKeyboardShortcutsHandler();
|
||||
final AbsStatusesAdapter<Data> adapter = getAdapter();
|
||||
final RecyclerView recyclerView = getRecyclerView();
|
||||
final LinearLayoutManager layoutManager = getLayoutManager();
|
||||
final ContentListScrollListener scrollListener = getScrollListener();
|
||||
mKeyboardShortcutsHandler = application.getKeyboardShortcutsHandler();
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(mKeyboardShortcutsHandler,
|
||||
recyclerView, layoutManager, adapter);
|
||||
|
||||
adapter.setListener(this);
|
||||
getScrollListener().setOnScrollListener(new OnScrollListener() {
|
||||
scrollListener.setOnScrollListener(new OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
@ -359,7 +364,6 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListFragment<A
|
||||
}
|
||||
}
|
||||
});
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(mKeyboardShortcutsHandler, recyclerView, layoutManager, adapter);
|
||||
|
||||
final Bundle loaderArgs = new Bundle(getArguments());
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true);
|
||||
|
@ -97,6 +97,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
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.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TransitionUtils;
|
||||
@ -178,7 +179,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
||||
}
|
||||
}
|
||||
final ListView listView = getListView();
|
||||
int firstVisiblePosition = listView.getFirstVisiblePosition();
|
||||
final int firstVisiblePosition = ListViewUtils.getFirstFullyVisiblePosition(listView);
|
||||
final int selectedItem = listView.getSelectedItemPosition();
|
||||
final int count = listView.getCount();
|
||||
int resultPosition;
|
||||
@ -206,7 +207,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
||||
case REQUEST_SETTINGS: {
|
||||
if (data == null) return;
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (data.getBooleanExtra(EXTRA_RESTART_ACTIVITY, false) && activity instanceof IThemedActivity) {
|
||||
if (data.getBooleanExtra(EXTRA_CHANGED, false) && activity instanceof IThemedActivity) {
|
||||
((IThemedActivity) activity).restart();
|
||||
}
|
||||
return;
|
||||
|
@ -32,7 +32,7 @@ import android.support.v4.app.FragmentActivity;
|
||||
import android.view.View;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.activity.support.BaseActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
@ -102,7 +102,7 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
|
||||
|
||||
public void setProgressBarIndeterminateVisibility(final boolean visible) {
|
||||
final Activity activity = getActivity();
|
||||
if (activity instanceof BaseActionBarActivity) {
|
||||
if (activity instanceof BaseAppCompatActivity) {
|
||||
activity.setProgressBarIndeterminateVisibility(visible);
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ import org.mariotaku.querybuilder.RawItemArray;
|
||||
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.support.BaseActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.DirectMessageEntry;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.MessageEntriesAdapterListener;
|
||||
@ -134,8 +134,8 @@ public class DirectMessagesFragment extends BaseSupportFragment implements Loade
|
||||
@Override
|
||||
public void setControlVisible(boolean visible) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof BaseActionBarActivity) {
|
||||
((BaseActionBarActivity) activity).setControlBarVisibleAnimate(visible);
|
||||
if (activity instanceof BaseAppCompatActivity) {
|
||||
((BaseAppCompatActivity) activity).setControlBarVisibleAnimate(visible);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ import org.mariotaku.querybuilder.Expression;
|
||||
import org.mariotaku.querybuilder.OrderBy;
|
||||
import org.mariotaku.querybuilder.RawItemArray;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.BaseActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.support.ImagePickerActivity;
|
||||
import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter;
|
||||
import org.mariotaku.twidere.adapter.MessageConversationAdapter;
|
||||
@ -195,7 +195,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
final BaseActionBarActivity activity = (BaseActionBarActivity) getActivity();
|
||||
final BaseAppCompatActivity activity = (BaseAppCompatActivity) getActivity();
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
mMessageDrafts = getSharedPreferences(MESSAGE_DRAFTS_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
mImageLoader = TwidereApplication.getInstance(activity).getMediaLoaderWrapper();
|
||||
@ -681,7 +681,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
||||
}
|
||||
|
||||
private void updateActionBar() {
|
||||
final BaseActionBarActivity activity = (BaseActionBarActivity) getActivity();
|
||||
final BaseAppCompatActivity activity = (BaseAppCompatActivity) getActivity();
|
||||
final ActionBar actionBar = activity.getSupportActionBar();
|
||||
if (actionBar == null) return;
|
||||
actionBar.setDisplayOptions(mRecipient != null ? ActionBar.DISPLAY_SHOW_TITLE : ActionBar.DISPLAY_SHOW_CUSTOM,
|
||||
|
@ -92,6 +92,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
||||
|
||||
view.findViewById(R.id.item_menu).setVisibility(View.GONE);
|
||||
view.findViewById(R.id.action_buttons).setVisibility(View.GONE);
|
||||
view.findViewById(R.id.item_content).setFocusable(false);
|
||||
|
||||
return builder.create();
|
||||
}
|
||||
|
@ -27,10 +27,12 @@ import android.content.Intent;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.provider.SearchRecentSuggestions;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v4.view.ViewPager.OnPageChangeListener;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@ -44,6 +46,7 @@ import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarOffset
|
||||
import org.mariotaku.twidere.activity.support.ComposeActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
@ -51,13 +54,15 @@ import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.provider.RecentSearchProvider;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.SearchHistory;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.TabPagerIndicator;
|
||||
|
||||
public class SearchFragment extends BaseSupportFragment implements RefreshScrollTopInterface,
|
||||
SupportFragmentCallback, SystemWindowsInsetsCallback, ControlBarOffsetListener,
|
||||
OnPageChangeListener {
|
||||
OnPageChangeListener, KeyboardShortcutCallback {
|
||||
|
||||
private ViewPager mViewPager;
|
||||
private View mPagerWindowOverlay;
|
||||
@ -65,9 +70,75 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
private SupportTabsAdapter mPagerAdapter;
|
||||
private TabPagerIndicator mPagerIndicator;
|
||||
|
||||
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
|
||||
|
||||
private int mControlBarOffsetPixels;
|
||||
private int mControlBarHeight;
|
||||
|
||||
public long getAccountId() {
|
||||
return getArguments().getLong(EXTRA_ACCOUNT_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
final int currentItem = mViewPager.getCurrentItem();
|
||||
if (currentItem < 0 || currentItem >= mPagerAdapter.getCount()) return null;
|
||||
return (Fragment) mPagerAdapter.instantiateItem(mViewPager, currentItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh(final int position) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
return getArguments().getString(EXTRA_QUERY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getSystemWindowsInsets(Rect insets) {
|
||||
if (mPagerIndicator == null) return false;
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
((LinkHandlerActivity) activity).getSystemWindowsInsets(insets);
|
||||
insets.top = mPagerIndicator.getHeight() + getControlBarHeight();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(int keyCode, @NonNull KeyEvent event) {
|
||||
if (handleFragmentKeyboardShortcutSingle(keyCode, event)) return true;
|
||||
final String action = mKeyboardShortcutsHandler.getKeyAction("navigation", keyCode, event);
|
||||
if (action != null) {
|
||||
switch (action) {
|
||||
case "navigation.previous_tab": {
|
||||
final int previous = mViewPager.getCurrentItem() - 1;
|
||||
if (previous >= 0 && previous < mPagerAdapter.getCount()) {
|
||||
mViewPager.setCurrentItem(previous, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
case "navigation.next_tab": {
|
||||
final int next = mViewPager.getCurrentItem() + 1;
|
||||
if (next >= 0 && next < mPagerAdapter.getCount()) {
|
||||
mViewPager.setCurrentItem(next, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return mKeyboardShortcutsHandler.handleKey(getActivity(), null, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return handleFragmentKeyboardShortcutRepeat(keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
public void hideIndicator() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
@ -78,86 +149,8 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof IControlBarActivity) {
|
||||
((IControlBarActivity) activity).unregisterControlBarOffsetListener(this);
|
||||
}
|
||||
super.onDetach();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onControlBarOffsetChanged(IControlBarActivity activity, float offset) {
|
||||
mControlBarHeight = activity.getControlBarHeight();
|
||||
mControlBarOffsetPixels = Math.round(mControlBarHeight * (1 - offset));
|
||||
updateTabOffset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
((LinkHandlerActivity) activity).setControlBarVisibleAnimate(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTabOffset() {
|
||||
final int controlBarHeight = getControlBarHeight();
|
||||
final int translationY = controlBarHeight - mControlBarOffsetPixels;
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
final View view = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (view != null && controlBarHeight != 0) {
|
||||
view.setAlpha(translationY / (float) controlBarHeight);
|
||||
}
|
||||
}
|
||||
mPagerIndicator.setTranslationY(translationY);
|
||||
mPagerWindowOverlay.setTranslationY(translationY);
|
||||
}
|
||||
|
||||
private int getControlBarHeight() {
|
||||
final FragmentActivity activity = getActivity();
|
||||
final int controlBarHeight;
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
controlBarHeight = ((LinkHandlerActivity) activity).getControlBarHeight();
|
||||
} else {
|
||||
controlBarHeight = mControlBarHeight;
|
||||
}
|
||||
if (controlBarHeight == 0) {
|
||||
return Utils.getActionBarHeight(activity);
|
||||
}
|
||||
return controlBarHeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
super.fitSystemWindows(insets);
|
||||
final View view = getView();
|
||||
if (view != null) {
|
||||
final int top = Utils.getInsetsTopWithoutActionBarHeight(getActivity(), insets.top);
|
||||
view.setPadding(insets.left, top, insets.right, insets.bottom);
|
||||
}
|
||||
updateTabOffset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
final int currentItem = mViewPager.getCurrentItem();
|
||||
if (currentItem < 0 || currentItem >= mPagerAdapter.getCount()) return null;
|
||||
return (Fragment) mPagerAdapter.instantiateItem(mViewPager, currentItem);
|
||||
}
|
||||
|
||||
public void hideIndicator() {
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_content_pages, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -166,6 +159,8 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
setHasOptionsMenu(true);
|
||||
final Bundle args = getArguments();
|
||||
final FragmentActivity activity = getActivity();
|
||||
final TwidereApplication app = TwidereApplication.getInstance(activity);
|
||||
mKeyboardShortcutsHandler = app.getKeyboardShortcutsHandler();
|
||||
mPagerAdapter = new SupportTabsAdapter(activity, getChildFragmentManager(), null, 1);
|
||||
mPagerAdapter.addTab(StatusesSearchFragment.class, args, getString(R.string.statuses), R.drawable.ic_action_twitter, 0, null);
|
||||
mPagerAdapter.addTab(SearchUsersFragment.class, args, getString(R.string.users), R.drawable.ic_action_user, 1, null);
|
||||
@ -195,12 +190,13 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
updateTabOffset();
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
return getArguments().getString(EXTRA_QUERY);
|
||||
}
|
||||
|
||||
public long getAccountId() {
|
||||
return getArguments().getLong(EXTRA_ACCOUNT_ID);
|
||||
@Override
|
||||
public void onDetach() {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof IControlBarActivity) {
|
||||
((IControlBarActivity) activity).unregisterControlBarOffsetListener(this);
|
||||
}
|
||||
super.onDetach();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -209,8 +205,9 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_content_pages, container, false);
|
||||
public void onPrepareOptionsMenu(Menu menu) {
|
||||
final MenuItem item = menu.findItem(MENU_COMPOSE);
|
||||
item.setTitle(getString(R.string.tweet_hashtag, getQuery()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -236,12 +233,6 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareOptionsMenu(Menu menu) {
|
||||
final MenuItem item = menu.findItem(MENU_COMPOSE);
|
||||
item.setTitle(getString(R.string.tweet_hashtag, getQuery()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBaseViewCreated(final View view, final Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
@ -250,6 +241,42 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
mPagerIndicator = (TabPagerIndicator) view.findViewById(R.id.view_pager_tabs);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
super.fitSystemWindows(insets);
|
||||
final View view = getView();
|
||||
if (view != null) {
|
||||
final int top = Utils.getInsetsTopWithoutActionBarHeight(getActivity(), insets.top);
|
||||
view.setPadding(insets.left, top, insets.right, insets.bottom);
|
||||
}
|
||||
updateTabOffset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onControlBarOffsetChanged(IControlBarActivity activity, float offset) {
|
||||
mControlBarHeight = activity.getControlBarHeight();
|
||||
mControlBarOffsetPixels = Math.round(mControlBarHeight * (1 - offset));
|
||||
updateTabOffset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
((LinkHandlerActivity) activity).setControlBarVisibleAnimate(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollToStart() {
|
||||
final Fragment fragment = getCurrentVisibleFragment();
|
||||
@ -266,20 +293,51 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh(final int position) {
|
||||
return false;
|
||||
private int getControlBarHeight() {
|
||||
final FragmentActivity activity = getActivity();
|
||||
final int controlBarHeight;
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
controlBarHeight = ((LinkHandlerActivity) activity).getControlBarHeight();
|
||||
} else {
|
||||
controlBarHeight = mControlBarHeight;
|
||||
}
|
||||
if (controlBarHeight == 0) {
|
||||
return Utils.getActionBarHeight(activity);
|
||||
}
|
||||
return controlBarHeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getSystemWindowsInsets(Rect insets) {
|
||||
if (mPagerIndicator == null) return false;
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
((LinkHandlerActivity) activity).getSystemWindowsInsets(insets);
|
||||
insets.top = mPagerIndicator.getHeight() + getControlBarHeight();
|
||||
return true;
|
||||
private Fragment getKeyboardShortcutRecipient() {
|
||||
return getCurrentVisibleFragment();
|
||||
}
|
||||
|
||||
private boolean handleFragmentKeyboardShortcutRepeat(int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
final Fragment fragment = getKeyboardShortcutRecipient();
|
||||
if (fragment instanceof KeyboardShortcutCallback) {
|
||||
return ((KeyboardShortcutCallback) fragment).handleKeyboardShortcutRepeat(keyCode, repeatCount, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean handleFragmentKeyboardShortcutSingle(int keyCode, @NonNull KeyEvent event) {
|
||||
final Fragment fragment = getKeyboardShortcutRecipient();
|
||||
if (fragment instanceof KeyboardShortcutCallback) {
|
||||
return ((KeyboardShortcutCallback) fragment).handleKeyboardShortcutSingle(keyCode, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void updateTabOffset() {
|
||||
final int controlBarHeight = getControlBarHeight();
|
||||
final int translationY = controlBarHeight - mControlBarOffsetPixels;
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity instanceof LinkHandlerActivity) {
|
||||
final View view = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (view != null && controlBarHeight != 0) {
|
||||
view.setAlpha(translationY / (float) controlBarHeight);
|
||||
}
|
||||
}
|
||||
mPagerIndicator.setTranslationY(translationY);
|
||||
mPagerWindowOverlay.setTranslationY(translationY);
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ import android.text.style.URLSpan;
|
||||
import android.view.ActionMode;
|
||||
import android.view.ActionMode.Callback;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@ -96,10 +97,14 @@ import org.mariotaku.twidere.util.AsyncTaskUtils;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ClipboardUtils;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
import org.mariotaku.twidere.util.LinkCreator;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||
import org.mariotaku.twidere.util.MenuUtils;
|
||||
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
|
||||
import org.mariotaku.twidere.util.RecyclerViewUtils;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.StatusAdapterLinkClickHandler;
|
||||
import org.mariotaku.twidere.util.StatusLinkClickHandler;
|
||||
@ -144,22 +149,28 @@ import static org.mariotaku.twidere.util.Utils.showErrorMessage;
|
||||
* Created by mariotaku on 14/12/5.
|
||||
*/
|
||||
public class StatusFragment extends BaseSupportFragment implements LoaderCallbacks<SingleResponse<ParcelableStatus>>,
|
||||
OnMediaClickListener, StatusAdapterListener {
|
||||
OnMediaClickListener, StatusAdapterListener, KeyboardShortcutCallback {
|
||||
|
||||
private static final int LOADER_ID_DETAIL_STATUS = 1;
|
||||
private static final int LOADER_ID_STATUS_REPLIES = 2;
|
||||
private static final int STATE_LOADED = 1;
|
||||
private static final int STATE_LOADING = 2;
|
||||
private static final int STATE_ERROR = 3;
|
||||
private RecyclerView mRecyclerView;
|
||||
private StatusAdapter mStatusAdapter;
|
||||
private boolean mRepliesLoaderInitialized;
|
||||
private LoadConversationTask mLoadConversationTask;
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
|
||||
private View mStatusContent;
|
||||
private View mProgressContainer;
|
||||
private View mErrorContainer;
|
||||
|
||||
private DividerItemDecoration mItemDecoration;
|
||||
private RecyclerView mRecyclerView;
|
||||
private StatusAdapter mStatusAdapter;
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
|
||||
private LoadConversationTask mLoadConversationTask;
|
||||
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
|
||||
private RecyclerViewNavigationHelper mRecyclerViewNavigationHelper;
|
||||
|
||||
private boolean mRepliesLoaderInitialized;
|
||||
|
||||
private LoaderCallbacks<List<ParcelableStatus>> mRepliesLoaderCallback = new LoaderCallbacks<List<ParcelableStatus>>() {
|
||||
@Override
|
||||
@ -264,6 +275,12 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
mStatusAdapter.setEventListener(this);
|
||||
mRecyclerView.setAdapter(mStatusAdapter);
|
||||
|
||||
final FragmentActivity activity = getActivity();
|
||||
final TwidereApplication application = TwidereApplication.getInstance(activity);
|
||||
mKeyboardShortcutsHandler = application.getKeyboardShortcutsHandler();
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(mKeyboardShortcutsHandler,
|
||||
mRecyclerView, mLayoutManager, mStatusAdapter);
|
||||
|
||||
setState(STATE_LOADING);
|
||||
|
||||
getLoaderManager().initLoader(LOADER_ID_DETAIL_STATUS, getArguments(), this);
|
||||
@ -394,6 +411,52 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
//end
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(int keyCode, @NonNull KeyEvent event) {
|
||||
if (!KeyboardShortcutsHandler.isValidForHotkey(keyCode, event)) return false;
|
||||
final View focusedChild = RecyclerViewUtils.findRecyclerViewChild(mRecyclerView, mLayoutManager.getFocusedChild());
|
||||
final int position;
|
||||
if (focusedChild != null && focusedChild.getParent() == mRecyclerView) {
|
||||
position = mRecyclerView.getChildLayoutPosition(focusedChild);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if (position == -1) return false;
|
||||
final ParcelableStatus status = getAdapter().getStatus(position);
|
||||
if (status == null) return false;
|
||||
String action = mKeyboardShortcutsHandler.getKeyAction("status", keyCode, event);
|
||||
if (action == null) return false;
|
||||
switch (action) {
|
||||
case "status.reply": {
|
||||
final Intent intent = new Intent(INTENT_ACTION_REPLY);
|
||||
intent.putExtra(EXTRA_STATUS, status);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
case "status.retweet": {
|
||||
RetweetQuoteDialogFragment.show(getFragmentManager(), status);
|
||||
return true;
|
||||
}
|
||||
case "status.favorite": {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(status.account_id, status.id);
|
||||
} else {
|
||||
twitter.createFavoriteAsync(status.account_id, status.id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(final int keyCode, final int repeatCount,
|
||||
@NonNull final KeyEvent event) {
|
||||
return mRecyclerViewNavigationHelper.handleKeyboardShortcutRepeat(keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
|
||||
private void addConversation(ParcelableStatus status, int position) {
|
||||
mStatusAdapter.addConversation(status, position);
|
||||
}
|
||||
@ -720,7 +783,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
|
||||
|
||||
textView.setText(Html.fromHtml(status.text_html));
|
||||
linkify.applyAllLinks(textView, status.account_id, getAdapterPosition(), status.is_possibly_sensitive);
|
||||
linkify.applyAllLinks(textView, status.account_id, getLayoutPosition(), status.is_possibly_sensitive);
|
||||
ThemeUtils.applyParagraphSpacing(textView, 1.1f);
|
||||
|
||||
if (!TextUtils.isEmpty(status.place_full_name)) {
|
||||
@ -794,7 +857,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
final ParcelableStatus status = adapter.getStatus(getAdapterPosition());
|
||||
final ParcelableStatus status = adapter.getStatus(getLayoutPosition());
|
||||
final StatusFragment fragment = adapter.getFragment();
|
||||
switch (v.getId()) {
|
||||
case R.id.media_preview_load: {
|
||||
|
@ -89,7 +89,7 @@ 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.ThemedActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.ThemedAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserProfileEditorActivity;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
@ -109,7 +109,7 @@ import org.mariotaku.twidere.model.SupportTabSpec;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
@ -167,7 +167,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
||||
private static final String TAB_TYPE_MEDIA = "media";
|
||||
private static final String TAB_TYPE_FAVORITES = "favorites";
|
||||
|
||||
private MediaLoaderWrapper mProfileImageLoader;
|
||||
private ShapedImageView mProfileImageView;
|
||||
private ImageView mProfileTypeView;
|
||||
private ProfileBannerImageView mProfileBannerView;
|
||||
@ -193,12 +192,13 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
||||
private TextView mPagesErrorText;
|
||||
private View mProfileNameBackground;
|
||||
private View mProfileDetailsContainer;
|
||||
private Relationship mRelationship;
|
||||
|
||||
private MediaLoaderWrapper mProfileImageLoader;
|
||||
private SupportTabsAdapter mPagerAdapter;
|
||||
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
|
||||
|
||||
private ParcelableUser mUser = null;
|
||||
private ParcelableUser mUser;
|
||||
private Relationship mRelationship;
|
||||
private Locale mLocale;
|
||||
private boolean mGetUserInfoLoaderInitialized, mGetFriendShipLoaderInitialized;
|
||||
private int mBannerWidth;
|
||||
@ -1454,7 +1454,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
||||
}
|
||||
mActionBarBackground.setOutlineAlphaFactor(tabOutlineAlphaFactor);
|
||||
|
||||
final ThemedActionBarActivity activity = (ThemedActionBarActivity) getActivity();
|
||||
final ThemedAppCompatActivity activity = (ThemedAppCompatActivity) getActivity();
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
setCompatToolbarOverlayAlpha(activity, factor * tabOutlineAlphaFactor);
|
||||
@ -1465,7 +1465,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
||||
final int themeId = activity.getCurrentThemeResourceId();
|
||||
if (ThemeUtils.isDarkTheme(themeId)) {
|
||||
stackedTabColor = getResources().getColor(R.color.background_color_action_bar_dark);
|
||||
final int contrastColor = ColorUtils.getContrastYIQ(stackedTabColor, 192);
|
||||
final int contrastColor = TwidereColorUtils.getContrastYIQ(stackedTabColor, 192);
|
||||
mPagerIndicator.setIconColor(contrastColor);
|
||||
mPagerIndicator.setLabelColor(contrastColor);
|
||||
mPagerIndicator.setStripColor(mUserUiColor);
|
||||
@ -1473,7 +1473,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
||||
stackedTabColor = mUserUiColor;
|
||||
final int tabColor = (Integer) sArgbEvaluator.evaluate(tabOutlineAlphaFactor, stackedTabColor, mCardBackgroundColor);
|
||||
((ColorDrawable) drawable).setColor(tabColor);
|
||||
final int contrastColor = ColorUtils.getContrastYIQ(tabColor, 192);
|
||||
final int contrastColor = TwidereColorUtils.getContrastYIQ(tabColor, 192);
|
||||
mPagerIndicator.setIconColor(contrastColor);
|
||||
mPagerIndicator.setLabelColor(contrastColor);
|
||||
mPagerIndicator.setStripColor(contrastColor);
|
||||
|
@ -35,7 +35,7 @@ import android.widget.ImageView;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
|
||||
import me.uucky.colorpicker.ColorPickerDialog;
|
||||
|
||||
@ -64,7 +64,7 @@ public class ColorPickerPreference extends DialogPreference implements DialogInt
|
||||
protected void onBindView(@NonNull final View view) {
|
||||
super.onBindView(view);
|
||||
final ImageView imageView = (ImageView) view.findViewById(R.id.color);
|
||||
imageView.setImageBitmap(ColorUtils.getColorPreviewBitmap(getContext(), getValue(), false));
|
||||
imageView.setImageBitmap(TwidereColorUtils.getColorPreviewBitmap(getContext(), getValue(), false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -33,7 +33,7 @@ import com.twitter.Extractor;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.BaseActionBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.menu.AccountActionProvider;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
@ -64,13 +64,13 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback,
|
||||
|
||||
private ActionMode mActionMode;
|
||||
|
||||
private final BaseActionBarActivity mActivity;
|
||||
private final BaseAppCompatActivity mActivity;
|
||||
|
||||
private AccountActionProvider mAccountActionProvider;
|
||||
|
||||
public static final int MENU_GROUP = 201;
|
||||
|
||||
public MultiSelectEventHandler(final BaseActionBarActivity activity) {
|
||||
public MultiSelectEventHandler(final BaseAppCompatActivity activity) {
|
||||
mActivity = activity;
|
||||
}
|
||||
|
||||
|
@ -42,11 +42,7 @@ public class RecyclerViewUtils {
|
||||
public static void focusNavigate(RecyclerView recyclerView, LinearLayoutManager layoutManager, int currentFocus, int direction) {
|
||||
if (direction == 0) return;
|
||||
if (currentFocus < 0) {
|
||||
final int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
|
||||
final View firstVisibleView = layoutManager.findViewByPosition(firstVisibleItemPosition);
|
||||
if (firstVisibleView != null) {
|
||||
firstVisibleView.requestFocus();
|
||||
}
|
||||
focusFallback(layoutManager);
|
||||
} else {
|
||||
final View view;
|
||||
if (direction > 0 && currentFocus == layoutManager.findLastVisibleItemPosition()) {
|
||||
@ -68,8 +64,19 @@ public class RecyclerViewUtils {
|
||||
}
|
||||
if (viewToFocus == null) return;
|
||||
final int nextPos = layoutManager.getPosition(viewToFocus);
|
||||
if (nextPos < 0 || (nextPos - currentFocus) * direction < 0) return;
|
||||
if (nextPos < 0 || (nextPos - currentFocus) * direction < 0) {
|
||||
focusFallback(layoutManager);
|
||||
return;
|
||||
}
|
||||
viewToFocus.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
private static void focusFallback(LinearLayoutManager layoutManager) {
|
||||
final int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
|
||||
final View firstVisibleView = layoutManager.findViewByPosition(firstVisibleItemPosition);
|
||||
if (firstVisibleView != null) {
|
||||
firstVisibleView.requestFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -402,7 +402,7 @@ public class ThemeUtils implements Constants {
|
||||
if (isTransparentBackground(backgroundOption)) {
|
||||
return themeAlpha << 24 | (0x00FFFFFF & color);
|
||||
} else if (isSolidBackground(backgroundOption)) {
|
||||
return ColorUtils.getContrastYIQ(color, Color.WHITE, Color.BLACK);
|
||||
return TwidereColorUtils.getContrastYIQ(color, Color.WHITE, Color.BLACK);
|
||||
} else {
|
||||
return color;
|
||||
}
|
||||
@ -438,7 +438,7 @@ public class ThemeUtils implements Constants {
|
||||
}
|
||||
|
||||
public static int getContrastActionBarItemColor(Context context, int theme, int color) {
|
||||
if (isDarkTheme(theme) || ColorUtils.getYIQLuminance(color) < 192) {
|
||||
if (isDarkTheme(theme) || TwidereColorUtils.getYIQLuminance(color) < 192) {
|
||||
//return light text color
|
||||
return Color.WHITE;
|
||||
}
|
||||
@ -447,7 +447,7 @@ public class ThemeUtils implements Constants {
|
||||
}
|
||||
|
||||
public static int getContrastActionBarTitleColor(Context context, int theme, int color) {
|
||||
if (isDarkTheme(theme) || ColorUtils.getYIQLuminance(color) < 192) {
|
||||
if (isDarkTheme(theme) || TwidereColorUtils.getYIQLuminance(color) < 192) {
|
||||
//return light text color
|
||||
return Color.WHITE;
|
||||
}
|
||||
@ -505,16 +505,16 @@ public class ThemeUtils implements Constants {
|
||||
|
||||
public static int getOptimalLinkColor(int linkColor, int color) {
|
||||
final int[] yiq = new int[3];
|
||||
ColorUtils.colorToYIQ(color, yiq);
|
||||
TwidereColorUtils.colorToYIQ(color, yiq);
|
||||
final int y = yiq[0];
|
||||
ColorUtils.colorToYIQ(linkColor, yiq);
|
||||
TwidereColorUtils.colorToYIQ(linkColor, yiq);
|
||||
if (y < 32 && yiq[0] < 192) {
|
||||
return linkColor;
|
||||
} else if (y > 192 && yiq[0] > 32) {
|
||||
return linkColor;
|
||||
}
|
||||
yiq[0] = yiq[0] + (y - yiq[0]) / 2;
|
||||
return ColorUtils.YIQToColor(Color.alpha(linkColor), yiq);
|
||||
return TwidereColorUtils.YIQToColor(Color.alpha(linkColor), yiq);
|
||||
}
|
||||
|
||||
public static int getQuickSearchBarThemeResource(final Context context) {
|
||||
@ -539,17 +539,6 @@ public class ThemeUtils implements Constants {
|
||||
}
|
||||
}
|
||||
|
||||
public static int getSettingsThemeResource(final Context context) {
|
||||
return getSettingsThemeResource(getThemeNameOption(context));
|
||||
}
|
||||
|
||||
public static int getSettingsThemeResource(final String name) {
|
||||
if (VALUE_THEME_NAME_TWIDERE.equals(name) || VALUE_THEME_NAME_LIGHT.equals(name))
|
||||
return R.style.Theme_Twidere_Settings_Light_DarkActionBar;
|
||||
else if (VALUE_THEME_NAME_DARK.equals(name)) return R.style.Theme_Twidere_Settings_Dark;
|
||||
return R.style.Theme_Twidere_Settings_Light_DarkActionBar;
|
||||
}
|
||||
|
||||
public static Drawable getSupportActionBarBackground(final Context context, final int themeRes) {
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
final TypedArray array = context.obtainStyledAttributes(null, new int[]{android.R.attr.background},
|
||||
@ -798,7 +787,7 @@ public class ThemeUtils implements Constants {
|
||||
if (!(activity instanceof IThemedActivity)) return;
|
||||
final int themeRes = ((IThemedActivity) activity).getCurrentThemeResourceId();
|
||||
final int themeColor = ((IThemedActivity) activity).getCurrentThemeColor();
|
||||
final int contrastColor = ColorUtils.getContrastYIQ(themeColor, 192);
|
||||
final int contrastColor = TwidereColorUtils.getContrastYIQ(themeColor, 192);
|
||||
ViewUtils.setBackground(indicator, getActionBarStackedBackground(activity, themeRes, themeColor, true));
|
||||
if (isDarkTheme(themeRes)) {
|
||||
final int foregroundColor = getThemeForegroundColor(activity);
|
||||
@ -840,6 +829,10 @@ public class ThemeUtils implements Constants {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isSolidBackground(final String option) {
|
||||
return VALUE_THEME_BACKGROUND_SOLID.equals(option);
|
||||
}
|
||||
|
||||
public static boolean isTransparentBackground(final Context context) {
|
||||
return isTransparentBackground(getThemeBackgroundOption(context));
|
||||
}
|
||||
@ -848,10 +841,6 @@ public class ThemeUtils implements Constants {
|
||||
return VALUE_THEME_BACKGROUND_TRANSPARENT.equals(option);
|
||||
}
|
||||
|
||||
public static boolean isSolidBackground(final String option) {
|
||||
return VALUE_THEME_BACKGROUND_SOLID.equals(option);
|
||||
}
|
||||
|
||||
public static boolean isWindowFloating(Context context, int theme) {
|
||||
final TypedArray a;
|
||||
if (theme != 0) {
|
||||
@ -1041,8 +1030,8 @@ public class ThemeUtils implements Constants {
|
||||
public static void wrapMenuIcon(ActionMenuView view, int colorDark, int colorLight, int... excludeGroups) {
|
||||
final int itemBackgroundColor = ThemeUtils.getThemeBackgroundColor(view.getContext());
|
||||
final int popupItemBackgroundColor = ThemeUtils.getThemeBackgroundColor(view.getContext(), view.getPopupTheme());
|
||||
final int itemColor = ColorUtils.getContrastYIQ(itemBackgroundColor, colorDark, colorLight);
|
||||
final int popupItemColor = ColorUtils.getContrastYIQ(popupItemBackgroundColor, colorDark, colorLight);
|
||||
final int itemColor = TwidereColorUtils.getContrastYIQ(itemBackgroundColor, colorDark, colorLight);
|
||||
final int popupItemColor = TwidereColorUtils.getContrastYIQ(popupItemBackgroundColor, colorDark, colorLight);
|
||||
final Menu menu = view.getMenu();
|
||||
final int childCount = view.getChildCount();
|
||||
for (int i = 0, j = menu.size(), k = 0; i < j; i++) {
|
||||
@ -1067,8 +1056,8 @@ public class ThemeUtils implements Constants {
|
||||
final Resources resources = context.getResources();
|
||||
final int colorDark = resources.getColor(R.color.action_icon_dark);
|
||||
final int colorLight = resources.getColor(R.color.action_icon_light);
|
||||
final int itemColor = ColorUtils.getContrastYIQ(backgroundColor, colorDark, colorLight);
|
||||
final int popupItemColor = ColorUtils.getContrastYIQ(popupBackgroundColor, colorDark, colorLight);
|
||||
final int itemColor = TwidereColorUtils.getContrastYIQ(backgroundColor, colorDark, colorLight);
|
||||
final int popupItemColor = TwidereColorUtils.getContrastYIQ(popupBackgroundColor, colorDark, colorLight);
|
||||
for (int i = 0, j = menu.size(), k = 0; i < j; i++) {
|
||||
final MenuItem item = menu.getItem(i);
|
||||
wrapMenuItemIcon(item, itemColor, excludeGroups);
|
||||
@ -1127,8 +1116,10 @@ public class ThemeUtils implements Constants {
|
||||
final ColorStateList tintList = ColorStateList.valueOf(tintColor);
|
||||
final CompoundButton compoundButton = (CompoundButton) view;
|
||||
ViewUtils.setButtonTintList(compoundButton, tintList);
|
||||
} else {
|
||||
// final ColorStateList tintList = ColorStateList.valueOf(tintColor);
|
||||
// ViewCompat.setBackgroundTintList(view, tintList);
|
||||
}
|
||||
// TODO support TintableBackgroundView
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
@ -30,7 +30,7 @@ import android.graphics.Rect;
|
||||
/**
|
||||
* Created by mariotaku on 15/1/8.
|
||||
*/
|
||||
public class ColorUtils {
|
||||
public class TwidereColorUtils {
|
||||
|
||||
public static Bitmap getColorPreviewBitmap(final Context context, final int color, final boolean border) {
|
||||
if (context == null) return null;
|
@ -35,12 +35,11 @@ public class UserAgentUtils {
|
||||
// You may uncomment next line if using Android Annotations library, otherwise just be sure to run it in on the UI thread
|
||||
public static String getDefaultUserAgentString(Context context) {
|
||||
if (Looper.myLooper() != Looper.getMainLooper()) throw new IllegalStateException();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||
return NewApiWrapper.getDefaultUserAgent(context);
|
||||
}
|
||||
|
||||
try {
|
||||
Constructor<WebSettings> constructor = WebSettings.class.getDeclaredConstructor(Context.class, WebView.class);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||
return NewApiWrapper.getDefaultUserAgent(context);
|
||||
}
|
||||
final Constructor<WebSettings> constructor = WebSettings.class.getDeclaredConstructor(Context.class, WebView.class);
|
||||
constructor.setAccessible(true);
|
||||
try {
|
||||
WebSettings settings = constructor.newInstance(context, null);
|
||||
|
@ -52,11 +52,6 @@ public final class ViewUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void setBackgroundTintList(final View view, final ColorStateList list) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
ViewAccessorL.setBackgroundTintList(view, list);
|
||||
}
|
||||
|
||||
public static void setButtonTintList(CompoundButton view, ColorStateList list) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
ViewAccessorL.setButtonTintList(view, list);
|
||||
@ -140,10 +135,6 @@ public final class ViewUtils {
|
||||
view.setOutlineProvider(new ViewOutlineProviderL(outlineProvider));
|
||||
}
|
||||
|
||||
static void setBackgroundTintList(final View view, final ColorStateList list) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
view.setBackgroundTintList(list);
|
||||
}
|
||||
|
||||
static void setButtonTintList(final CompoundButton view, final ColorStateList list) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
|
@ -39,7 +39,7 @@ import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.view.iface.IHomeActionButton;
|
||||
@ -76,7 +76,7 @@ public class HomeActionButtonCompat extends FrameLayout implements IHomeActionBu
|
||||
if (child instanceof FrameLayout) {
|
||||
final Drawable foreground = ((FrameLayout) child).getForeground();
|
||||
if (foreground != null) {
|
||||
foreground.setColorFilter(ColorUtils.getContrastYIQ(color, 192), Mode.MULTIPLY);
|
||||
foreground.setColorFilter(TwidereColorUtils.getContrastYIQ(color, 192), Mode.MULTIPLY);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.MessageConversationAdapter;
|
||||
import org.mariotaku.twidere.model.ParcelableDirectMessage.CursorIndices;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.SimpleValueSerializer;
|
||||
import org.mariotaku.twidere.util.TwidereLinkify;
|
||||
@ -98,7 +98,7 @@ public class MessageConversationViewHolder extends ViewHolder implements OnMedia
|
||||
public void setMessageColor(int color) {
|
||||
final ColorStateList colorStateList = ColorStateList.valueOf(color);
|
||||
messageContent.setBubbleColor(colorStateList);
|
||||
final int textLuminancePrimary = ColorUtils.getYIQLuminance(textColorPrimary);
|
||||
final int textLuminancePrimary = TwidereColorUtils.getYIQLuminance(textColorPrimary);
|
||||
final int textPrimaryDark, textPrimaryLight, textSecondaryDark, textSecondaryLight;
|
||||
if (textLuminancePrimary < 128) {
|
||||
textPrimaryDark = textColorPrimary;
|
||||
@ -111,8 +111,8 @@ public class MessageConversationViewHolder extends ViewHolder implements OnMedia
|
||||
textSecondaryDark = textColorSecondaryInverse;
|
||||
textSecondaryLight = textColorSecondary;
|
||||
}
|
||||
final int textContrastPrimary = ColorUtils.getContrastYIQ(color, 192, textPrimaryDark, textPrimaryLight);
|
||||
final int textContrastSecondary = ColorUtils.getContrastYIQ(color, 192, textSecondaryDark, textSecondaryLight);
|
||||
final int textContrastPrimary = TwidereColorUtils.getContrastYIQ(color, 192, textPrimaryDark, textPrimaryLight);
|
||||
final int textContrastSecondary = TwidereColorUtils.getContrastYIQ(color, 192, textSecondaryDark, textSecondaryLight);
|
||||
text.setTextColor(textContrastPrimary);
|
||||
text.setLinkTextColor(textContrastSecondary);
|
||||
time.setTextColor(textContrastSecondary);
|
||||
|
@ -21,6 +21,7 @@ package org.mariotaku.twidere.view.themed;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.AutoCompleteTextView;
|
||||
|
||||
@ -45,6 +46,6 @@ public class ThemedAutoCompleteTextView extends AutoCompleteTextView implements
|
||||
|
||||
@Override
|
||||
public void setThemeTintColor(ColorStateList color) {
|
||||
ViewUtils.setBackgroundTintList(this, color);
|
||||
ViewCompat.setBackgroundTintList(this, color);
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ package org.mariotaku.twidere.view.themed;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.EditText;
|
||||
|
||||
@ -45,6 +46,6 @@ public class ThemedEditText extends EditText implements IThemedView {
|
||||
|
||||
@Override
|
||||
public void setThemeTintColor(ColorStateList color) {
|
||||
ViewUtils.setBackgroundTintList(this, color);
|
||||
ViewCompat.setBackgroundTintList(this, color);
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ package org.mariotaku.twidere.view.themed;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.MultiAutoCompleteTextView;
|
||||
|
||||
@ -45,7 +46,7 @@ public class ThemedMultiAutoCompleteTextView extends MultiAutoCompleteTextView i
|
||||
|
||||
@Override
|
||||
public void setThemeTintColor(ColorStateList color) {
|
||||
ViewUtils.setBackgroundTintList(this, color);
|
||||
ViewCompat.setBackgroundTintList(this, color);
|
||||
setLinkTextColor(color);
|
||||
setHighlightColor(color.getDefaultColor());
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/element_spacing_normal"
|
||||
android:paddingBottom="@dimen/element_spacing_normal"
|
||||
android:paddingLeft="@dimen/element_spacing_large"
|
||||
android:paddingRight="@dimen/element_spacing_large">
|
||||
|
||||
|
@ -24,6 +24,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:orientation="vertical"
|
||||
android:splitMotionEvents="false">
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="AppCompatResource"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<menu
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/add_submenu"
|
||||
android:icon="@drawable/ic_action_add"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/add_tab">
|
||||
android:title="@string/add_tab"
|
||||
app:showAsAction="always">
|
||||
<menu/>
|
||||
</item>
|
||||
|
||||
|
@ -1,12 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/add"
|
||||
android:icon="@drawable/ic_action_add"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/add_host_mapping"
|
||||
tools:ignore="AppCompatResource"/>
|
||||
app:showAsAction="always"
|
||||
android:title="@string/add_host_mapping"/>
|
||||
|
||||
</menu>
|
@ -18,10 +18,8 @@
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<menu xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@id/reset"
|
||||
android:title="@string/reset_to_default"
|
||||
tools:ignore="AppCompatResource"/>
|
||||
android:title="@string/reset_to_default"/>
|
||||
</menu>
|
@ -1,4 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ 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/>.
|
||||
-->
|
||||
|
||||
<menu>
|
||||
|
||||
|
||||
|
@ -1,12 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="AppCompatResource">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@id/toggle"
|
||||
android:actionLayout="@layout/action_item_switch"
|
||||
android:showAsAction="always"
|
||||
app:actionLayout="@layout/action_item_switch"
|
||||
app:showAsAction="always"
|
||||
android:title="@string/toggle"/>
|
||||
|
||||
</menu>
|
@ -276,80 +276,8 @@
|
||||
<item name="android:windowBackground">@color/nyan_background</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Settings.Dark" parent="Theme.Base">
|
||||
|
||||
<!-- Colors -->
|
||||
<item name="android:colorBackgroundCacheHint">@color/background_color_window_dark</item>
|
||||
|
||||
<!-- Window attributes -->
|
||||
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
|
||||
<item name="android:windowBackground">@color/background_color_window_dark</item>
|
||||
|
||||
<!-- ActionBar styles -->
|
||||
<item name="android:actionBarStyle">@android:style/Widget.DeviceDefault.ActionBar.Solid
|
||||
</item>
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
|
||||
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
|
||||
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
|
||||
|
||||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_light</item>
|
||||
<item name="menuIconColorActionBar">?menuIconColor</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Settings.Light" parent="Theme.Base.Light">
|
||||
|
||||
<!-- Colors -->
|
||||
<item name="android:colorBackgroundCacheHint">@color/background_color_window_light</item>
|
||||
|
||||
<!-- Window attributes -->
|
||||
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
|
||||
<item name="android:windowBackground">@color/background_color_window_light</item>
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
|
||||
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
|
||||
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
|
||||
|
||||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_dark</item>
|
||||
<item name="menuIconColorActionBar">?menuIconColor</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Settings.Light.DarkActionBar" parent="Theme.Base.Light.DarkActionBar">
|
||||
|
||||
<!-- Colors -->
|
||||
<!--<item name="android:colorBackgroundCacheHint">@color/bg_color_light</item>-->
|
||||
|
||||
<item name="android:windowBackground">@color/background_color_window_light</item>
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
|
||||
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
|
||||
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
|
||||
|
||||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_dark</item>
|
||||
<item name="menuIconColorActionBar">@color/action_icon_light</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Wizard" parent="Theme.Twidere.Settings.Light">
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowActionBar">false</item>
|
||||
<style name="Theme.Twidere.Wizard" parent="Theme.Twidere.Light">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="android:windowBackground">@color/background_color_window_settings_wizard</item>
|
||||
<item name="android:colorActivatedHighlight">@color/branding_color</item>
|
||||
</style>
|
||||
|
Loading…
x
Reference in New Issue
Block a user