diff --git a/app/src/main/assets/changelog.txt b/app/src/main/assets/changelog.txt index c9f11337..29e43c2a 100644 --- a/app/src/main/assets/changelog.txt +++ b/app/src/main/assets/changelog.txt @@ -6,6 +6,9 @@ For privacy concerns. - 1.6.8 (2019-9-15) codename: kingus * Correction Rules database problem fixed + * Back button in permissions fixed + * Privacy information in permissions + * Russian thanks to alexesprit - 1.6.7 (2019-9-15) codename: jingus * Fixed non-foreground service crash Bug diff --git a/app/src/main/java/com/adam/aslfms/PermissionsActivity.java b/app/src/main/java/com/adam/aslfms/PermissionsActivity.java index c3ca0388..f329c4f3 100644 --- a/app/src/main/java/com/adam/aslfms/PermissionsActivity.java +++ b/app/src/main/java/com/adam/aslfms/PermissionsActivity.java @@ -37,30 +37,37 @@ import android.util.Log; import android.view.View; import android.widget.Button; +import android.widget.ImageButton; import android.widget.TextView; import com.adam.aslfms.util.AppSettings; import com.adam.aslfms.util.MyContextWrapper; import com.adam.aslfms.util.Util; + /** * @author a93h * @since 1.5.8 */ public class PermissionsActivity extends AppCompatActivity { + private enum ButtonChoice { SKIP, CONTINUE, BACK } + private static final String TAG = "PermissionsActivity"; + private static final int disabledColor = Color.argb(25, 0,0,0); + private static final int enabledColor = Color.argb(75, 0,255,0); + private static final int warningColor = Color.argb(80,255,0,0); + + private int WRITE_EXTERNAL_STORAGE; - int WRITE_EXTERNAL_STORAGE; - int disabledColor = Color.argb(25, 0,0,0); - int enabledColor = Color.argb(75, 0,255,0); - int warningColor = Color.argb(80,255,0,0); - - AppSettings settings = null; - Button skipBtn = null; - Button continueBtn = null; - Button externalPermBtn = null; - Button notifiPermBtn = null; - Button batteryPermBtn = null; + private boolean skipPermissions = false; + + private AppSettings settings = null; + private Button skipBtn = null; + private Button continueBtn = null; + private Button externalPermBtn = null; + private Button notifiPermBtn = null; + private Button batteryPermBtn = null; + private ImageButton privacyLinkBtn = null; Context ctx = this; @Override @@ -95,7 +102,14 @@ protected void onCreate(Bundle savedInstanceState) { checkCurrrentPermissions(); } + @Override + public void onBackPressed() { + leavePermissionsDialogue(this, ButtonChoice.BACK); + } + public void checkCurrrentPermissions(){ + privacyLinkBtn = findViewById(R.id.privacy_link_button); + skipBtn = findViewById(R.id.button_skip); skipBtn.setBackgroundColor(enabledColor); continueBtn = findViewById(R.id.button_continue); @@ -159,50 +173,9 @@ public void checkCurrrentPermissions(){ } }); - skipBtn.setOnClickListener((View view) -> { - if(!allPermsCheck()) { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: - settings.setKeyBypassNewPermissions(1); // user has bypassed permissions is True - int v = Util.getAppVersionCode(ctx , getPackageName()); - if (settings.getWhatsNewViewedVersion() < v) { - resetVersionCode(v); - } - Intent intent = new Intent(ctx, SettingsActivity.class); - ctx.startActivity(intent); - Util.runServices(ctx); - break; - case DialogInterface.BUTTON_NEGATIVE: - break; - } - } - }; - AlertDialog.Builder builder = new AlertDialog.Builder(this); - String message = ctx.getResources().getString(R.string.warning) + "! " + ctx.getResources().getString(R.string.are_you_sure); - if (Build.VERSION_CODES.O <= Build.VERSION.SDK_INT && !Util.checkNotificationListenerPermission(ctx)){ - message += " - " + ctx.getResources().getString(R.string.warning_will_not_scrobble); - message += " - " + ctx.getResources().getString(R.string.permission_notification_listener); - } - builder.setMessage(message).setPositiveButton(R.string.yes, dialogClickListener) - .setNegativeButton(R.string.no, dialogClickListener).show(); - } - }); - continueBtn.setOnClickListener((View view) -> { - if(allPermsCheck()){ - settings.setKeyBypassNewPermissions(0); // user has bypassed permissions is false - int v = Util.getAppVersionCode(this, getPackageName()); - if (settings.getWhatsNewViewedVersion() < v) { - resetVersionCode(v); - } - Intent intent = new Intent(ctx, SettingsActivity.class); - ctx.startActivity(intent); - Util.runServices(ctx); - } - }); - + skipBtn.setOnClickListener((View view) -> leavePermissionsDialogue(view.getContext(), ButtonChoice.SKIP)); + continueBtn.setOnClickListener((View view) -> leavePermissionsDialogue(view.getContext() , ButtonChoice.CONTINUE)); + privacyLinkBtn.setOnClickListener((View view) -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/simple-last-fm-scrobbler/sls/wiki/Privacy-Concerns")))); } public void colorPermission(boolean enabled, Button button){ @@ -227,8 +200,33 @@ private boolean allPermsCheck() { && Util.checkBatteryOptimizationsPermission(this); } - private void resetVersionCode(int v){ - new WhatsNewDialog(this).show(); - settings.setWhatsNewViewedVersion(v); + private void resolveChoice(int bypass){ + settings.setWhatsNewViewedVersion(Util.getAppVersionCode(ctx,getPackageName())); + settings.setKeyBypassNewPermissions(bypass); + finish(); + } + + private void leavePermissionsDialogue(Context context, ButtonChoice buttonChoice){ + if (allPermsCheck() && buttonChoice != ButtonChoice.SKIP){ + resolveChoice(0); // user has bypassed permissions is False + } else if (!allPermsCheck() && buttonChoice != ButtonChoice.CONTINUE) { + DialogInterface.OnClickListener dialogClickListener = (DialogInterface dialog, int which) -> { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + resolveChoice(1); // user has bypassed permissions is True + break; + case DialogInterface.BUTTON_NEGATIVE: + break; + } + }; + AlertDialog.Builder builder = new AlertDialog.Builder(context); + String message = context.getResources().getString(R.string.warning) + "! " + context.getResources().getString(R.string.are_you_sure); + if (Build.VERSION_CODES.O <= Build.VERSION.SDK_INT && !Util.checkNotificationListenerPermission(context)) { + message += " - " + context.getResources().getString(R.string.warning_will_not_scrobble); + message += " - " + context.getResources().getString(R.string.permission_notification_listener); + } + builder.setMessage(message).setPositiveButton(R.string.yes, dialogClickListener) + .setNegativeButton(R.string.no, dialogClickListener).show(); + } } } diff --git a/app/src/main/java/com/adam/aslfms/SettingsActivity.java b/app/src/main/java/com/adam/aslfms/SettingsActivity.java index 2e930c10..fe0638a1 100644 --- a/app/src/main/java/com/adam/aslfms/SettingsActivity.java +++ b/app/src/main/java/com/adam/aslfms/SettingsActivity.java @@ -110,24 +110,10 @@ protected void onCreate(Bundle savedInstanceState) { mDb = null; } - checkNetwork(); - mHeartCurrentTrack = findPreference(KEY_HEART_CURRENT_TRACK); mScrobbleAllNow = findPreference(KEY_SCROBBLE_ALL_NOW); mViewScrobbleCache = findPreference(KEY_VIEW_SCROBBLE_CACHE); mCopyCurrentTrack = findPreference(KEY_COPY_CURRENT_TRACK); - - // TODO: VERIFY EVERYTHING BELOW IS SAFE - int v = Util.getAppVersionCode(this, getPackageName()); - if (settings.getWhatsNewViewedVersion() < v){ - settings.setKeyBypassNewPermissions(2); - mDb.rebuildScrobblesDatabaseOnce(); // keep as not all users have the newest database. - // TODO: verify only needed databases are destroyed - } - if (settings.getKeyBypassNewPermissions() == 2){ - startActivity(new Intent(this, PermissionsActivity.class)); - } - Util.runServices(this); } @Override @@ -150,11 +136,7 @@ protected void onResume() { ifs.addAction(ScrobblingService.BROADCAST_ONSTATUSCHANGED); registerReceiver(onStatusChange, ifs); update(); - Util.runServices(this); - if(settings.getKeyBypassNewPermissions() == 2){ - Intent i = new Intent(this, PermissionsActivity.class); - startActivity(i); - } + runChecks(); } @Override @@ -222,6 +204,23 @@ public void onReceive(Context context, Intent intent) { } }; + private void runChecks(){ + settings = new AppSettings(this); + // TODO: VERIFY EVERYTHING BELOW IS SAFE + int v = Util.getAppVersionCode(this, getPackageName()); + if (settings.getWhatsNewViewedVersion() < v){ + settings.setKeyBypassNewPermissions(2); + mDb.rebuildScrobblesDatabaseOnce(); // keep as not all users have the newest database. + // TODO: verify only needed databases are destroyed + } + if (settings.getKeyBypassNewPermissions() == 2){ + startActivity(new Intent(this, PermissionsActivity.class)); + } else if (settings.getWhatsNewViewedVersion() < v) { + new WhatsNewDialog(this).show(); + } + Util.runServices(this); + } + private void checkNetwork() { this.sendBroadcast(new Intent(AppSettings.ACTION_NETWORK_OPTIONS_CHANGED)); if (Util.checkForOkNetwork(this) != Util.NetworkStatus.OK) { diff --git a/app/src/main/java/com/adam/aslfms/receiver/BuiltInMusicAppReceiver.java b/app/src/main/java/com/adam/aslfms/receiver/BuiltInMusicAppReceiver.java index 3082a4d8..6fe69206 100644 --- a/app/src/main/java/com/adam/aslfms/receiver/BuiltInMusicAppReceiver.java +++ b/app/src/main/java/com/adam/aslfms/receiver/BuiltInMusicAppReceiver.java @@ -180,7 +180,7 @@ void parseTrack(Context ctx, Track.Builder b, Bundle bundle) { long audioid = getAudioId(bundle); if (shouldFetchFromMediaStore(ctx, audioid)) { // read from MediaStore - if(Build.VERSION_CODES.KITKAT >= Build.VERSION.SDK_INT && !Util.checkExternalPermission(ctx)){ + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !Util.checkExternalPermission(ctx)){ Util.myNotify(ctx, ctx.getResources().getString(R.string.warning), ctx.getResources().getString(R.string.permission_external_storage), 81234, PermissionsActivity.class); return; } diff --git a/app/src/main/java/com/adam/aslfms/receiver/ScrobbleDroidMusicReceiver.java b/app/src/main/java/com/adam/aslfms/receiver/ScrobbleDroidMusicReceiver.java index 9bed72c7..04dea6a0 100644 --- a/app/src/main/java/com/adam/aslfms/receiver/ScrobbleDroidMusicReceiver.java +++ b/app/src/main/java/com/adam/aslfms/receiver/ScrobbleDroidMusicReceiver.java @@ -24,9 +24,12 @@ import android.content.ContentUris; import android.content.Context; import android.database.Cursor; +import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; +import com.adam.aslfms.PermissionsActivity; +import com.adam.aslfms.R; import com.adam.aslfms.util.Track; import com.adam.aslfms.util.Util; @@ -116,6 +119,10 @@ else if (id instanceof Integer) b.setWhen(Util.currentTimeSecsUTC()); if (msid != -1) { // read from MediaStore + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !Util.checkExternalPermission(ctx)){ + Util.myNotify(ctx, ctx.getResources().getString(R.string.warning), ctx.getResources().getString(R.string.permission_external_storage), 81234, PermissionsActivity.class); + return; + } final String[] columns = new String[]{ MediaStore.Audio.AudioColumns.ARTIST, MediaStore.Audio.AudioColumns.TITLE, diff --git a/app/src/main/res/layout/activity_permissions.xml b/app/src/main/res/layout/activity_permissions.xml index baa16782..502d28dd 100644 --- a/app/src/main/res/layout/activity_permissions.xml +++ b/app/src/main/res/layout/activity_permissions.xml @@ -1,5 +1,6 @@ + android:layout_height="match_parent" + android:gravity="center_horizontal|center_vertical" > + + - Закрыть Удалить Сбросить Очистить - Уверены? + Вы уверены? Внимание Будет отправлять информацию о композициях на данный веб-сайт Также отключает уведомления о проигрываемых композициях [Hmpf] - Автор: Баги и предложения: %s @@ -29,7 +27,6 @@ Поддержанные веб-сайты: %1 Поддержанные приложения: %s и многие другие… - Сохраненных композиций: Сохраненных композиций: %1 @@ -62,7 +59,6 @@ Композиция, по возрастанию Композиция, по убыванию - Учетная запись Сохранение данных учетной записи на %1 @@ -92,7 +88,6 @@ Вы уверены, что хотите удалить данные учетной записи для %1? Данное действие также приведет к удалению из кэша всех неотправленных композиций. Вы уверены, что хотите удалить данные всех учетных записей? Данное действие также приведет к удалению из кэша всех неотправленных композиций. - Опции композиции Нравится @@ -102,20 +97,25 @@ Введите данные учетной записи last.fm Песня готова - Копировать Копировать текущую композицию в буфер обмена Не удалось скопировть трек в буфер обмена В данный момент композиций не проигрывается - + + Выбор темы + Выберите тему + Темная + Светлая + По-умолчанию + - Необходимо дать приложению разрешения для нормальной работы + НЕОБХОДИМО дать приложению разрешения для корректной работы Необходимы данные учетной записи для нормальной работы - Ограниченная Cеть + Доступ к системным уведомлениям НЕОБХОДИМ для корректной работы + Ограниченная сеть - Внимание! %1$s установлено и может привести к двойному скробблингу. Внимание! %1$s установлено и может привести к двойному скробблингу. Отключите скробблинг в этом приложении или удалите %1$s. @@ -128,9 +128,12 @@ Обнаружено приложений: %1 Начните слушать музыку в поддерживаемом приложении, и оно появится здесь Неизвестное приложение (pre SLS v1.2.3) + Обнаружено новое приложение; нажмите здесь + Очистить приложения + - + ВНИМАНИЕ, может пропускать композиции Настройки Дополнительные настройки Скробблинг @@ -142,6 +145,7 @@ От батареи При подключении к сети Включая настройки экономии заряда + Уведомления на телефон Собственные настройки Когда скробблить Также при окончании плейлиста @@ -157,7 +161,7 @@ После пяти композиций После десяти композиций После 25 композиций - При нажатии на кнопку "Отправить данные сейчас" + При нажатии на кнопку \"Отправить данные сейчас\" Сеть Отправление данных: %1 Любая сеть @@ -166,8 +170,44 @@ Роуминг Запрет на передачу данных в роуминге Передача данных в роуминге + Приоритет уведомлений + + Минимальный + Низкий + По-умолчанию + Высокий + Максимальный + + Языки (* не завершены) + + + + + Китайский* + + Чешский* + + Английский + + Английский (США) + + Французский + + Немецкий* + + Японский* + + Испанский* + + Польский* + + Португальский* + + Русский* + + Украинский* + - Статус Статус скробблинга @@ -187,7 +227,37 @@ Было: Вы уверены, что хотите сбросить свою статистику для %1? Данное действие имеет необратимый характер. Страница с профилем - Уведомления на телефон - + + Настройки разработчика + Эскпортировать базу + + + Активировать + Требуемые разрешения + External Storage + Notification Listener + Battery Optimizations + Battery Basic + Продолжить + + + Название + Новое название + Исполнитель + Новый исполнитель + Альбом + Новый альбом + Сохранить правило + Удалить все правила + Добавить правило + Редактировать правило + Удалить правило + Поле + Измененные значения + Название + Альбом + Исполнитель + ... +