diff options
Diffstat (limited to 'OpenKeychain/src/main')
20 files changed, 38 insertions, 573 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java index ee73bb8f2..c38d126d7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java @@ -27,7 +27,7 @@ import org.sufficientlysecure.keychain.R;   * Sets action bar   */  public abstract class BaseActivity extends ActionBarActivity { -    private Toolbar toolbar; +    protected Toolbar mToolbar;      @Override      protected void onCreate(Bundle savedInstanceState) { @@ -39,14 +39,14 @@ public abstract class BaseActivity extends ActionBarActivity {      protected abstract void initLayout();      protected void initToolbar() { -        toolbar = (Toolbar) findViewById(R.id.toolbar); -        if (toolbar != null) { -            setSupportActionBar(toolbar); +        mToolbar = (Toolbar) findViewById(R.id.toolbar); +        if (mToolbar != null) { +            setSupportActionBar(mToolbar);              getSupportActionBar().setDisplayHomeAsUpEnabled(true);          }      }      protected void setActionBarIcon(int iconRes) { -        toolbar.setNavigationIcon(iconRes); +        mToolbar.setNavigationIcon(iconRes);      }  } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java index 8d4d3c915..2eb35351e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java @@ -20,12 +20,12 @@ package org.sufficientlysecure.keychain.ui;  import android.content.Intent;  import android.os.Bundle;  import android.support.v4.view.ViewPager; -import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarActivity; +import android.view.View; + +import com.astuetz.PagerSlidingTabStrip;  import org.sufficientlysecure.keychain.R;  import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter; -import org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout;  public class HelpActivity extends BaseActivity {      public static final String EXTRA_SELECTED_TAB = "selected_tab"; @@ -44,14 +44,16 @@ public class HelpActivity extends BaseActivity {      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState); -        final ActionBar actionBar = getSupportActionBar(); -        actionBar.setDisplayShowTitleEnabled(true); -        actionBar.setDisplayHomeAsUpEnabled(false); -        actionBar.setHomeButtonEnabled(false); +        mToolbar.setNavigationOnClickListener(new View.OnClickListener() { +            @Override +            public void onClick(View v) { +                finish(); +            } +        });          mViewPager = (ViewPager) findViewById(R.id.pager); -        SlidingTabLayout slidingTabLayout = -                (SlidingTabLayout) findViewById(R.id.sliding_tab_layout); +        PagerSlidingTabStrip slidingTabLayout = +                (PagerSlidingTabStrip) findViewById(R.id.sliding_tab_layout);          mTabsAdapter = new PagerTabStripAdapter(this);          mViewPager.setAdapter(mTabsAdapter); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index ae80679d0..3bb0695a0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -21,7 +21,6 @@ package org.sufficientlysecure.keychain.ui;  import android.annotation.TargetApi;  import android.content.Intent;  import android.database.Cursor; -import android.graphics.PorterDuff;  import android.net.Uri;  import android.nfc.NdefMessage;  import android.nfc.NdefRecord; @@ -38,7 +37,6 @@ import android.support.v4.content.CursorLoader;  import android.support.v4.content.Loader;  import android.support.v4.view.ViewPager;  import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarActivity;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View; @@ -47,22 +45,21 @@ import android.widget.LinearLayout;  import android.widget.TextView;  import android.widget.Toast; +import com.astuetz.PagerSlidingTabStrip; +  import org.sufficientlysecure.keychain.Constants;  import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; -import org.sufficientlysecure.keychain.util.ContactHelper; -import org.sufficientlysecure.keychain.util.ExportHelper; -import org.sufficientlysecure.keychain.util.Preferences; +import org.sufficientlysecure.keychain.operations.results.OperationResult;  import org.sufficientlysecure.keychain.pgp.KeyRing;  import org.sufficientlysecure.keychain.provider.KeychainContract;  import org.sufficientlysecure.keychain.provider.ProviderHelper;  import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; -import org.sufficientlysecure.keychain.operations.results.OperationResult;  import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter; -import org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout; -import org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout.TabColorizer; -import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;  import org.sufficientlysecure.keychain.ui.util.Notify; +import org.sufficientlysecure.keychain.util.ContactHelper; +import org.sufficientlysecure.keychain.util.ExportHelper; +import org.sufficientlysecure.keychain.util.Log;  import java.util.Date;  import java.util.HashMap; @@ -81,7 +78,7 @@ public class ViewKeyActivity extends BaseActivity implements      // view      private ViewPager mViewPager; -    private SlidingTabLayout mSlidingTabLayout; +    private PagerSlidingTabStrip mSlidingTabLayout;      private PagerTabStripAdapter mTabsAdapter;      private LinearLayout mStatusLayout; @@ -117,19 +114,7 @@ public class ViewKeyActivity extends BaseActivity implements          mStatusDivider = findViewById(R.id.view_key_status_divider);          mViewPager = (ViewPager) findViewById(R.id.view_key_pager); -        mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.view_key_sliding_tab_layout); - -        mSlidingTabLayout.setCustomTabColorizer(new TabColorizer() { -            @Override -            public int getIndicatorColor(int position) { -                return 0xFF4caf50; -            } - -            @Override -            public int getDividerColor(int position) { -                return 0; -            } -        }); +        mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.view_key_sliding_tab_layout);          int switchToTab = TAB_MAIN;          Intent intent = getIntent(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SlidingTabLayout.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SlidingTabLayout.java deleted file mode 100644 index 17471c86c..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SlidingTabLayout.java +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Copyright (C) 2013 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.sufficientlysecure.keychain.ui.widget; - -import android.content.Context; -import android.graphics.Typeface; -import android.os.Build; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.HorizontalScrollView; -import android.widget.TextView; - -/** - * Copied from http://developer.android.com/samples/SlidingTabsColors/index.html - */ - -/** - * To be used with ViewPager to provide a tab indicator component which give constant feedback as to - * the user's scroll progress. - * <p/> - * To use the component, simply add it to your view hierarchy. Then in your - * {@link android.app.Activity} or {@link android.support.v4.app.Fragment} call - * {@link #setViewPager(ViewPager)} providing it the ViewPager this layout is being used for. - * <p/> - * The colors can be customized in two ways. The first and simplest is to provide an array of colors - * via {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)}. The - * alternative is via the {@link TabColorizer} interface which provides you complete control over - * which color is used for any individual position. - * <p/> - * The views used as tabs can be customized by calling {@link #setCustomTabView(int, int)}, - * providing the layout ID of your custom layout. - */ -public class SlidingTabLayout extends HorizontalScrollView { - -    /** -     * Allows complete control over the colors drawn in the tab layout. Set with -     * {@link #setCustomTabColorizer(TabColorizer)}. -     */ -    public interface TabColorizer { - -        /** -         * @return return the color of the indicator used when {@code position} is selected. -         */ -        int getIndicatorColor(int position); - -        /** -         * @return return the color of the divider drawn to the right of {@code position}. -         */ -        int getDividerColor(int position); - -    } - -    private static final int TITLE_OFFSET_DIPS = 24; -    private static final int TAB_VIEW_PADDING_DIPS = 16; -    private static final int TAB_VIEW_TEXT_SIZE_SP = 12; - -    private int mTitleOffset; - -    private int mTabViewLayoutId; -    private int mTabViewTextViewId; - -    private ViewPager mViewPager; -    private ViewPager.OnPageChangeListener mViewPagerPageChangeListener; - -    private final SlidingTabStrip mTabStrip; - -    public SlidingTabLayout(Context context) { -        this(context, null); -    } - -    public SlidingTabLayout(Context context, AttributeSet attrs) { -        this(context, attrs, 0); -    } - -    public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); - -        // Disable the Scroll Bar -        setHorizontalScrollBarEnabled(false); -        // Make sure that the Tab Strips fills this View -        setFillViewport(true); - -        mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density); - -        mTabStrip = new SlidingTabStrip(context); -        addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); -    } - -    /** -     * Set the custom {@link TabColorizer} to be used. -     * <p/> -     * If you only require simple custmisation then you can use -     * {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)} to achieve -     * similar effects. -     */ -    public void setCustomTabColorizer(TabColorizer tabColorizer) { -        mTabStrip.setCustomTabColorizer(tabColorizer); -    } - -    /** -     * Sets the colors to be used for indicating the selected tab. These colors are treated as a -     * circular array. Providing one color will mean that all tabs are indicated with the same color. -     */ -    public void setSelectedIndicatorColors(int... colors) { -        mTabStrip.setSelectedIndicatorColors(colors); -    } - -    /** -     * Sets the colors to be used for tab dividers. These colors are treated as a circular array. -     * Providing one color will mean that all tabs are indicated with the same color. -     */ -    public void setDividerColors(int... colors) { -        mTabStrip.setDividerColors(colors); -    } - -    /** -     * Set the {@link ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are -     * required to set any {@link ViewPager.OnPageChangeListener} through this method. This is so -     * that the layout can update it's scroll position correctly. -     * -     * @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener) -     */ -    public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { -        mViewPagerPageChangeListener = listener; -    } - -    /** -     * Set the custom layout to be inflated for the tab views. -     * -     * @param layoutResId Layout id to be inflated -     * @param textViewId  id of the {@link TextView} in the inflated view -     */ -    public void setCustomTabView(int layoutResId, int textViewId) { -        mTabViewLayoutId = layoutResId; -        mTabViewTextViewId = textViewId; -    } - -    /** -     * Sets the associated view pager. Note that the assumption here is that the pager content -     * (number of tabs and tab titles) does not change after this call has been made. -     */ -    public void setViewPager(ViewPager viewPager) { -        mTabStrip.removeAllViews(); - -        mViewPager = viewPager; -        if (viewPager != null) { -            viewPager.setOnPageChangeListener(new InternalViewPagerListener()); -            populateTabStrip(); -        } -    } - -    /** -     * Create a default view to be used for tabs. This is called if a custom tab view is not set via -     * {@link #setCustomTabView(int, int)}. -     */ -    protected TextView createDefaultTabView(Context context) { -        TextView textView = new TextView(context); -        textView.setGravity(Gravity.CENTER); -        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); -        textView.setTypeface(Typeface.DEFAULT_BOLD); - -        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { -            // If we're running on Honeycomb or newer, then we can use the Theme's -            // selectableItemBackground to ensure that the View has a pressed state -            TypedValue outValue = new TypedValue(); -            getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, -                    outValue, true); -            textView.setBackgroundResource(outValue.resourceId); -        } - -        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { -            // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style -            textView.setAllCaps(true); -        } - -        int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); -        textView.setPadding(padding, padding, padding, padding); - -        return textView; -    } - -    private void populateTabStrip() { -        final PagerAdapter adapter = mViewPager.getAdapter(); -        final View.OnClickListener tabClickListener = new TabClickListener(); - -        for (int i = 0; i < adapter.getCount(); i++) { -            View tabView = null; -            TextView tabTitleView = null; - -            if (mTabViewLayoutId != 0) { -                // If there is a custom tab view layout id set, try and inflate it -                tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, -                        false); -                tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); -            } - -            if (tabView == null) { -                tabView = createDefaultTabView(getContext()); -            } - -            if (tabTitleView == null && TextView.class.isInstance(tabView)) { -                tabTitleView = (TextView) tabView; -            } - -            tabTitleView.setText(adapter.getPageTitle(i)); -            tabView.setOnClickListener(tabClickListener); - -            mTabStrip.addView(tabView); -        } -    } - -    @Override -    protected void onAttachedToWindow() { -        super.onAttachedToWindow(); - -        if (mViewPager != null) { -            scrollToTab(mViewPager.getCurrentItem(), 0); -        } -    } - -    private void scrollToTab(int tabIndex, int positionOffset) { -        final int tabStripChildCount = mTabStrip.getChildCount(); -        if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { -            return; -        } - -        View selectedChild = mTabStrip.getChildAt(tabIndex); -        if (selectedChild != null) { -            int targetScrollX = selectedChild.getLeft() + positionOffset; - -            if (tabIndex > 0 || positionOffset > 0) { -                // If we're not at the first child and are mid-scroll, make sure we obey the offset -                targetScrollX -= mTitleOffset; -            } - -            scrollTo(targetScrollX, 0); -        } -    } - -    private class InternalViewPagerListener implements ViewPager.OnPageChangeListener { -        private int mScrollState; - -        @Override -        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { -            int tabStripChildCount = mTabStrip.getChildCount(); -            if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { -                return; -            } - -            mTabStrip.onViewPagerPageChanged(position, positionOffset); - -            View selectedTitle = mTabStrip.getChildAt(position); -            int extraOffset = (selectedTitle != null) -                    ? (int) (positionOffset * selectedTitle.getWidth()) -                    : 0; -            scrollToTab(position, extraOffset); - -            if (mViewPagerPageChangeListener != null) { -                mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, -                        positionOffsetPixels); -            } -        } - -        @Override -        public void onPageScrollStateChanged(int state) { -            mScrollState = state; - -            if (mViewPagerPageChangeListener != null) { -                mViewPagerPageChangeListener.onPageScrollStateChanged(state); -            } -        } - -        @Override -        public void onPageSelected(int position) { -            if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { -                mTabStrip.onViewPagerPageChanged(position, 0f); -                scrollToTab(position, 0); -            } - -            if (mViewPagerPageChangeListener != null) { -                mViewPagerPageChangeListener.onPageSelected(position); -            } -        } - -    } - -    private class TabClickListener implements View.OnClickListener { -        @Override -        public void onClick(View v) { -            for (int i = 0; i < mTabStrip.getChildCount(); i++) { -                if (v == mTabStrip.getChildAt(i)) { -                    mViewPager.setCurrentItem(i); -                    return; -                } -            } -        } -    } - -} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SlidingTabStrip.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SlidingTabStrip.java deleted file mode 100644 index 4c41e12c5..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SlidingTabStrip.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2013 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.sufficientlysecure.keychain.ui.widget; - -import android.R; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.View; -import android.widget.LinearLayout; - -/** - * Copied from http://developer.android.com/samples/SlidingTabsColors/index.html - */ -class SlidingTabStrip extends LinearLayout { - -    private static final int DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS = 2; -    private static final byte DEFAULT_BOTTOM_BORDER_COLOR_ALPHA = 0x26; -    private static final int SELECTED_INDICATOR_THICKNESS_DIPS = 8; -    private static final int DEFAULT_SELECTED_INDICATOR_COLOR = 0xFFAA66CC; - -    private static final int DEFAULT_DIVIDER_THICKNESS_DIPS = 1; -    private static final byte DEFAULT_DIVIDER_COLOR_ALPHA = 0x20; -    private static final float DEFAULT_DIVIDER_HEIGHT = 0.5f; - -    private final int mBottomBorderThickness; -    private final Paint mBottomBorderPaint; - -    private final int mSelectedIndicatorThickness; -    private final Paint mSelectedIndicatorPaint; - -    private final int mDefaultBottomBorderColor; - -    private final Paint mDividerPaint; -    private final float mDividerHeight; - -    private int mSelectedPosition; -    private float mSelectionOffset; - -    private SlidingTabLayout.TabColorizer mCustomTabColorizer; -    private final SimpleTabColorizer mDefaultTabColorizer; - -    SlidingTabStrip(Context context) { -        this(context, null); -    } - -    SlidingTabStrip(Context context, AttributeSet attrs) { -        super(context, attrs); -        setWillNotDraw(false); - -        final float density = getResources().getDisplayMetrics().density; - -        TypedValue outValue = new TypedValue(); -        context.getTheme().resolveAttribute(R.attr.colorForeground, outValue, true); -        final int themeForegroundColor = outValue.data; - -        mDefaultBottomBorderColor = setColorAlpha(themeForegroundColor, -                DEFAULT_BOTTOM_BORDER_COLOR_ALPHA); - -        mDefaultTabColorizer = new SimpleTabColorizer(); -        mDefaultTabColorizer.setIndicatorColors(DEFAULT_SELECTED_INDICATOR_COLOR); -        mDefaultTabColorizer.setDividerColors(setColorAlpha(themeForegroundColor, -                DEFAULT_DIVIDER_COLOR_ALPHA)); - -        mBottomBorderThickness = (int) (DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS * density); -        mBottomBorderPaint = new Paint(); -        mBottomBorderPaint.setColor(mDefaultBottomBorderColor); - -        mSelectedIndicatorThickness = (int) (SELECTED_INDICATOR_THICKNESS_DIPS * density); -        mSelectedIndicatorPaint = new Paint(); - -        mDividerHeight = DEFAULT_DIVIDER_HEIGHT; -        mDividerPaint = new Paint(); -        mDividerPaint.setStrokeWidth((int) (DEFAULT_DIVIDER_THICKNESS_DIPS * density)); -    } - -    void setCustomTabColorizer(SlidingTabLayout.TabColorizer customTabColorizer) { -        mCustomTabColorizer = customTabColorizer; -        invalidate(); -    } - -    void setSelectedIndicatorColors(int... colors) { -        // Make sure that the custom colorizer is removed -        mCustomTabColorizer = null; -        mDefaultTabColorizer.setIndicatorColors(colors); -        invalidate(); -    } - -    void setDividerColors(int... colors) { -        // Make sure that the custom colorizer is removed -        mCustomTabColorizer = null; -        mDefaultTabColorizer.setDividerColors(colors); -        invalidate(); -    } - -    void onViewPagerPageChanged(int position, float positionOffset) { -        mSelectedPosition = position; -        mSelectionOffset = positionOffset; -        invalidate(); -    } - -    @Override -    protected void onDraw(Canvas canvas) { -        final int height = getHeight(); -        final int childCount = getChildCount(); -        final int dividerHeightPx = (int) (Math.min(Math.max(0f, mDividerHeight), 1f) * height); -        final SlidingTabLayout.TabColorizer tabColorizer = mCustomTabColorizer != null -                ? mCustomTabColorizer -                : mDefaultTabColorizer; - -        // Thick colored underline below the current selection -        if (childCount > 0) { -            View selectedTitle = getChildAt(mSelectedPosition); -            int left = selectedTitle.getLeft(); -            int right = selectedTitle.getRight(); -            int color = tabColorizer.getIndicatorColor(mSelectedPosition); - -            if (mSelectionOffset > 0f && mSelectedPosition < (getChildCount() - 1)) { -                int nextColor = tabColorizer.getIndicatorColor(mSelectedPosition + 1); -                if (color != nextColor) { -                    color = blendColors(nextColor, color, mSelectionOffset); -                } - -                // Draw the selection partway between the tabs -                View nextTitle = getChildAt(mSelectedPosition + 1); -                left = (int) (mSelectionOffset * nextTitle.getLeft() + -                        (1.0f - mSelectionOffset) * left); -                right = (int) (mSelectionOffset * nextTitle.getRight() + -                        (1.0f - mSelectionOffset) * right); -            } - -            mSelectedIndicatorPaint.setColor(color); - -            canvas.drawRect(left, height - mSelectedIndicatorThickness, right, -                    height, mSelectedIndicatorPaint); -        } - -        // Thin underline along the entire bottom edge -        canvas.drawRect(0, height - mBottomBorderThickness, getWidth(), height, mBottomBorderPaint); - -        // Vertical separators between the titles -        int separatorTop = (height - dividerHeightPx) / 2; -        for (int i = 0; i < childCount - 1; i++) { -            View child = getChildAt(i); -            mDividerPaint.setColor(tabColorizer.getDividerColor(i)); -            canvas.drawLine(child.getRight(), separatorTop, child.getRight(), -                    separatorTop + dividerHeightPx, mDividerPaint); -        } -    } - -    /** -     * Set the alpha value of the {@code color} to be the given {@code alpha} value. -     */ -    private static int setColorAlpha(int color, byte alpha) { -        return Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)); -    } - -    /** -     * Blend {@code color1} and {@code color2} using the given ratio. -     * -     * @param ratio of which to blend. 1.0 will return {@code color1}, 0.5 will give an even blend, -     *              0.0 will return {@code color2}. -     */ -    private static int blendColors(int color1, int color2, float ratio) { -        final float inverseRation = 1f - ratio; -        float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation); -        float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation); -        float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); -        return Color.rgb((int) r, (int) g, (int) b); -    } - -    private static class SimpleTabColorizer implements SlidingTabLayout.TabColorizer { -        private int[] mIndicatorColors; -        private int[] mDividerColors; - -        @Override -        public final int getIndicatorColor(int position) { -            return mIndicatorColors[position % mIndicatorColors.length]; -        } - -        @Override -        public final int getDividerColor(int position) { -            return mDividerColors[position % mDividerColors.length]; -        } - -        void setIndicatorColors(int... colors) { -            mIndicatorColors = colors; -        } - -        void setDividerColors(int... colors) { -            mDividerColors = colors; -        } -    } -}
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/drawable-hdpi/key_flag_authenticate.png b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_authenticate.pngBinary files differ new file mode 100644 index 000000000..9d4ed6e84 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_authenticate.png diff --git a/OpenKeychain/src/main/res/drawable-hdpi/key_flag_certify.png b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_certify.pngBinary files differ new file mode 100644 index 000000000..e76393659 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_certify.png diff --git a/OpenKeychain/src/main/res/drawable-hdpi/key_flag_encrypt.png b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_encrypt.pngBinary files differ new file mode 100644 index 000000000..3c2f8c09c --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_encrypt.png diff --git a/OpenKeychain/src/main/res/drawable-hdpi/key_flag_sign.png b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_sign.pngBinary files differ new file mode 100644 index 000000000..046424643 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-hdpi/key_flag_sign.png diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_authenticate.png b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_authenticate.pngBinary files differ new file mode 100644 index 000000000..8d36d7202 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_authenticate.png diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_certify.png b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_certify.pngBinary files differ new file mode 100644 index 000000000..01a74bcc0 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_certify.png diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_encrypt.png b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_encrypt.pngBinary files differ new file mode 100644 index 000000000..ff07bd0a4 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_encrypt.png diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_sign.png b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_sign.pngBinary files differ new file mode 100644 index 000000000..b8002162a --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xhdpi/key_flag_sign.png diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_authenticate.png b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_authenticate.pngBinary files differ new file mode 100644 index 000000000..d786dc72f --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_authenticate.png diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_certify.png b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_certify.pngBinary files differ new file mode 100644 index 000000000..4bb97f992 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_certify.png diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_encrypt.png b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_encrypt.pngBinary files differ new file mode 100644 index 000000000..fe0c8e41b --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_encrypt.png diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_sign.png b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_sign.pngBinary files differ new file mode 100644 index 000000000..51ab367a9 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxhdpi/key_flag_sign.png diff --git a/OpenKeychain/src/main/res/layout/help_activity.xml b/OpenKeychain/src/main/res/layout/help_activity.xml index 794964adb..7d3e1834c 100644 --- a/OpenKeychain/src/main/res/layout/help_activity.xml +++ b/OpenKeychain/src/main/res/layout/help_activity.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +    xmlns:app="http://schemas.android.com/apk/res-auto"      android:layout_width="match_parent"      android:layout_height="match_parent"> @@ -9,15 +10,17 @@      <LinearLayout          android:layout_below="@id/toolbar" -          android:layout_width="match_parent"          android:layout_height="match_parent"          android:orientation="vertical"> -        <org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout +        <com.astuetz.PagerSlidingTabStrip              android:id="@+id/sliding_tab_layout"              android:layout_width="match_parent" -            android:layout_height="wrap_content" /> +            android:layout_height="?attr/actionBarSize" +            android:background="?attr/colorPrimary" +            android:textColor="#FFFFFF" +            app:pstsIndicatorColor="#FFFFFF" />          <android.support.v4.view.ViewPager              android:id="@+id/pager" diff --git a/OpenKeychain/src/main/res/layout/view_key_activity.xml b/OpenKeychain/src/main/res/layout/view_key_activity.xml index 10612f5a8..a2d104694 100644 --- a/OpenKeychain/src/main/res/layout/view_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/view_key_activity.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +    xmlns:app="http://schemas.android.com/apk/res-auto"      android:layout_width="match_parent"      android:layout_height="match_parent"> @@ -46,10 +47,13 @@              android:visibility="gone"              android:id="@+id/view_key_status_divider" /> -        <org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout +        <com.astuetz.PagerSlidingTabStrip              android:id="@+id/view_key_sliding_tab_layout"              android:layout_width="match_parent" -            android:layout_height="wrap_content" /> +            android:layout_height="?attr/actionBarSize" +            android:background="?attr/colorPrimary" +            android:textColor="#FFFFFF" +            app:pstsIndicatorColor="#FFFFFF" />          <android.support.v4.view.ViewPager              android:id="@+id/view_key_pager" diff --git a/OpenKeychain/src/main/res/raw/help_start.html b/OpenKeychain/src/main/res/raw/help_start.html index d54780491..75fe9de26 100644 --- a/OpenKeychain/src/main/res/raw/help_start.html +++ b/OpenKeychain/src/main/res/raw/help_start.html @@ -8,7 +8,7 @@ And don't add newlines before or after p tags because of transifex -->  <h2>Getting started</h2>  <p>First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p> -<p>On Android lower 4.4, it is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection. To share via QR Codes install <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a>. Clicking on the links will open Google Play Store or F-Droid for installation.</p> +<p>On Android lower 4.4, it is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection.</p>  <h2>I found a bug in OpenKeychain!</h2>  <p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p> | 
