package com.simplecity.amp_library.ui.activities; import android.Manifest; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.media.AudioManager; import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.preference.PreferenceManager; import android.support.annotation.CallSuper; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.view.Window; import android.widget.Toast; import com.greysonparrelli.permiso.Permiso; import com.simplecity.amp_library.interfaces.ThemeCallbacks; import com.simplecity.amp_library.playback.MusicService; import com.simplecity.amp_library.utils.MusicServiceConnectionUtils; import com.simplecity.amp_library.utils.SettingsManager; import com.simplecity.amp_library.utils.ThemeUtils; import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; public abstract class BaseActivity extends AppCompatActivity implements ServiceConnection, ThemeCallbacks { private SharedPreferences mPreferences; private MusicServiceConnectionUtils.ServiceToken mToken; @CallSuper protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); Permiso.getInstance().setActivity(this); setVolumeControlStream(AudioManager.STREAM_MUSIC); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); mPreferences.registerOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener); Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() { @Override public void onPermissionResult(Permiso.ResultSet resultSet) { if (resultSet.areAllPermissionsGranted()) { bindToService(); } else { Toast.makeText(BaseActivity.this, "Permission check failed", Toast.LENGTH_LONG).show(); finish(); } } @Override public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) { callback.onRationaleProvided(); } }, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WAKE_LOCK); } void bindToService() { mToken = MusicServiceConnectionUtils.bindToService(this, this); } @Override protected void onResume() { keepScreenOn(SettingsManager.getInstance().keepScreenOn()); super.onResume(); Permiso.getInstance().setActivity(this); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Permiso.getInstance().onRequestPermissionResult(requestCode, permissions, grantResults); } @Override protected void onDestroy() { if (mToken != null) { MusicServiceConnectionUtils.unbindFromService(mToken); mToken = null; } mPreferences.unregisterOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener); super.onDestroy(); } @Override @CallSuper public void onServiceConnected(ComponentName name, IBinder service) { sendBroadcast(new Intent(MusicService.InternalIntents.SERVICE_CONNECTED)); } @Override public void onServiceDisconnected(ComponentName name) { } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //Fix for issue on LG devices if (keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND)) { return true; } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { //Fix for issue on LG devices if (keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND)) { openOptionsMenu(); return true; } return super.onKeyUp(keyCode, event); } private void keepScreenOn(boolean on) { final Window window = getWindow(); if (on) { window.addFlags(FLAG_KEEP_SCREEN_ON); } else { window.clearFlags(FLAG_KEEP_SCREEN_ON); } } private SharedPreferences.OnSharedPreferenceChangeListener mSharedPreferenceChangeListener = (sharedPreferences, key) -> { if (key.equals("pref_theme_highlight_color") || key.equals("pref_theme_accent_color") || key.equals("pref_theme_white_accent")) { themeColorChanged(); } if (key.equals("pref_nav_bar")) { navBarThemeChanged(SettingsManager.getInstance().canTintNavBar()); } }; @Override public void themeColorChanged() { navBarThemeChanged(SettingsManager.getInstance().canTintNavBar()); } @Override public void navBarThemeChanged(boolean canTheme) { ThemeUtils.themeNavBar(this, canTheme); } protected abstract String screenName(); }