com.z299studio.pb.PasswordGenerator.java Source code

Java tutorial

Introduction

Here is the source code for com.z299studio.pb.PasswordGenerator.java

Source

/*
* Copyright 2015 Qianqian Zhu <zhuqianqian.299@gmail.com> All rights reserved.
*
* 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 com.z299studio.pb;

import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
import android.support.v4.app.DialogFragment;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class PasswordGenerator extends DialogFragment implements View.OnClickListener {

    private int mType;
    private EditText mTargetView;
    private TextView mPasswordView;
    private TextView mLengthTitle;
    private int mLength;
    private CheckBox[] mCheckBoxes;

    public static PasswordGenerator build(int type, EditText target) {
        PasswordGenerator pg = new PasswordGenerator();
        pg.mType = type;
        pg.mTargetView = target;
        return pg;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (Application.getInstance() == null || Application.getInstance().getAccountManager() == null) {
            return null;
        }
        View rootView = inflater.inflate(R.layout.dialog_pwd_generator, container, false);
        Button ok = (Button) rootView.findViewById(R.id.ok);
        ok.setOnClickListener(this);
        mPasswordView = (TextView) rootView.findViewById(R.id.text_pwd);
        mPasswordView.setOnClickListener(this);
        Button button = (Button) rootView.findViewById(R.id.cancel);
        button.setOnClickListener(this);
        button = (Button) rootView.findViewById(R.id.refresh);
        button.setOnClickListener(this);
        SeekBar sb = (SeekBar) rootView.findViewById(R.id.sb_length);
        tintSeekBar(sb);
        sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mLength = progress + 4;
                mLengthTitle.setText(getResources().getString(R.string.length, mLength));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
        });
        mLengthTitle = (TextView) rootView.findViewById(R.id.tv_length);
        mCheckBoxes = new CheckBox[4];
        int ids[] = { R.id.cb_uppercase, R.id.cb_lowercase, R.id.cb_digit, R.id.cb_char };
        for (int i = 0; i < mCheckBoxes.length; ++i) {
            mCheckBoxes[i] = (CheckBox) rootView.findViewById(ids[i]);
        }
        if (mType == AccountManager.EntryType.PIN) {
            mCheckBoxes[0].setChecked(false);
            mCheckBoxes[1].setChecked(false);
            mCheckBoxes[3].setChecked(false);
            mLength = 6;
            mPasswordView.setText(Application.generate(false, false, true, false, false, 6, 6));
            sb.setProgress(2);
            mLengthTitle.setText(getResources().getString(R.string.length, 6));
        } else {
            mPasswordView.setText(Application.generate(true, true, true, true, true, 10, 10));
            sb.setProgress(6);
            mLength = 10;
            mLengthTitle.setText(getResources().getString(R.string.length, 10));
        }
        return rootView;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.refresh:
        case R.id.text_pwd:
            mPasswordView.setText(Application.generate(mCheckBoxes[0].isChecked(), mCheckBoxes[1].isChecked(),
                    mCheckBoxes[2].isChecked(), mCheckBoxes[3].isChecked(), mCheckBoxes[3].isChecked(), mLength,
                    mLength));
            break;

        case R.id.ok:
            if (mTargetView != null) {
                mTargetView.setText(mPasswordView.getText());
            }
        case R.id.cancel:
            this.dismiss();
            break;
        }
    }

    private void tintSeekBar(SeekBar sb) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            Drawable thumb = ContextCompat.getDrawable(getContext(), R.drawable.thumb);
            LayerDrawable progress = (LayerDrawable) ContextCompat.getDrawable(getContext(), R.drawable.progress);
            progress.getDrawable(0).setColorFilter(C.ThemedColors[C.colorIconNormal], PorterDuff.Mode.SRC_ATOP);
            progress.getDrawable(1).setColorFilter(C.ThemedColors[C.colorAccent], PorterDuff.Mode.SRC_ATOP);
            sb.setProgressDrawable(progress);
            thumb.setColorFilter(C.ThemedColors[C.colorAccent], PorterDuff.Mode.SRC_ATOP);
            sb.setThumb(thumb);
        }
    }
}