now asking for notification permission on the very first start
This commit is contained in:
parent
c58a6d7a23
commit
b802593f11
6 changed files with 71 additions and 7 deletions
|
|
@ -84,6 +84,6 @@
|
|||
android:excludeFromRecents="true"
|
||||
android:label=""
|
||||
android:name="io.github.sspanak.tt9.ui.dialogs.RequestPermissionDialog"
|
||||
android:theme="@style/TTheme.Preferences" />
|
||||
android:theme="@style/TTheme.AddWord" />
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package io.github.sspanak.tt9.ime;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Dialog;
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
|
|
@ -22,7 +23,9 @@ import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
|||
import io.github.sspanak.tt9.ui.UI;
|
||||
import io.github.sspanak.tt9.ui.dialogs.ChangeLanguageDialog;
|
||||
import io.github.sspanak.tt9.ui.dialogs.PopupDialog;
|
||||
import io.github.sspanak.tt9.ui.dialogs.RequestPermissionDialog;
|
||||
import io.github.sspanak.tt9.util.Logger;
|
||||
import io.github.sspanak.tt9.util.sys.DeviceInfo;
|
||||
import io.github.sspanak.tt9.util.sys.SystemSettings;
|
||||
|
||||
public class TraditionalT9 extends MainViewHandler {
|
||||
|
|
@ -175,6 +178,8 @@ public class TraditionalT9 extends MainViewHandler {
|
|||
DictionaryLoader.autoLoad(this, mLanguage);
|
||||
}
|
||||
|
||||
askForNotifications();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -226,6 +231,14 @@ public class TraditionalT9 extends MainViewHandler {
|
|||
}
|
||||
|
||||
|
||||
private void askForNotifications() {
|
||||
if (DeviceInfo.AT_LEAST_ANDROID_13 && !InputModeKind.isPassthrough(mInputMode) && settings.shouldAskForNotifications()) {
|
||||
settings.setNotificationsApproved(false);
|
||||
RequestPermissionDialog.show(this, Manifest.permission.POST_NOTIFICATIONS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* On Android 11+ the IME is sometimes not killed when the user switches to a different one.
|
||||
* Here we attempt to detect if we are disabled, then hide and kill ourselves.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package io.github.sspanak.tt9.ime;
|
||||
|
||||
import android.Manifest;
|
||||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.ime.voice.VoiceInputError;
|
||||
import io.github.sspanak.tt9.ime.voice.VoiceInputOps;
|
||||
|
|
@ -90,7 +92,7 @@ abstract class VoiceHandler extends TypingHandler {
|
|||
Logger.e(LOG_TAG, "Failed to listen. " + error.debugMessage);
|
||||
statusBar.setError(error.toString());
|
||||
if (error.isNoPermission()) {
|
||||
RequestPermissionDialog.show(this);
|
||||
RequestPermissionDialog.show(this, Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import android.view.Gravity;
|
|||
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
|
||||
import io.github.sspanak.tt9.BuildConfig;
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.util.Logger;
|
||||
import io.github.sspanak.tt9.util.sys.DeviceInfo;
|
||||
|
|
@ -41,6 +42,17 @@ public class SettingsUI extends SettingsTyping {
|
|||
return prefs.getBoolean("add_word_no_confirmation", false);
|
||||
}
|
||||
|
||||
public boolean shouldAskForNotifications() {
|
||||
return getStringifiedInt("pref_asked_for_notifications_version", 0) < BuildConfig.VERSION_CODE;
|
||||
}
|
||||
|
||||
public void setNotificationsApproved(boolean yes) {
|
||||
prefsEditor.putString(
|
||||
"pref_asked_for_notifications_version",
|
||||
Integer.toString(yes ? Integer.MAX_VALUE : BuildConfig.VERSION_CODE)
|
||||
);
|
||||
}
|
||||
|
||||
public boolean isStatusIconEnabled() {
|
||||
return prefs.getBoolean("pref_status_icon", DeviceInfo.IS_QIN_F21 || !DeviceInfo.noKeyboard(context));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,23 +11,32 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.ime.TraditionalT9;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.ui.UI;
|
||||
import io.github.sspanak.tt9.util.sys.Permissions;
|
||||
|
||||
public class RequestPermissionDialog extends AppCompatActivity {
|
||||
public static final String PARAMETER_PERMISSION = "tt9.popup_dialog.parameter.permission";
|
||||
|
||||
private final Permissions permissions;
|
||||
|
||||
|
||||
public RequestPermissionDialog() {
|
||||
super();
|
||||
permissions = new Permissions(this);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedData) {
|
||||
super.onCreate(savedData);
|
||||
render(getPermission());
|
||||
}
|
||||
|
||||
// currently there is only one permission to request, so we don't ovecomplicate it
|
||||
permissions.requestRecordAudio();
|
||||
@Override
|
||||
public void finish() {
|
||||
super.finish();
|
||||
reviveMain();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -35,9 +44,9 @@ public class RequestPermissionDialog extends AppCompatActivity {
|
|||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
showPermissionRequiredMessage(permissions, grantResults);
|
||||
finish();
|
||||
reviveMain();
|
||||
}
|
||||
|
||||
|
||||
private void reviveMain() {
|
||||
Intent intent = new Intent(this, TraditionalT9.class);
|
||||
intent.putExtra(PopupDialog.INTENT_CLOSE, "");
|
||||
|
|
@ -52,13 +61,38 @@ public class RequestPermissionDialog extends AppCompatActivity {
|
|||
if (permissions[0].equals(Manifest.permission.RECORD_AUDIO) && grantResults[0] == PackageManager.PERMISSION_DENIED) {
|
||||
UI.toastLong(this, R.string.voice_input_mic_permission_is_needed);
|
||||
}
|
||||
|
||||
if (permissions[0].equals(Manifest.permission.POST_NOTIFICATIONS)) {
|
||||
new SettingsStore(this).setNotificationsApproved(grantResults[0] == PackageManager.PERMISSION_GRANTED);
|
||||
}
|
||||
}
|
||||
|
||||
public static void show(InputMethodService ims) {
|
||||
|
||||
@NonNull
|
||||
private String getPermission() {
|
||||
Intent i = getIntent();
|
||||
String permission = i != null ? i.getStringExtra(PARAMETER_PERMISSION) : "";
|
||||
return permission != null ? permission : "";
|
||||
}
|
||||
|
||||
|
||||
private void render(@NonNull String permission) {
|
||||
if (permission.equals(Manifest.permission.RECORD_AUDIO) && permissions.noRecordAudio()) {
|
||||
permissions.requestRecordAudio();
|
||||
} else if (permission.equals(Manifest.permission.POST_NOTIFICATIONS) && permissions.noPostNotifications()) {
|
||||
permissions.requestPostNotifications();
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void show(InputMethodService ims, String permission) {
|
||||
Intent intent = new Intent(ims, RequestPermissionDialog.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
|
||||
intent.putExtra(PARAMETER_PERMISSION, permission);
|
||||
ims.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@ public class Permissions {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean noRecordAudio() {
|
||||
return DeviceInfo.AT_LEAST_ANDROID_6 && isRefused(Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
|
||||
public void requestRecordAudio() {
|
||||
requestPermission(Manifest.permission.RECORD_AUDIO);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue