TRsnnPP♥️️ v2.7.0版本的 MD5 值为:b2c0ede0dab6219a3c74c99b83ed6b25

以下内容为反编译后的 LoginContronllerBaseActivity.java 源代码,内容仅作参考


package im.uslhaplvsp.ui.hui.login;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Property;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import butterknife.internal.DebouncingOnClickListener;
import butterknife.internal.Utils;
import com.blankj.utilcode.util.ScreenUtils;
import im.uslhaplvsp.messenger.AndroidUtilities;
import im.uslhaplvsp.messenger.ApplicationLoader;
import im.uslhaplvsp.messenger.LocaleController;
import im.uslhaplvsp.messenger.R;
import im.uslhaplvsp.messenger.UserConfig;
import im.uslhaplvsp.messenger.utils.RegexUtils;
import im.uslhaplvsp.tgnet.ConnectionsManager;
import im.uslhaplvsp.tgnet.TLRPC;
import im.uslhaplvsp.ui.actionbar.ActionBar;
import im.uslhaplvsp.ui.actionbar.AlertDialog;
import im.uslhaplvsp.ui.actionbar.BaseFragment;
import im.uslhaplvsp.ui.actionbar.Theme;
import im.uslhaplvsp.ui.components.LayoutHelper;
import im.uslhaplvsp.ui.components.SlideView;
import im.uslhaplvsp.ui.components.toast.ToastUtils;
import im.uslhaplvsp.ui.hviews.MryRoundButton;
import im.uslhaplvsp.ui.hviews.MryTextView;
import im.uslhaplvsp.ui.utils.KeyboardChangeListener;
import im.uslhaplvsp.ui.utils.timer.RunningFlagCountDownTimer;
import java.util.Locale;

public abstract class LoginContronllerBaseActivity extends BaseFragment implements KeyboardChangeListener.KeyBoardListener {
    protected FrameLayout actionBarContainer;
    protected boolean canBack;
    protected FrameLayout contentContainer;
    protected int currentViewIndex;
    protected boolean keyboardIsShown;
    protected KeyboardChangeListener mKeyboardChangeListener;
    protected boolean newAccount;
    protected ThisView[] pages;
    protected FrameLayout rootView;

    protected abstract void initPages(int i);

    protected abstract void initView();

    public class ThisView_ViewBinding implements Unbinder {
        private ThisView target;
        private View view7f090086;

        public ThisView_ViewBinding(ThisView thisView) {
            this(thisView, thisView);
        }

        public ThisView_ViewBinding(final ThisView thisView, View view) {
            this.target = thisView;
            thisView.tvTitle = (MryTextView) Utils.findRequiredViewAsType(view, 2131297530, "field 'tvTitle'", MryTextView.class);
            View findRequiredView = Utils.findRequiredView(view, R.id.btn, "field 'btn' and method 'onClick'");
            thisView.btn = (MryRoundButton) Utils.castView(findRequiredView, R.id.btn, "field 'btn'", MryRoundButton.class);
            this.view7f090086 = findRequiredView;
            findRequiredView.setOnClickListener(new DebouncingOnClickListener() {
                @Override
                public void doClick(View view2) {
                    thisView.onClick(view2);
                }
            });
        }

        @Override
        public void unbind() {
            ThisView thisView = this.target;
            if (thisView == null) {
                throw new IllegalStateException("Bindings already cleared.");
            }
            this.target = null;
            thisView.tvTitle = null;
            thisView.btn = null;
            this.view7f090086.setOnClickListener(null);
            this.view7f090086 = null;
        }
    }

    public LoginContronllerBaseActivity() {
        this(UserConfig.selectedAccount, null);
    }

    public LoginContronllerBaseActivity(int i, Bundle bundle) {
        this.canBack = true;
        bundle = bundle == null ? new Bundle() : bundle;
        bundle.putInt("account", i);
        bundle.putBoolean("newAccount", i != UserConfig.selectedAccount);
        setArguments(bundle);
    }

    @Override
    public boolean onFragmentCreate() {
        if (getArguments() != null) {
            this.currentAccount = getArguments().getInt("account");
            this.newAccount = getArguments().getBoolean("newAccount", false);
            boolean z = getArguments().getBoolean("canBack", true);
            this.canBack = z;
            if (z) {
                int i = 0;
                for (int i2 = 0; i2 < 3; i2++) {
                    if (!UserConfig.getInstance(i2).isClientActivated()) {
                        i++;
                    }
                }
                if (i == 3) {
                    this.canBack = false;
                }
            }
        }
        return super.onFragmentCreate();
    }

    @Override
    public View createView(Context context) {
        this.rootView = new FrameLayout(context);
        ScrollView scrollView = new ScrollView(context) {
            @Override
            public boolean requestChildRectangleOnScreen(View view, Rect rect, boolean z) {
                rect.bottom += AndroidUtilities.dp(40.0f);
                return super.requestChildRectangleOnScreen(view, rect, z);
            }
        };
        scrollView.setFillViewport(true);
        this.fragmentView = this.rootView;
        this.fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
        this.rootView.addView(scrollView, LayoutHelper.createScroll(-1, -1, 51));
        KeyboardChangeListener keyboardChangeListener = new KeyboardChangeListener(scrollView);
        this.mKeyboardChangeListener = keyboardChangeListener;
        keyboardChangeListener.setKeyBoardListener(this);
        FrameLayout frameLayout = new FrameLayout(context);
        this.contentContainer = frameLayout;
        scrollView.addView(frameLayout, LayoutHelper.createFrame(-1, -1, 51));
        initActionBar();
        initView();
        return this.fragmentView;
    }

    @Override
    public void onResume() {
        super.onResume();
        if (this.newAccount) {
            ConnectionsManager.getInstance(this.currentAccount).setAppPaused(false, false);
        }
        AndroidUtilities.requestAdjustResize(getParentActivity(), this.classGuid);
    }

    @Override
    public void onPause() {
        super.onPause();
        AndroidUtilities.removeAdjustResize(getParentActivity(), this.classGuid);
        if (this.newAccount) {
            ConnectionsManager.getInstance(this.currentAccount).setAppPaused(true, false);
        }
    }

    protected void initActionBar() {
        this.actionBar.setAddToContainer(false);
        this.actionBar.setBackgroundColor(0);
        this.actionBar.setCastShadows(false);
        FrameLayout frameLayout = new FrameLayout(getParentActivity());
        this.actionBarContainer = frameLayout;
        frameLayout.setBackgroundColor(0);
        this.rootView.addView(this.actionBarContainer, LayoutHelper.createFrame(-1, -2, 51));
        this.actionBarContainer.addView(this.actionBar, LayoutHelper.createFrame(-1, -2, 51));
        this.actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
            @Override
            public void onItemClick(int i) {
                super.onItemClick(i);
                if (i == -1 && LoginContronllerBaseActivity.this.onBackPressed()) {
                    LoginContronllerBaseActivity.this.finishFragment();
                }
            }
        });
    }

    public void setAcitonBar(int i, ThisView thisView) {
        if (this.canBack) {
            this.actionBar.setBackButtonImage((thisView.needBackButton() || this.newAccount) ? R.mipmap.ic_back : 0);
        }
    }

    public final void toPage(int i, boolean z, Bundle bundle, boolean z2) {
        initPages(i);
        ThisView[] thisViewArr = this.pages;
        if (thisViewArr[i] == null) {
            return;
        }
        if (this.currentViewIndex == i && thisViewArr[i].getParent() != null) {
            this.pages[this.currentViewIndex].setParams(bundle, false);
            return;
        }
        if (this.pages[i].getParent() == null) {
            this.contentContainer.addView(this.pages[i], LayoutHelper.createFrame(-1, -1, 51));
        }
        if (z) {
            ThisView[] thisViewArr2 = this.pages;
            final ThisView thisView = thisViewArr2[this.currentViewIndex];
            final ThisView thisView2 = thisViewArr2[i];
            thisView2.setClickable(true);
            this.currentViewIndex = i;
            thisView2.setParams(bundle, false);
            setParentActivityTitle(thisView2.getHeaderName());
            setAcitonBar(i, thisView2);
            thisView2.onShow();
            int i2 = AndroidUtilities.displaySize.x;
            if (z2) {
                i2 = -i2;
            }
            thisView2.setX(i2);
            thisView2.setVisibility(0);
            AnimatorSet animatorSet = new AnimatorSet();
            animatorSet.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animator) {
                    thisView.clearFocus();
                    thisView.setVisibility(8);
                    thisView.setX(0.0f);
                    thisView2.onShowEnd();
                }
            });
            Animator[] animatorArr = new Animator[2];
            Property property = View.TRANSLATION_X;
            float[] fArr = new float[1];
            fArr[0] = z2 ? AndroidUtilities.displaySize.x : -AndroidUtilities.displaySize.x;
            animatorArr[0] = ObjectAnimator.ofFloat(thisView, (Property<ThisView, Float>) property, fArr);
            animatorArr[1] = ObjectAnimator.ofFloat(thisView2, (Property<ThisView, Float>) View.TRANSLATION_X, 0.0f);
            animatorSet.playTogether(animatorArr);
            animatorSet.setDuration(300L);
            animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
            animatorSet.start();
            return;
        }
        this.pages[this.currentViewIndex].setVisibility(8);
        this.currentViewIndex = i;
        this.pages[i].setParams(bundle, false);
        this.pages[i].setVisibility(0);
        this.pages[i].onShow();
        this.pages[i].onShowEnd();
        setAcitonBar(i, this.pages[i]);
        setParentActivityTitle(this.pages[i].getHeaderName());
        this.pages[i].onShow();
    }

    public void parseError(TLRPC.TL_error tL_error, String str) {
        if (tL_error == null || TextUtils.isEmpty(tL_error.text)) {
            return;
        }
        if (tL_error.text.contains("PHONE_NUMBER_INVALID")) {
            needShowInvalidAlert(str, false);
            return;
        }
        if (tL_error.text.contains("PHONE_PASSWORD_FLOOD")) {
            needShowAlert(LocaleController.getString(R.string.FloodWait));
            return;
        }
        if (tL_error.text.contains("PHONE_NUMBER_FLOOD")) {
            needShowAlert(LocaleController.getString(R.string.PhoneNumberFlood));
            return;
        }
        if (tL_error.text.contains("PHONE_NUMBER_BANNED") || tL_error.text.contains("ACCOUNT_RESTRICTED")) {
            needShowInvalidAlert(str, true);
            return;
        }
        if (tL_error.text.contains("PHONE_CODE_EMPTY") || tL_error.text.contains("PHONE_CODE_INVALID")) {
            needShowAlert(LocaleController.getString("InvalidCode", R.string.InvalidCode));
            return;
        }
        if (tL_error.text.contains("PHONE_CODE_EXPIRED")) {
            needShowAlert(LocaleController.getString("VerificationcodeExpired", R.string.VerificationcodeExpired));
            return;
        }
        if (tL_error.text.startsWith("FLOOD_WAIT")) {
            needShowAlert(LocaleController.getString(R.string.FloodWait));
            return;
        }
        if (tL_error.text.startsWith("CODE_VERIFY_LIMIT")) {
            needShowAlert(LocaleController.getString(R.string.CODE_VERIFY_LIMIT));
            return;
        }
        if (tL_error.text.startsWith("CODE_INVALID")) {
            needShowAlert(LocaleController.getString(R.string.InvalidCode));
            return;
        }
        if (tL_error.text.startsWith("PASSWORD_ERROR")) {
            needShowAlert(LocaleController.getString(R.string.LoginPwdError));
            return;
        }
        if (tL_error.text.startsWith("PHONE_NOT_SIGNUP") || tL_error.text.startsWith("USERNAME_NOT_EXIST")) {
            needShowAlert(LocaleController.getString(R.string.UserNotRegistered));
            return;
        }
        if (tL_error.text.startsWith("PHONE_NUMBER_OCCUPIED")) {
            needShowAlert(LocaleController.getString(R.string.UsernameAlreadyExists));
            return;
        }
        if (tL_error.text.startsWith("CURRENT_PWD_ERR")) {
            needShowAlert(LocaleController.getString(R.string.OldPwdError));
            return;
        }
        if (tL_error.text.startsWith("NOTEQUAL_TAG")) {
            needShowAlert(LocaleController.getString(R.string.LoginPwdError));
            return;
        }
        if (tL_error.text.startsWith("PASSWORD_INVALID")) {
            needShowAlert(LocaleController.getString(R.string.PasswordDoNotMatch));
            return;
        }
        if (tL_error.text.startsWith("PASSWORD_MANY")) {
            needShowAlert(LocaleController.getString(R.string.PWdErrorMany));
            return;
        }
        if (tL_error.text.startsWith("USERNAME_INVALID")) {
            needShowAlert(LocaleController.getString(R.string.UsernameInvalid));
            return;
        }
        if (tL_error.text.startsWith("USERNAME_OCCUPIED")) {
            needShowAlert(LocaleController.getString(R.string.UsernameInUse));
            return;
        }
        if (tL_error.text.contains("IPORDE_LIMIT")) {
            needShowAlert(LocaleController.getString("IpOrDeLimit", R.string.IpOrDeLimit));
            return;
        }
        if (tL_error.text.equals("INTERNAL")) {
            needShowAlert(LocaleController.getString("InternalError", R.string.InternalError));
            return;
        }
        needShowAlert(LocaleController.getString(R.string.OperationFailedPleaseTryAgain) + "\n" + tL_error.text);
    }

    protected void needShowInvalidAlert(final String str, final boolean z) {
        if (getParentActivity() == null) {
            return;
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
        builder.setTitle(LocaleController.getString(R.string.AppName));
        if (z) {
            builder.setMessage(LocaleController.getString(R.string.BannedPhoneNumber));
        } else {
            builder.setMessage(LocaleController.getString(R.string.InvalidPhoneNumber));
        }
        builder.setNeutralButton(LocaleController.getString(R.string.BotHelp), new DialogInterface.OnClickListener() {
            @Override
            public final void onClick(DialogInterface dialogInterface, int i) {
                LoginContronllerBaseActivity.this.lambda$needShowInvalidAlert$0$LoginContronllerBaseActivity(z, str, dialogInterface, i);
            }
        });
        builder.setPositiveButton(LocaleController.getString(R.string.OK), null);
        showDialog(builder.create());
    }

    public void lambda$needShowInvalidAlert$0$LoginContronllerBaseActivity(boolean z, String str, DialogInterface dialogInterface, int i) {
        try {
            PackageInfo packageInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0);
            String format = String.format(Locale.US, "%s (%d)", packageInfo.versionName, Integer.valueOf(packageInfo.versionCode));
            Intent intent = new Intent("android.intent.action.SEND");
            intent.setType("message/rfc822");
            intent.putExtra("android.intent.extra.EMAIL", new String[]{"login@stel.com"});
            if (z) {
                intent.putExtra("android.intent.extra.SUBJECT", "Banned phone number: " + str);
                intent.putExtra("android.intent.extra.TEXT", "I'm trying to use my mobile phone number: " + str + "\nBut uslhaplvsp says it's banned. Please help.\n\nApp version: " + format + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault());
            } else {
                intent.putExtra("android.intent.extra.SUBJECT", "Invalid phone number: " + str);
                intent.putExtra("android.intent.extra.TEXT", "I'm trying to use my mobile phone number: " + str + "\nBut uslhaplvsp says it's invalid. Please help.\n\nApp version: " + format + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault());
            }
            getParentActivity().startActivity(Intent.createChooser(intent, "Send email..."));
        } catch (Exception unused) {
            needShowAlert(LocaleController.getString(R.string.NoMailInstalled));
        }
    }

    public void needShowAlert(String str) {
        if (str == null || getParentActivity() == null) {
            return;
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
        builder.setTitle(LocaleController.getString(R.string.AppName));
        builder.setMessage(str);
        builder.setPositiveButton(LocaleController.getString(R.string.OK), null);
        showDialog(builder.create());
    }

    public boolean checkPasswordRule(TextView textView, boolean z) {
        if (textView != null && textView.length() != 0) {
            String trim = textView.getText().toString().trim();
            if (trim.length() >= 8 && trim.length() <= 16 && RegexUtils.hasLetterAndNumber(trim, false)) {
                return true;
            }
            if (z) {
                ToastUtils.show(R.string.LoginPwdRule);
            }
        }
        return false;
    }

    @Override
    public void saveSelfArgs(Bundle bundle) {
        super.saveSelfArgs(bundle);
        bundle.putInt("currentIndex", this.currentViewIndex);
        bundle.putBundle("pageArgs", getArguments());
        Bundle bundle2 = new Bundle();
        if (this.pages == null) {
            return;
        }
        int i = 0;
        while (true) {
            ThisView[] thisViewArr = this.pages;
            if (i >= thisViewArr.length) {
                return;
            }
            ThisView thisView = thisViewArr[i];
            if (thisView != null) {
                thisView.saveStateParams(bundle2);
                bundle.putBundle("currentIndexB" + i, bundle2);
            }
            i++;
        }
    }

    @Override
    public void restoreSelfArgs(Bundle bundle) {
        super.restoreSelfArgs(bundle);
        this.currentViewIndex = bundle.getInt("currentIndex");
        setArguments(bundle.getBundle("pageArgs"));
        if (this.pages == null) {
            return;
        }
        int i = 0;
        while (true) {
            ThisView[] thisViewArr = this.pages;
            if (i >= thisViewArr.length) {
                return;
            }
            thisViewArr[i].restoreStateParams(bundle.getBundle("currentIndexB" + i));
            i++;
        }
    }

    @Override
    public boolean onBackPressed() {
        ThisView[] thisViewArr = this.pages;
        if (thisViewArr != null) {
            int i = this.currentViewIndex;
            if (i == 0) {
                if (this.canBack) {
                    for (ThisView thisView : thisViewArr) {
                        if (thisView != null) {
                            thisView.onDestroyActivity();
                        }
                    }
                    return true;
                }
            } else if (i == 1) {
                thisViewArr[i].onBackPressed(true);
                toPage(0, true, null, true);
            } else if (i == 2) {
                thisViewArr[i].onBackPressed(true);
                toPage(1, true, null, true);
            }
        }
        return false;
    }

    @Override
    public void onKeyboardChange(boolean z, int i) {
        this.keyboardIsShown = z;
        MryRoundButton mryRoundButton = this.pages[this.currentViewIndex].btn;
        if (isFinishing() || mryRoundButton == null || this.actionBar == null || !z || !(this.fragmentView instanceof ScrollView)) {
            return;
        }
        int dp = (i + AndroidUtilities.dp(10.0f)) - (ScreenUtils.getScreenHeight() - mryRoundButton.getBottom());
        if (this.newAccount) {
            dp += this.actionBar != null ? this.actionBar.getHeight() : 0;
        }
        ((ScrollView) this.fragmentView).smoothScrollBy(0, dp);
    }

    @Override
    public void onFragmentDestroy() {
        super.onFragmentDestroy();
        ThisView[] thisViewArr = this.pages;
        if (thisViewArr != null) {
            for (ThisView thisView : thisViewArr) {
                if (thisView != null) {
                    thisView.onDestroyActivity();
                }
            }
            this.pages = null;
        }
        KeyboardChangeListener keyboardChangeListener = this.mKeyboardChangeListener;
        if (keyboardChangeListener != null) {
            keyboardChangeListener.destroy();
            this.mKeyboardChangeListener = null;
        }
        this.rootView = null;
    }

    public static class ThisView extends SlideView {

        @BindView(R.id.btn)
        MryRoundButton btn;
        protected RunningFlagCountDownTimer countDownTimer;
        protected Bundle params;

        @BindView(2131297530)
        MryTextView tvTitle;
        private Unbinder unbinder;

        protected boolean checkEnterInfo(boolean z, boolean z2, boolean z3) {
            return true;
        }

        @Override
        public boolean needBackButton() {
            return true;
        }

        public ThisView(Context context) {
            super(context);
        }

        @Override
        public void setParams(Bundle bundle, boolean z) {
            super.setParams(bundle, z);
            if (bundle != null) {
                this.params = bundle;
            }
        }

        @Override
        public Bundle getParams() {
            return this.params;
        }

        public void initView() {
            this.unbinder = ButterKnife.bind(this, this);
            this.tvTitle.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
            this.btn.setPrimaryRadiusAdjustBoundsFillStyle();
            loadSaveState();
        }

        @Override
        public void onShow() {
            super.onShow();
        }

        public void onShowEnd() {
            setClickable(true);
        }

        @OnClick({R.id.btn})
        public void onClick(View view) {
            if (view.getId() != 2131296390) {
                return;
            }
            checkEnterInfo(false, true, true);
        }

        @Override
        public String getHeaderName() {
            return this.tvTitle.getText().toString().trim();
        }

        @Override
        public void saveStateParams(Bundle bundle) {
            super.saveStateParams(bundle);
        }

        protected SharedPreferences getSp() {
            return ApplicationLoader.applicationContext.getSharedPreferences("logininfo2", 0);
        }

        protected void loadSaveState() {
            long j = ApplicationLoader.applicationContext.getSharedPreferences("logininfo2", 0).getLong("countDownTimer", 0L);
            if (j > 0) {
                startCountDownTimer(j);
            }
        }

        protected void saveLastSendSmsTime() {
            SharedPreferences.Editor edit = getSp().edit();
            edit.putLong("last_time", System.currentTimeMillis());
            edit.apply();
        }

        protected long getLastSendSmsTime() {
            return getSp().getLong("last_time", 0L);
        }

        protected void startCountDownTimer(long j) {
            if (this.countDownTimer == null) {
                RunningFlagCountDownTimer runningFlagCountDownTimer = new RunningFlagCountDownTimer(j, 1000L) {
                    @Override
                    public void onTick(long j2) {
                        super.onTick(j2);
                        ThisView.this.onTimerTick(j2);
                    }

                    @Override
                    public void onFinish() {
                        super.onFinish();
                        ThisView.this.onTimerFinish();
                    }
                };
                this.countDownTimer = runningFlagCountDownTimer;
                runningFlagCountDownTimer.startInternal();
            }
        }

        protected void onTimerTick(long j) {
            MryRoundButton mryRoundButton = this.btn;
            if (mryRoundButton != null) {
                mryRoundButton.setText(LocaleController.formatString("ResendPhoneCodeCountDown2", R.string.ResendPhoneCodeCountDown2, Long.valueOf(j / 1000)));
                this.btn.setEnabled(false);
            }
        }

        protected void onTimerFinish() {
            MryRoundButton mryRoundButton = this.btn;
            if (mryRoundButton != null) {
                mryRoundButton.setText(LocaleController.getString(R.string.SendVerifyCode));
                this.btn.setEnabled(true);
            }
        }

        protected void stopTimer() {
            try {
                if (this.countDownTimer == null || !this.countDownTimer.isRunning()) {
                    return;
                }
                this.countDownTimer.cancelInternal();
                this.countDownTimer = null;
            } catch (Exception unused) {
            }
        }

        @Override
        public void onDestroyActivity() {
            super.onDestroyActivity();
            stopTimer();
            Unbinder unbinder = this.unbinder;
            if (unbinder != null) {
                try {
                    unbinder.unbind();
                } catch (Exception unused) {
                }
                this.unbinder = null;
            }
            this.params = null;
        }
    }
}