Intro WIP

This commit is contained in:
Karim Abou Zeid 2015-12-30 13:56:18 +01:00
commit 1a66c9e135
3 changed files with 50 additions and 25 deletions

View file

@ -93,6 +93,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
private PagerAdapter pagerAdapter; private PagerAdapter pagerAdapter;
private MaterialCab cab; private MaterialCab cab;
private boolean introActivityHandlingPermissions;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -116,15 +118,20 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
checkChangelog(); checkChangelog();
PreferenceUtil.getInstance(this).incrementAppOpenCount(); PreferenceUtil.getInstance(this).incrementAppOpenCount();
if (PreferenceUtil.getInstance(MainActivity.this).getAppOpenCount() == 1) {
new Thread(new Runnable() { introActivityHandlingPermissions = true;
@Override new Thread(new Runnable() {
public void run() { @Override
if (PreferenceUtil.getInstance(MainActivity.this).getAppOpenCount() == 1) { public void run() {
startActivity(new Intent(MainActivity.this, IntroActivity.class)); startActivity(new Intent(MainActivity.this, IntroActivity.class));
} }
} }).start();
}).start(); }
}
@Override
protected void requestPermissions() {
if (!introActivityHandlingPermissions) super.requestPermissions();
} }
@Override @Override

View file

@ -1,13 +1,12 @@
package com.kabouzeid.gramophone.ui.activities.base; package com.kabouzeid.gramophone.ui.activities.base;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.media.AudioManager; import android.media.AudioManager;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
@ -20,17 +19,20 @@ import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public abstract class AbsBaseActivity extends AbsThemeActivity implements KabViewsDisableAble { public abstract class AbsBaseActivity extends AbsThemeActivity implements KabViewsDisableAble {
public static final int REQUEST_EXTERNAL_STORAGE_PERMISSION = 0; public static final int PERMISSION_REQUEST = 100;
private boolean areViewsEnabled; private boolean areViewsEnabled;
private boolean hasExternalStoragePermission; private boolean createdWithPermissionsGranted;
private String[] permissions;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setVolumeControlStream(AudioManager.STREAM_MUSIC); setVolumeControlStream(AudioManager.STREAM_MUSIC);
hasExternalStoragePermission = hasExternalStoragePermission();
permissions = getPermissionsToRequest();
createdWithPermissionsGranted = hasPermissions();
} }
@Override @Override
@ -38,9 +40,9 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
super.onResume(); super.onResume();
enableViews(); enableViews();
if (!hasExternalStoragePermission()) { if (!hasPermissions()) {
requestPermissions(); requestPermissions();
} else if (didPermissionsChanged()) { } else if (!createdWithPermissionsGranted) {
// the handler is necessary to avoid "java.lang.RuntimeException: Performing pause of activity that is not resumed" // the handler is necessary to avoid "java.lang.RuntimeException: Performing pause of activity that is not resumed"
new Handler().postDelayed(new Runnable() { new Handler().postDelayed(new Runnable() {
@Override @Override
@ -89,39 +91,47 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
return areViewsEnabled; return areViewsEnabled;
} }
private boolean didPermissionsChanged() { @Nullable
return hasExternalStoragePermission != hasExternalStoragePermission(); protected String[] getPermissionsToRequest() {
return null;
} }
private void requestPermissions() { protected void requestPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_EXTERNAL_STORAGE_PERMISSION); requestPermissions(permissions, PERMISSION_REQUEST);
} }
} }
@SuppressLint("NewApi") protected boolean hasPermissions() {
private boolean hasExternalStoragePermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; for (String permission : permissions) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
} }
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_EXTERNAL_STORAGE_PERMISSION) { if (requestCode == PERMISSION_REQUEST) {
for (int grantResult : grantResults) { for (int grantResult : grantResults) {
if (grantResult == PackageManager.PERMISSION_GRANTED) { if (grantResult == PackageManager.PERMISSION_GRANTED) {
recreate(); recreate();
return; return;
} }
} }
//TODO snack nachricht veralgemeinern
Snackbar.make(getWindow().getDecorView(), R.string.permission_to_access_external_storage_denied, Snackbar.LENGTH_INDEFINITE) Snackbar.make(getWindow().getDecorView(), R.string.permission_to_access_external_storage_denied, Snackbar.LENGTH_INDEFINITE)
.setAction(getString(R.string.action_settings), onGoToPermissionSettingsClickListener) .setAction(getString(R.string.action_settings), goToPermissionSettingsOnClick)
.setActionTextColor(ThemeSingleton.get().positiveColor) .setActionTextColor(ThemeSingleton.get().positiveColor)
.show(); .show();
} }
} }
private View.OnClickListener onGoToPermissionSettingsClickListener = new View.OnClickListener() { private View.OnClickListener goToPermissionSettingsOnClick = new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
//TODO //TODO

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.activities.base; package com.kabouzeid.gramophone.ui.activities.base;
import android.Manifest;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@ -9,6 +10,7 @@ import android.content.ServiceConnection;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener; import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
@ -175,4 +177,10 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
} }
} }
} }
@Nullable
@Override
protected String[] getPermissionsToRequest() {
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
}
} }