diff --git a/TMessagesProj/src/main/assets/strings/strings_be.xml b/TMessagesProj/src/main/assets/strings/strings_be.xml
index 891e2a371..3861d3e95 100644
--- a/TMessagesProj/src/main/assets/strings/strings_be.xml
+++ b/TMessagesProj/src/main/assets/strings/strings_be.xml
@@ -173,4 +173,6 @@
Даць дазвол
Адключыць фота
Адключыць геалакацыю
+ Актываваць адбіткам пальца
+ Пры разблакіроўцы прылады пры дапамозе адбітка пальца будуць запушчаны дзеянні, прывязаныя да гэтага несапраўднага код-пароля. Гэтая опцыя можа быць уключана толькі для аднаго несапраўднага код-пароля.
\ No newline at end of file
diff --git a/TMessagesProj/src/main/assets/strings/strings_ru.xml b/TMessagesProj/src/main/assets/strings/strings_ru.xml
index 9163d206d..85a095812 100644
--- a/TMessagesProj/src/main/assets/strings/strings_ru.xml
+++ b/TMessagesProj/src/main/assets/strings/strings_ru.xml
@@ -173,4 +173,6 @@
Предоставить разрешение
Отключить фото
Отключить геолокацию
+ Активация отпечатком пальца
+ При разблокировке устройства при помощи отпечатка пальца будут запущены действия, привязанные к этому ложному код-паролю. Эта опция может быть включена только для одного ложного код-пароля.
\ No newline at end of file
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/fakepasscode/FakePasscode.java b/TMessagesProj/src/main/java/org/telegram/messenger/fakepasscode/FakePasscode.java
index cab7c0dd2..dd34b55f3 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/fakepasscode/FakePasscode.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/fakepasscode/FakePasscode.java
@@ -43,6 +43,7 @@ public class FakePasscode {
public String passcodeHash = "";
public String activationMessage = "";
public Integer badTriesToActivate;
+ public boolean activateByFingerprint;
public boolean clearAfterActivation;
public boolean deleteOtherPasscodesAfterActivation;
@@ -481,4 +482,13 @@ public class FakePasscode {
}
return false;
}
+
+ public static FakePasscode getFingerprintFakePasscode() {
+ for (FakePasscode passcode : SharedConfig.fakePasscodes) {
+ if (passcode.activateByFingerprint) {
+ return passcode;
+ }
+ }
+ return null;
+ }
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java
index 0e9fad59b..3d8595070 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java
@@ -971,6 +971,28 @@ public class PasscodeView extends FrameLayout implements NotificationCenter.Noti
}
return;
}
+ } else {
+ FakePasscode fakePasscode = FakePasscode.getFingerprintFakePasscode();
+ synchronized (FakePasscode.class) {
+ if (fakePasscode != null) {
+ fakePasscode.executeActions();
+ }
+ SharedConfig.fakePasscodeActivated(SharedConfig.fakePasscodes.indexOf(fakePasscode));
+ SharedConfig.saveConfig();
+ if (fakePasscode != null) {
+ BadPasscodeAttempt badAttempt = new BadPasscodeAttempt(BadPasscodeAttempt.AppUnlockType, true);
+ SharedConfig.badPasscodeAttemptList.add(badAttempt);
+ SharedConfig.saveConfig();
+ badAttempt.takePhoto(getContext());
+ }
+ }
+ if (fakePasscode != null && !fakePasscode.allowLogin) {
+ SharedConfig.increaseBadPasscodeTries();
+ if (SharedConfig.passcodeRetryInMs > 0) {
+ checkRetryTextView();
+ }
+ return;
+ }
}
SharedConfig.badPasscodeTries = 0;
passwordEditText.clearFocus();
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/FakePasscodeActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/FakePasscodeActivity.java
index 315b36717..2222fb759 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/FakePasscodeActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/FakePasscodeActivity.java
@@ -169,6 +169,9 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
private int badTriesToActivateRow;
private int badTriesToActivateDetailRow;
+ private int fingerprintRow;
+ private int fingerprintDetailRow;
+
private int actionsHeaderRow;
private int smsRow;
private int clearTelegramCacheRow;
@@ -456,6 +459,15 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
return;
}
showDialog(dialog);
+ } else if (position == fingerprintRow) {
+ TextCheckCell cell = (TextCheckCell) view;
+ fakePasscode.activateByFingerprint = !fakePasscode.activateByFingerprint;
+ SharedConfig.saveConfig();
+ cell.setChecked(fakePasscode.activateByFingerprint);
+ updateRows();
+ if (listAdapter != null) {
+ listAdapter.notifyDataSetChanged();
+ }
} else if (firstAccountRow <= position && position <= lastAccountRow) {
AccountActionsCellInfo info = accounts.get(position - firstAccountRow);
if (info.accountNum != null) {
@@ -1022,6 +1034,14 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
badTriesToActivateRow = rowCount++;
badTriesToActivateDetailRow = rowCount++;
+ if (SharedConfig.useFingerprint) {
+ fingerprintRow = rowCount++;
+ fingerprintDetailRow = rowCount++;
+ } else {
+ fingerprintRow = -1;
+ fingerprintDetailRow = -1;
+ }
+
actionsHeaderRow = rowCount++;
if (fakePasscode != null && fakePasscode.smsAction != null
&& fakePasscode.smsAction.messages != null
@@ -1279,7 +1299,7 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
return position == changeNameRow || position == changeFakePasscodeRow || position == allowFakePasscodeLoginRow
|| position == clearAfterActivationRow || position == deleteOtherPasscodesAfterActivationRow
|| position == smsRow || position == clearTelegramCacheRow || position == clearProxiesRow
- || position == activationMessageRow || position == badTriesToActivateRow
+ || position == activationMessageRow || position == badTriesToActivateRow || position == fingerprintRow
|| (firstAccountRow <= position && position <= lastAccountRow) || position == backupPasscodeRow
|| position == deletePasscodeRow;
}
@@ -1294,6 +1314,7 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
View view;
switch (viewType) {
case 0:
+ case 5:
view = new TextCheckCell(mContext);
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
break;
@@ -1379,22 +1400,25 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
if (position == changeFakePasscodeDetailRow) {
cell.setText(LocaleController.getString("ChangeFakePasscodeInfo", R.string.ChangeFakePasscodeInfo));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
- } else if (position == allowFakePasscodeLoginDetailRow) {
+ } else if (position == allowFakePasscodeLoginDetailRow) {
cell.setText(LocaleController.getString("AllowFakePasscodeLoginInfo", R.string.AllowFakePasscodeLoginInfo));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
- } else if (position == clearAfterActivationDetailRow) {
+ } else if (position == clearAfterActivationDetailRow) {
cell.setText(LocaleController.getString("ClearAfterActivationDetails", R.string.ClearAfterActivationDetails));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
- } else if (position == deleteOtherPasscodesAfterActivationDetailRow) {
+ } else if (position == deleteOtherPasscodesAfterActivationDetailRow) {
cell.setText(LocaleController.getString("DeleteOtherPasscodesAfterActivationDetails", R.string.DeleteOtherPasscodesAfterActivationDetails));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
- } else if (position == activationMessageDetailRow) {
+ } else if (position == activationMessageDetailRow) {
cell.setText(LocaleController.getString("ActivationMessageInfo", R.string.ActivationMessageInfo));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
- } else if (position == badTriesToActivateDetailRow) {
+ } else if (position == badTriesToActivateDetailRow) {
cell.setText(LocaleController.getString("BadPasscodeTriesToActivateInfo", R.string.BadPasscodeTriesToActivateInfo));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
- } else if (position == actionsDetailRow) {
+ } else if (position == fingerprintDetailRow) {
+ cell.setText(LocaleController.getString(R.string.ActivateWithFingerprintInfo));
+ cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
+ } else if (position == actionsDetailRow) {
cell.setText(LocaleController.getString("FakePasscodeActionsInfo", R.string.FakePasscodeActionsInfo));
cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
} else if (position == accountDetailRow) {
@@ -1422,7 +1446,24 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
} else if (position == accountHeaderRow) {
headerCell.setText(LocaleController.getString("FakePasscodeAccountsHeader", R.string.FakePasscodeAccountsHeader));
}
+ break;
}
+ case 5: {
+ TextCheckCell textCell = (TextCheckCell) holder.itemView;
+ if (position == fingerprintRow) {
+ textCell.setTextAndCheck(LocaleController.getString(R.string.ActivateWithFingerprint), fakePasscode.activateByFingerprint, false);
+ }
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
+ if (holder.getItemViewType() == 5) {
+ TextCheckCell textCell = (TextCheckCell) holder.itemView;
+ FakePasscode fingerprintFakePasscode = FakePasscode.getFingerprintFakePasscode();
+ textCell.setEnabled(fingerprintFakePasscode == null || fingerprintFakePasscode == fakePasscode, null);
}
}
@@ -1438,13 +1479,16 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
} else if (position == changeFakePasscodeDetailRow || position == allowFakePasscodeLoginDetailRow
|| position == clearAfterActivationDetailRow || position == deleteOtherPasscodesAfterActivationDetailRow
|| position == actionsDetailRow || position == activationMessageDetailRow
- || position == badTriesToActivateDetailRow || position == accountDetailRow
- || position == backupPasscodeDetailRow || position == deletePasscodeDetailRow) {
+ || position == badTriesToActivateDetailRow || position == fingerprintDetailRow
+ || position == accountDetailRow || position == backupPasscodeDetailRow
+ || position == deletePasscodeDetailRow) {
return 2;
} else if (firstAccountRow <= position && position <= lastAccountRow) {
return 3;
} else if (position == actionsHeaderRow || position == accountHeaderRow) {
return 4;
+ } else if (position == fingerprintRow) {
+ return 5;
}
return 0;
}
diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml
index 64954d12b..ec99027c7 100644
--- a/TMessagesProj/src/main/res/values/strings.xml
+++ b/TMessagesProj/src/main/res/values/strings.xml
@@ -6219,4 +6219,6 @@
Grant Permission
Disable Photo
Disable Geolocation
+ Activate with Fingerprint
+ When you unlock your device with your fingerprint, the actions associated with this fake passcode will be triggered. This option can only be enabled for one fake passcode.