mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-13 13:05:03 -05:00
a74d57cb71
- Since the split-view change, MessageView is only a fragment, so we
can't call setTheme() anymore so easily.
Instead, use a ContextThemeWrapper and use that to inflate the
layout. This way the message header and attachment view
are styled correctly.
- The HTC WebView fix in SingleMessageView was returning the wrong
background color, when message view theme and global theme differ,
because it always used the global theme to retrieve it.
Fix: Specifically put the light/dark values in the themes.xml,
and get them using getContext().getTheme().resolveAttribute().
getContext() will use the ContextThemeWrapper from above, so
even if the global and message view themes differ, it aleays
returns the correct one.
The getThemeBackgroundColor() method added to the K9ActivityMagic
interface in 309eeb72ac
is now not
needed anymore, and was removed.
116 lines
3.6 KiB
Java
116 lines
3.6 KiB
Java
package com.fsck.k9.activity;
|
|
|
|
import java.util.Locale;
|
|
|
|
import com.fsck.k9.K9;
|
|
import com.fsck.k9.activity.misc.SwipeGestureDetector;
|
|
import com.fsck.k9.activity.misc.SwipeGestureDetector.OnSwipeGestureListener;
|
|
import com.fsck.k9.helper.StringUtils;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.res.Configuration;
|
|
import android.content.res.Resources;
|
|
import android.content.res.TypedArray;
|
|
import android.view.GestureDetector;
|
|
import android.view.MotionEvent;
|
|
|
|
|
|
/**
|
|
* This class implements functionality common to most activities used in K-9 Mail.
|
|
*
|
|
* @see K9Activity
|
|
* @see K9ListActivity
|
|
* @see K9FragmentActivity
|
|
*/
|
|
public class K9ActivityCommon {
|
|
/**
|
|
* Creates a new instance of {@link K9ActivityCommon} bound to the specified activity.
|
|
*
|
|
* @param activity
|
|
* The {@link Activity} the returned {@code K9ActivityCommon} instance will be bound to.
|
|
*
|
|
* @return The {@link K9ActivityCommon} instance that will provide the base functionality of the
|
|
* "K9" activities.
|
|
*/
|
|
public static K9ActivityCommon newInstance(Activity activity) {
|
|
return new K9ActivityCommon(activity);
|
|
}
|
|
|
|
public static void setLanguage(Context context, String language) {
|
|
Locale locale;
|
|
if (StringUtils.isNullOrEmpty(language)) {
|
|
locale = Locale.getDefault();
|
|
} else if (language.length() == 5 && language.charAt(2) == '_') {
|
|
// language is in the form: en_US
|
|
locale = new Locale(language.substring(0, 2), language.substring(3));
|
|
} else {
|
|
locale = new Locale(language);
|
|
}
|
|
|
|
Configuration config = new Configuration();
|
|
config.locale = locale;
|
|
Resources resources = context.getResources();
|
|
resources.updateConfiguration(config, resources.getDisplayMetrics());
|
|
}
|
|
|
|
|
|
/**
|
|
* Base activities need to implement this interface.
|
|
*
|
|
* <p>The implementing class simply has to call through to the implementation of these methods
|
|
* in {@link K9ActivityCommon}.</p>
|
|
*/
|
|
public interface K9ActivityMagic {
|
|
void setupGestureDetector(OnSwipeGestureListener listener);
|
|
}
|
|
|
|
|
|
private Activity mActivity;
|
|
private GestureDetector mGestureDetector;
|
|
|
|
|
|
private K9ActivityCommon(Activity activity) {
|
|
mActivity = activity;
|
|
setLanguage(mActivity, K9.getK9Language());
|
|
mActivity.setTheme(K9.getK9ThemeResourceId());
|
|
}
|
|
|
|
/**
|
|
* Call this before calling {@code super.dispatchTouchEvent(MotionEvent)}.
|
|
*/
|
|
public void preDispatchTouchEvent(MotionEvent event) {
|
|
if (mGestureDetector != null) {
|
|
mGestureDetector.onTouchEvent(event);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the background color of the theme used for this activity.
|
|
*
|
|
* @return The background color of the current theme.
|
|
*/
|
|
public int getThemeBackgroundColor() {
|
|
TypedArray array = mActivity.getTheme().obtainStyledAttributes(
|
|
new int[] { android.R.attr.colorBackground });
|
|
|
|
int backgroundColor = array.getColor(0, 0xFF00FF);
|
|
|
|
array.recycle();
|
|
|
|
return backgroundColor;
|
|
}
|
|
|
|
/**
|
|
* Call this if you wish to use the swipe gesture detector.
|
|
*
|
|
* @param listener
|
|
* A listener that will be notified if a left to right or right to left swipe has been
|
|
* detected.
|
|
*/
|
|
public void setupGestureDetector(OnSwipeGestureListener listener) {
|
|
mGestureDetector = new GestureDetector(mActivity,
|
|
new SwipeGestureDetector(mActivity, listener));
|
|
}
|
|
}
|